Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> показать путь на форме цветом 
:(
    Опции темы
dikiy
Дата 28.4.2006, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Ситуация такая необходимо  после передвижения по форме панели оставить после нее путь (помеченый каким - нибудь цветом)
панель передвигается с помощью стрелок.
Код

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 case key of
 37:if _carentpos.x>0 then
    begin
     if lab[_carentpos.y,_carentpos.x-1]=0
     then _carentpos.x:=_carentpos.x-1
      else beep;
     end;
 39:if _carentpos.x<carentLabW-1 then
    begin
     if lab[_carentpos.y,_carentpos.x+1]=0
     then _carentpos.x:=_carentpos.x+1
     else beep;
    end;
 38:if _carentpos.Y>0 then
    begin
     if lab[_carentpos.Y-1,_carentpos.x]=0
     then _carentpos.Y:=_carentpos.Y-1
     else beep;
    end;
 40:if _carentpos.Y<carentLabh-1 then
    begin
     if lab[_carentpos.Y+1,_carentpos.x]=0
     then _carentpos.Y:=_carentpos.Y+1
     else beep;
    end;
 end;
 Panel1.Top :=image1.Top  +_carentpos.y*zoom;
 Panel1.Left:=image1.Left+_carentpos.x*zoom;
 _from:=_carentpos;
 
PM MAIL   Вверх
PROeXT
Дата 28.4.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Можно сделать так: если у тебя переменная _carentpos содержит какое-то текущее положение объекта, то в конце своей приведенной процедуры попробуй дописать:
Код

  Form1.Canvas.LineTo(_carentpos.X, _carentpos.Y);


Но сначала в событии OnCreate своей формы тебе необходимо задать атрибуты линии, которую ты будешь рисовать. Примерно так:
Код

With Form1.Canvas Do
Begin
 Pen.Color:=clRed; {Цвет линии}
 Pen.Width:=5; {Толщина линии}
 PenPos:=_carentpos; {Задаем начальное положение, откуда будем рисовать}
End; {With}


Да, надеюсь, что _carentpos у тебя определяется в момент запуска. Иначе, получится "чуть-чуть" не то   smile  
PM MAIL ICQ   Вверх
dikiy
Дата 28.4.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Да, вот чуть чуть не то и получилось smile  А если я буду знать начало пути то как лучше сделать? 
PM MAIL   Вверх
dikiy
Дата 28.4.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Попробовал так:
Код

Form1.Canvas.MoveTo(Form1.Canvas.PenPos.X+450,Form1.Canvas.PenPos.Y+450);

позиция по y правильная а по x  почему-то не работает smile  
PM MAIL   Вверх
PROeXT
Дата 28.4.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(dikiy @  28.4.2006,  10:15 Найти цитируемый пост)
Form1.Canvas.MoveTo(Form1.Canvas.PenPos.X+450,Form1.Canvas.PenPos.Y+450);


А это зачем? Ведь я ж писал:

Цитата(PROeXT @  28.4.2006,  09:18 Найти цитируемый пост)
With Form1.Canvas Do    
Begin    
 Pen.Color:=clRed; {Цвет линии}    
 Pen.Width:=5; {Толщина линии}    
 PenPos:=_carentpos; {Задаем начальное положение, откуда будем рисовать}    
End; {With}


И что значит: 
Цитата(dikiy @  28.4.2006,  10:15 Найти цитируемый пост)
 по x  почему-то не работает
  smile

Добавлено @ 10:22 
Опиши, что не так? 
PM MAIL ICQ   Вверх
dikiy
Дата 28.4.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Начало пути начинается не с той координаты по х рисуется на форме в другом месте а не сразу за курсором.
курсор изначально находится где-то в серелине, а _carentpos изначально 0,0 и рисоваться начинает из верхнего левого угла 
пришлось попробовать поставить карандаш на свои координаты, по y все нормально, а по х осталось также в стороне. 
PM MAIL   Вверх
PROeXT
Дата 28.4.2006, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



А если вот так?
Код

procedure TfmMain.FormCreate(Sender: TObject);
begin
 CurrPos.X:=fmMain.Panel1.Left;
 CurrPos.Y:=fmMain.Panel1.Top+Panel1.Height Div 2;

 fmMain.Canvas.MoveTo(CurrPos.X, CurrPos.Y);
end;



А потом
Код

procedure TfmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 Case Key Of    
  VK_UP:Dec(CurrPos.Y);
  VK_DOWN:Inc(CurrPos.Y);
  VK_LEFT:Dec(CurrPos.X);
  VK_RIGHT:Inc(CurrPos.X);
 end;{Case}

 With fmMain.Canvas Do
 Begin
  Pen.Color:=clRed;
  Pen.Width:=5;
  fmMain.Canvas.LineTo(CurrPos.X, CurrPos.Y);
 End; {With}
 Panel1.Left:=CurrPos.X;
 Panel1.Top:=CurrPos.Y-Panel1.Height Div 2;
end;

 
PM MAIL ICQ   Вверх
PROeXT
Дата 28.4.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Только не забудь, когда "таскаемый" объект будет пересекать траеторию своего движения - эта траектория "потрется" соразмерно размеру самого объекта  smile  
PM MAIL ICQ   Вверх
Sunvas
Дата 28.4.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(PROeXT @  28.4.2006,  13:22 Найти цитируемый пост)
Только не забудь, когда "таскаемый" объект будет пересекать траеторию своего движения - эта траектория "потрется" соразмерно размеру самого объекта     

Да это так, поэтому лучше всего рисовать на Image. Ведь если форма свернется или на не насунет другое приложение, то все рисование будет зря.. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.