Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2014, 09:37   #1
Дмитрий8
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 10
По умолчанию

Люди подскажите неучу
пытаюсь нарисовать линию по занесенным координатам в memo прежде делаю очистку от ненужных записей но не получаеться организовать цикл : (в данный момент ругаеться на первый if который заменяет x=)

Код:
procedure TForm4.BitBtn1Click(Sender: TObject);
var xp,yp,i: integer;
k:string;
begin
   for i:=0 to Memo1.Lines.Count-1 do
     begin
      if Memo1.Lines[i]<>'' then

       k:= Memo1.Lines[i];
       if StringReplace(k,'x=','',[rfReplaceAll]) then
       xp:=StrToInt(k)
       else
       StringReplace(k,'y=','',[rfReplaceAll]);
       yp:=StrToInt(k);
       ShowMessage(k);
       Form1.Image1.Canvas.LineTo(xp,yp);

     end;
end;
Буду очень благодарен помощи!



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.


я понимаю в чем щас ошибка "знач if должно выдавать bollean тип, но не понимаю как сделать такую конструкцию правильно"

Последний раз редактировалось Stilet; 18.05.2014 в 10:52.
Дмитрий8 вне форума Ответить с цитированием
Старый 18.05.2014, 10:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

код у Вас неправильный (запутанный, и операторных скобок begin end не хватает).

По моему, то, что Вы хотитет сделать, называетс "парсинг" (разбор) текста, с выделением из текста нужных элементов.

Вы лучше расскажите, в каком виде у Вас хранятся x и y в тексте.
Тогда будет повод для конкретной помощи!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2014, 10:43   #3
Дмитрий8
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 10
По умолчанию

извиняюсь за теги, а про парсинг это видимо то, что я хочу, да мне нужно взять из поля memo только координаты, а значения храняться в таком формате
{
x=...(число)
y=...
x=...
y=...
и.т.д.
}
именно 2 символа в начале надо отрезать, перевести остаток строки в координ и нарисовать линию потом.
Дмитрий8 вне форума Ответить с цитированием
Старый 18.05.2014, 11:25   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте такой код:
Код:
procedure xxxxxxxClick(Sender: TObject);
var px,py,i: integer;
  s : string;
begin
   Image1.Canvas.MoveTo(0,0); {первая-начальная точка}
   i:=0;
   while i<Memo1.Lines.Count-2 do begin
     if (Pos('x=', Memo1.Lines[i])>0)
          and (Pos('y=', Memo1.Lines[i+1])>0) then begin
            s := Memo1.Lines[i];
            try
              px := StrToInt(Trim(Copy(s, Pos('x=', s)+2, Length(s))));
              s := Memo1.Lines[i+1];
              py := StrToInt(Trim(Copy(s, Pos('y=', s)+2, Length(s))));
              Image1.Canvas.LineTo(px,py);
            except
              ShowMessage('в строках '+IntToStr(i)+' '+IntToStr(i+1)+ ' неверные числа' );
            end;
            Inc(i,2)
          end
          else Inc(i)
   end;
end;
ну, как заготовка для дальнейше доработки...

важно.
1) обрабатываются только строки, где X= и y= идут подряд
2) x= и y= регистрозависимые (малый регистр)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2014, 13:37   #5
Дмитрий8
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 10
По умолчанию

Serge_Bliznykov
Большое спасибо зарисовало, только замысел был слегка иной
чтоб он брал идущие координаты "x=" и "y=" и между ними рисовал линию, потом брал след пару и между ними уже рисовал линию
ну сейчас попробую помозгую еще сам с твоим кодом
для начала это закоментил //Image1.Canvas.MoveTo(0,0);{первая-начальная точка}
И теперь он рисует правильно первую линию, а дальше начинает пририсовывать лишние
Дмитрий8 вне форума Ответить с цитированием
Старый 18.05.2014, 13:58   #6
Дмитрий8
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 10
По умолчанию

Как вариант я чищю поле мемо после каждой прорисовки линии, после чего можно заного внести туда новые 4 координаты и нарисовать линию, это конечно чучуть не как я задумывал ))) но тоже работает
Дмитрий8 вне форума Ответить с цитированием
Старый 23.05.2014, 23:03   #7
Дмитрий8
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 10
По умолчанию

сделал и тоб лини отдельно рисовалась и чтоб многоугольник даже, после всех отмеченых точек на рис. спасибо еще раз за код Serge_Bliznykov
Дмитрий8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нарисовать в паскале линию... Proskurina Помощь студентам 3 10.10.2012 15:07
нарисовать в паскале линию Proskurina Паскаль, Turbo Pascal, PascalABC.NET 2 09.10.2012 00:14
нарисовать линию по нажатию мыши Kukurudza Общие вопросы C/C++ 9 27.09.2011 20:07
Как нарисовать необычную линию Marsel737 Общие вопросы Delphi 2 17.05.2011 20:03
Нарисовать на координатной площади линию a*x+b*y+c=0 НУБ!!! Общие вопросы Delphi 4 13.05.2008 22:48