TForm1 = class(TForm)
protected
proceure WMNCMouseLeave(var Message: TMessage); message WM_NCMOUSELEAVE;
end;
...
procedure TForm1.WMNCMouseLeave(var Message: TMessage);
begin
end;
Обработать "уход" курсора с формы!
Вообщем проблема в том, что мне нужно обработать событие, когда курсор покидает форму! Не компонент, а именно форму! С компонентом там легко, а вот с формой(((( Подскажите плизз! Сам по ходу дела не дойду)))
Код:
Цитата:
Originally posted by hardcase
Код:
TForm1 = class(TForm)
protected
proceure WMNCMouseLeave(var Message: TMessage); message WM_NCMOUSELEAVE;
end;
...
procedure TForm1.WMNCMouseLeave(var Message: TMessage);
begin
end;
protected
proceure WMNCMouseLeave(var Message: TMessage); message WM_NCMOUSELEAVE;
end;
...
procedure TForm1.WMNCMouseLeave(var Message: TMessage);
begin
end;
А это событие для любого наследника TWinControl справедливо?
Цитата:
Originally posted by misha_turist
А это событие для любого наследника TWinControl справедливо?
А это событие для любого наследника TWinControl справедливо?
Это сообщение генерируется системой при вызове TrackMouseEvent
И оно корректно работает тока с наследниками TForm. А с самой формой....Процедура вызывается тока когда форма фокус потеряет! А нада чтоб когда мыша просто покидала форму! Вообщем эффект как у панели задач, когда ставишь "АвтоУбирание")))
Вот пример.
Код:
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
protected
procedure WMMouceLeave(var Message: TMessage); message WM_MOUSELEAVE;
public
{ Public declarations }
end;
procedure TForm1.WMMouceLeave(var Message: TMessage);
begin
Label1.Caption:='Mouse! Come back'
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var Et: tagTRACKMOUSEEVENT;
begin
Et.cbSize:=sizeof(Et);
Et.dwFlags:=TME_LEAVE;
Et.hwndTrack:=Handle;
Et.dwHoverTime:=1000;
TrackMouseEvent(Et);
Label1.Caption:='Mouse is here'
end;
TForm1 = class(TForm)
Label1: TLabel;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
protected
procedure WMMouceLeave(var Message: TMessage); message WM_MOUSELEAVE;
public
{ Public declarations }
end;
procedure TForm1.WMMouceLeave(var Message: TMessage);
begin
Label1.Caption:='Mouse! Come back'
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var Et: tagTRACKMOUSEEVENT;
begin
Et.cbSize:=sizeof(Et);
Et.dwFlags:=TME_LEAVE;
Et.hwndTrack:=Handle;
Et.dwHoverTime:=1000;
TrackMouseEvent(Et);
Label1.Caption:='Mouse is here'
end;
чтобы принимать сообщения WM_NCMOUSELEAVE нужно казать флаг TME_NONCLIENT у Et.
))) Спасиб))) Не совсем конечно понял, что к чему, времени пока нету, потом разберусь!