Аннотация: студент не может сдать зачет: нужно написать программу, которая печатает календарь на год.
[Дмитрий]
Здараствуйте, Андрей Сергеевич вы не подскажите как текст из поля Memo в делфи перенести в поле Image?
[Я]
http://www.sql.ru/forum/actualthread.aspx?tid=826471
это как в картинку текст вывести
только текст надо брать из memo а не готовый выводить
[Дмитрий]
дак он у меня выводит только первую строчку из memo и все
[Я]
ну т.е. Memo1.Text подставить
Text должен вроде все строки возвращать
которые в Linеs лежат
но могу врать - не помню уже
[Дмитрий]
вы сможете посмотреть мои код ?
[Я]
тогда просто циклом по строкам пробежаться и в одну строку собрать
у меня делфи даже не установлен )
[Дмитрий]
блин
procedure TForm1.Button1Click(Sender: TObject);
var
a,i:string;
begin
memo1.Clear;
Y:=StrToInt(EditY.Text);
D:=StrToInt(EditD.Text);
M:=StrToInt(EditM.Text);
for NumStr:=1 to 25 do
Memo1.Lines.Add(StrOfKalendar(Y,NumStr));
Memo1.Lines.Add(''); Memo1.Lines.Add('');
a:=Memo1.Lines.Strings[Memo1.Lines.Add(StrOfKalendar(Y,NumStr))];
for i:=1 to 25 do
Image1.Canvas.TextOut(0,0,a);
Image1.Canvas.TextHeight(i,0,a);
end;
вот у меня такои код написал на кнопку запуска
и он у меня выводит только одну строчку из memo
[Я]
логично
почему вот эта строка
a:=Memo1.Lines.Strings[Memo1.Lines.Add(StrOfKalendar(Y,NumStr))];
не внутри цикла?
даже не так
вот ЭТО
выводит 25 раз одну и ту же строку a
for i:=1 to 25 do
Image1.Canvas.TextOut(0,0,a);
причем в одно и то же место
[Дмитрий]
))) а как тогда эту процедуру можно изменить что бы нормально все выводила?
[Я]
подставить правильные аргументы в TextOut(0,0,a);
первые два аргумента - координаты
они у тебя всегда 0 почему-то
последнйи аргумент - какую строку выводить
[Дмитрий]
да, это кординаты. и он начинает с кординаты (0,0) тоесть с верхнего левого угла
[Я]
заметь, все 25 вызовов всегда начинают с координаты (0,0)
[Дмитрий]
ну я там писал
for i:=0 to 25 do
TextOut(i,0,a)
[Я]
во-первых, первая координата, это ось икс
т.е. ты каждую строчку выводил правее предыдущей
во-вторых координаты измеряются в пикселях, а не символах
[Дмитрий]
TextOut(0,i,a)
18:56:28
[Я]
т.е. ты каждую строчку на один пиксель правее выводил
сейчас на один пиксель ниже
[Дмитрий]
а как тогда можно тут задать цикл?
i:=i+10
[Я]
бред
[Дмитрий]
если так начать этот цикл
[Я]
i так и должен меняться от 0 до 25
[Дмитрий]
ну в поле memo 25 строчек
[Я]
но в аргументах должно стоять значение в несколько раз большее, чем лежит в i
[Дмитрий]
тоесть можно
TextOut(0,i*10,a)
[Я]
умница
[Дмитрий]
но она все равно выводит все в одну строчку
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
a:string;
begin
memo1.Clear;
Y:=StrToInt(EditY.Text);
D:=StrToInt(EditD.Text);
M:=StrToInt(EditM.Text);
for NumStr:=1 to 25 do
Memo1.Lines.Add(StrOfKalendar(Y,NumStr));
Memo1.Lines.Add(''); Memo1.Lines.Add('');
a:=Memo1.Lines.Strings[Memo1.Lines.Add(StrOfKalendar(Y,NumStr))];
for i:=0 to 25 do
Image1.Canvas.TextOut(0,i-10,Memo1.Text);
end;
вот так я написал
[Я]
вопрос на засыпку: чем операция умножения отличается от операции вычитания?
[Дмитрий]
)))
я перепутал клавищу
[Я]
теперь надо Memo1.Text поменять
[Дмитрий]
онм не выводит одну итуже строчку черезе 10 пикселей
а как его поменять?
[Я]
брать строки по порядку из Memo1.Lines
[Дмитрий]
это опять надо через цикл?
[Я]
у тебя уже есть цикл
внутри которого координаты ты поправил
а выводимый текст еще нет
[Дмитрий]
ну
[Я]
вот и исправляй Memo1.Text
[Дмитрий]
что то я не понял как его исправлять?
[Я]
Lines это массив
какой элемент массива попросишь, такую строку и получишь
[Дмитрий]
Memo1.Lines+1 так что ли?
Memo1.Lines*i
[Я]
ты как обычно к элементам массива обращаешься?
[Дмитрий]
ни как)
вроде
[Я]
погугли, как с массивами работать тогда )
[Дмитрий]
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
a:array[1..10] of integer;
n:integer;//образец
found:boolean;
begin
//Введем массив
for i:=1 to 10 do
//Преобразуем полученные подстроки в числа
a[i]:=StrToInt(GetSubStr(Edit1.text,' ',i));//используем пробел в качестве разделителя
n:=StrToInt(Edit2.text);
found:=false;
i:=1;
REPEAT
if a[i] = n then found:=true
else i:=i+1;
UNTIL (i > 10) or (found = true);
if found then showmessage('Совпадение с элементом номер '+IntToStr(i));
end;
типо этого что ли?
[Я]
типа того
но это не значит что ЭТО надо копировать
какая переменнаяв этой процедуре является массивом?
[Дмитрий]
a
[Я]
тааак. правильно
а что пишут, когда хотят из массива элемент получить?
[Я]
у тебя есть массив Memo1.Lines
ИЗ него нужно взять элемент
[Дмитрий]
что бы он брал по однои строчке из memo1 и перекидывал в image
[Я]
ты сейчас как джамшут повторяешь )
[Дмитрий]
)))
дак я не могу понять, как с этим массивом разобраться
[Я]
есть у тебя массив A
[Дмитрий]
ну да
[Я]
чтобы получить из него седьмой элемент, что нужно написать?
[Дмитрий]
a[7]
[Я]
таак. а если массив называется не A а, например, Memo1.Lines?
[Дмитрий]
Memo1.Lines[7]
?
[Я]
даааа
а если я хочу не седьмой элемент, а i -ый?
[Дмитрий]
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
memo1.Clear;
Y:=StrToInt(EditY.Text);
D:=StrToInt(EditD.Text);
M:=StrToInt(EditM.Text);
for NumStr:=1 to 25 do
Memo1.Lines.Add(StrOfKalendar(Y,NumStr));
Memo1.Lines.Add(''); Memo1.Lines.Add('');
for i:=0 to 25 do
Image1.Canvas.TextOut(0,i*20,Memo1.Lines[i].Text);
end;
то есть вот так?
[Я]
попробуй
делфи у тебя стоит, не у меня
[Дмитрий]
он выдает ощибку пере next
text
[Я]
а откуда там Text появился?
[Дмитрий]
да все выводит
[Я]
алилуя!
[Дмитрий]
а как щас там выровнять колонки цифр?
[Я]
сразу подскажу: используй моноширинный шрифт
[Дмитрий]
это как понять моноширный шрифт?
[Я]
шрифт, в отором все символы одинаковой ширины
куда-нибудь в начало поставь
Image1.Canvas.Font.Pitch := fpFixed;
[Дмитрий]
все равно он так же все рисует
[Я]
тогда погугли что-нибудь в духе delphi+image+fixed font+textout
[Дмитрий]
тогда еще идин вопрос, а как сейчас убрать поле мемо, и было только image?
если его удалять то как бы ничего ведь выводиться не будет
[Я]
первый вариант (джедайский): найти код ,который заполняет мемо и научить его сохранять строки не в мемо а сразу в картинку печатать
второй вариант (на темную сторону силы ведет): сделать memo1 невидимым
[Дмитрий]
это как?
на темную силу это как бы получше
)))
[Я]
Йода сейчас в гробу с бешенной силой вращается
[Дмитрий]
понятно
[Я]
Memo1.visible := false;
[Дмитрий]
я поставил так, только он все равно не чего не выводит в image
[Я]
а кнопку нажимал?
[Дмитрий]
какую?
[Я]
на которую у тебя повешен вывод календаря в картинку
[Дмитрий]
я нажал на поле мемо и там ему присвоил false
[Я]
че?
[Дмитрий]
в object inspector, с разделе visible япоставил false