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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2009, 00:07   #1
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию Динамические компоненты и MouseMove

Суть:
Создаю динамически компоненты - TPanel, количество изночально не известно. Хочу сделать что бы их можно было свободно перемещать по форме. Делаю это следующим образом. Объявляю три глобальные переменные
Код:
x1,y1:integer;
d:boolean;
При создании компонентов присваиваю им функции OnMouseDown, OnMouseUp и OnMouseMove.

Первые две имеют код

Код:
procedure TMainForm.PanelMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
d:=True;
x1:=x;
y1:=y;
end;

procedure TMainForm.PanelMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
d:=False;
end;
а вот для OnMouseMove не знаю как узнать над каким компонентом двигается мышь, но структура следующая

Код:
procedure TMainForm.PanelMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
if d=True then
 begin
  Panel.Left:=Panel.Left+x1-x;
  Panel.Top:=Panel.Top+x1-x;
 end;
end;
И сам вопрос. Как мне узнать над каким именно Panel находится курсор мыши?
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 22.01.2009, 01:17   #2
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

В обработчике события используй Sender - это указатель на объек обработчика события.
Пример:
Код:
if Sender is TPanel then
begin
  (Sender as TPanel).Left := ...;
  (Sender as TPanel).Top := ...;
end;
MalexG вне форума Ответить с цитированием
Старый 22.01.2009, 02:30   #3
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

Шульц, это старые методы, лови примочку в mousedown пиши
Код:
releasecapture;
sendmessage((sender as twincontrol).Handle, wm_syscommand,$f012, 0);
не надо ни каких переменных.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 22.01.2009, 10:36   #4
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Deight, чет у мя Делфа на все твои слова кодовые ругается. Для Делфи 7 эти примочки работают?
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 22.01.2009, 10:39   #5
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Причем тут версия Делфей ...
Вот так как сказал ,Deight :
Код:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  releasecapture;
  sendmessage((sender as twincontrol).Handle, wm_syscommand,$f012, 0);
end;
Все работает ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 22.01.2009, 10:42   #6
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Вот тоже самое обсалютно написал. Пишет что не знает слов releasecapturе, sendmessage и wm_syscommand.
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 22.01.2009, 10:49   #7
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

Шульц, а куда вы пишите этот код?
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 22.01.2009, 10:53   #8
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Сообщение от Deight Посмотреть сообщение
Шульц, а куда вы пишите этот код?
+
Модули Windows и Messages подключены ?

P.S.
Может в самом контроле не подключено событие ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 22.01.2009 в 10:58.
Kotofff вне форума Ответить с цитированием
Старый 22.01.2009, 11:49   #9
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Код:
Шульц, а куда вы пишите этот код?
Пишу в обработчик процедуры, которая присвоена событию компонента OnMouseDown/

Код:
+ 
Модули Windows и Messages подключены ?
Вы правы, накасячил сам, совсем забыл. Все работает!

MalexG, Deight, Kotofff спасибо вам.
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 22.01.2009, 12:15   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Шульц, это старые методы, лови примочку в mousedown пиши
уж если говорить о современности то быстрее Taction в руки...
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические изображения. Sectron Паскаль, Turbo Pascal, PascalABC.NET 3 15.04.2014 14:16
Динамические списки Ольчик Паскаль, Turbo Pascal, PascalABC.NET 4 15.01.2012 14:33
динамические строки SeregaPIF Общие вопросы C/C++ 1 19.11.2007 08:20
Динамические объекты 095 Общие вопросы Delphi 1 04.10.2007 21:16