Трусов Андрей Сергеевич
1.Студенческое

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Links
Кожевенное мастерство: сумки, ремни своими руками
Оценка: 4.09*16  Ваша оценка:
  • Аннотация:
    студент не может сдать зачет: нужно написать программу, которая печатает календарь на год.


 [Дмитрий]
 Здараствуйте, Андрей Сергеевич вы не подскажите как текст из поля 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
 
 [Я]
 тааак. правильно
 а что пишут, когда хотят из массива элемент получить?
 
 [Дмитрий]
 a[i]:=StrToInt(GetSubStr(Edit1.text,' ',i));
 
 [Я]
 конкретизируй
 какое именно место в этой строке отвечает за получение элемента массива
 
 [Дмитрий]
 a[i]
 
 [Я]
 бинго!
 тогда что надо написать, чтобы получить элемент массива Memo1.Lines?
 
 [Дмитрий]
 a[i]:=Memo1.Lines.Strings[Memo1.Lines.Add(StrOfKalendar(Y,NumStr))];
 
 [Я]
 нааафиг надо
 у тебя он уже заполнен
 
 [Дмитрий]
 в смысде
 
 [Я]
 у тебя есть массив 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
 
 [Я]
 воот
 и как, при запуске мемо исчезает?
 
 [Дмитрий]
 да
 
 [Я]
 возмущение в силе чувствую я...
 
 [Дмитрий] )))
Оценка: 4.09*16  Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"