Трусов Андрей Сергеевич : другие произведения.

1.Студенческое

"Самиздат": [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:


Оценка: 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т список
Сайт - "Художники" .. || .. Доска об'явлений "Книги"