|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Событие MouseLeave формы
Добрый день, возникла проблема, необходимо среагировать на покидание мышью формы. Пробую MouseLeave. Оно не срабатывает для формы, поскольку форма занята компонентами. Для компонентов срабатывает. Обрабатывать ливы всего с чего можно покинуть форму или рассчитывать с таймером позицию курсора, как-то оно не то. Может можно все таки заставить его отработать на форме за всех компонентов? ))
PS Код:
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; Приводит к срабатываниям при переходе с компонента на компонент или сразу же при нажатии ЛКМ (а мне как раз надо отловить уход мыши с нажатой ЛКМ) |
#2
|
||||
|
||||
Можно через использование айпишной GetCapture
Код:
procedure TForm1.FormDeactivate(Sender: TObject); begin ReleaseCapture; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); begin if GetCapture = 0 then SetCapture(Handle); if PtInRect(Rect(Left, Top, Left + Width, Top + Height), ClientToScreen(Point(x, y))) then Caption:= 'Мышка на форме' else Caption:= 'Мышка за пределами формы'; inherited; end;// Drkb:: 01573 Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Ну это почти что расчет позиции курсора, наверно... Спасибо, правда надеялся, что мне ткнут в чем моя ошибка и заработает событие формы
|
#4
|
||||
|
||||
Цитата:
Код:
// В секции type формы procedure frmMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER; procedure frmMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE; ... var flg: boolean; procedure TForm1.frmMouseEnter(var AMsg: TMessage); begin flg:= true; // срабатывает когда мышка на форме Refresh; end; procedure TForm1.frmMouseLeave(var AMsg: TMessage); begin flg:= false; // срабатывает когда мышка ушла с формы Refresh; end;// Drkb: 01574 Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Я это пробовал:
Цитата:
PS вообще это мне надо для попытки обойти еще одну траблу с Drag&Drop, если вы возможно сможете помочь разобраться с Drag&Drop то ловить эти события не придется. (Трабла состоит в том, что у меня получается реализовать перетаскивания как внутри формы, так и на внешние приложения, но раздельно - совместно один из подвидов - отрубается) Последний раз редактировалось Oreon, 08.05.2013 в 00:51. |
#6
|
||||
|
||||
Как ты проверяешь непонятно.
Код:
type TForm2 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER; procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE; public { Public declarations } end; var Form2: TForm2; Wnd : HWND; implementation {$R *.dfm} procedure TForm2.MouseEnter(var Msg: TMessage); begin Label1.Caption := 'Мышка на форме'; end; procedure TForm2.MouseLeave(var Msg: TMessage); begin Label1.Caption := 'Мышка вне формы'; end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
Испытывал и с ЛКМ и с ПКМ и с колёсиком, на форме куча компонентов лежит, панелек и др. чепухи, уходит с формы и приходит на форму мыша норм., ни каких ложных срабатываний не наблюдаю, слежу за флажком.
З.Ы. Что-то здесь не так Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 08.05.2013 в 01:18. |
#8
|
||||
|
||||
А зачем тебе флаг?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
Цитата:
Код:
if flg then Label1.Caption:= 'Мышка на форме' else Label1.Caption:='Мышка вне формы'; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#10
|
||||
|
||||
Ну тогда нужен Notify или таймер.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
||||
|
||||
Пора закрывать тему - ТС свалил предварительно объяснив что это всё ему не нужно, поскольку он реализует перетаскивание как внутри проги, так и с применением внешнего драга, а в этой топке была попытка закрыть одни косяки другими. Всё как обычно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#12
|
||||
|
||||
Как всегда - Мне нужно a, как сделать b, c не предлагать.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Alegun (08.05.2013)
|
#13
|
|||
|
|||
Цитата:
|
#14
|
|||
|
|||
Проверил еще раз (у меня 2010)
Код:
procedure TMainForm.FormMouseEnter(Sender: TObject); begin ShowMessage(''); end; Код:
procedure TMainForm.Image1MouseEnter(Sender: TObject); begin ShowMessage(''); end; Вообще приложение имеет такую конфигурацию: вся форма закрыта несколькими панелями со сплитерами, и на панелях уже собственно элементы интерфейса |
#15
|
|||
|
|||
Цитата:
Код:
DoDragDrop(dataObj, Mainform, dwOKEffects, AResult); Последний раз редактировалось Oreon, 08.05.2013 в 20:57. |