![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день, возникла проблема, необходимо среагировать на покидание мышью формы. Пробую 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; |
|
#7
|
||||
|
||||
|
Испытывал и с ЛКМ и с ПКМ и с колёсиком, на форме куча компонентов лежит, панелек и др. чепухи, уходит с формы и приходит на форму мыша норм., ни каких ложных срабатываний не наблюдаю, слежу за флажком.
З.Ы. Что-то здесь не так Цитата:
Последний раз редактировалось Alegun, 08.05.2013 в 01:18. |
|
#8
|
||||
|
||||
|
А зачем тебе флаг?
|
|
#9
|
||||
|
||||
|
Цитата:
Код:
if flg then Label1.Caption:= 'Мышка на форме' else Label1.Caption:='Мышка вне формы'; |
|
#10
|
||||
|
||||
|
Ну тогда нужен Notify или таймер.
|
|
#11
|
||||
|
||||
|
Пора закрывать тему - ТС свалил предварительно объяснив что это всё ему не нужно, поскольку он реализует перетаскивание как внутри проги, так и с применением внешнего драга, а в этой топке была попытка закрыть одни косяки другими. Всё как обычно
![]() |
|
#12
|
||||
|
||||
|
Как всегда - Мне нужно a, как сделать b, c не предлагать.
|
| Этот пользователь сказал Спасибо 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. |