Пример в этой статье описывает, как Delphi реализует способность формы распознавать наведение курсора мыши и автоматически скрывать и отображать окно. Поделитесь этим со всеми для справки. Конкретный метод реализации заключается в следующем:
const WM_MouseEnter = $B013; WM_MouseLeave = $B014;type TfrmMain = class(TForm) . Timer1: TTimer; процедура Timer1Timer(Sender: TObject); защищенная процедура WMMouseEnter(var Msg: TMessage); сообщение WM_MouseEnter; R *.dfm}процедура TfrmMain.WMMouseEnter(var Msg: TMessage);begin if(Top<0) then Begin Top := 0; //Чтобы гарантировать, что раскрывающаяся форма отображается спереди SetWindowPos(Handle,HWND_TOPMOST,0,0,0 ,0, SWP_NOMOVE или SWP_NOSIZE); //Переносим форму на передний план SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE или SWP_NOSIZE); //Затем отменяем форму на передний план; Timer1.Enabled := True;end;//Depend on timer Регулярно проверяйте, находится ли мышь в пределах формы. //Это позволит избежать потери процедуры события MOUSELEAVE из-за быстрого перемещения мыши. TfrmMain.Timer1Timer(Sender: TObject);var rc:TRECT; pt:TPOINT;begin GetWindowRect(self.Handle,rc); //Получаем прямоугольную область вида GetCursorPos(pt); позиция if( not PtInRect(rc,pt)) then //Если мышь находится за пределами формы, start if(Top = 0) then //Если форма в данный момент прикреплена к верхнему краю экрана, переместите скрытую форму вверх. start Top := 0-Height+2 end; Timer1.Enabled := False; //Таймер отключается после формы; скрыт SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE или SWP_NOSIZE //Переносим форму во внешний интерфейс;end;
Я надеюсь, что эта статья будет полезна каждому программисту на Delphi.