O exemplo neste artigo descreve como o Delphi percebe a capacidade do formulário de detectar o mouse e ocultar e exibir automaticamente a janela. Compartilhe com todos para sua referência. O método de implementação específico é o seguinte:
const WM_MouseEnter = $B013; WM_MouseLeave = $B014;type TfrmMain = class(TForm) . Procedimento R *.dfm} TfrmMain.WMMouseEnter(var Msg: TMessage);begin if(Top<0) then begin Top := 0 //Para garantir que o formulário suspenso seja apresentado na frente SetWindowPos(Handle,HWND_TOPMOST,0,0,0; ,0, SWP_NOMOVE ou SWP_NOSIZE); //Empurre o formulário para o front SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE); //Em seguida, cancele o formulário para o front end; no temporizador Verifique regularmente se o mouse ainda está dentro do escopo do formulário, //Isso pode evitar a perda do procedimento do evento MOUSELEAVE devido ao movimento rápido do mouse TfrmMain.Timer1Timer(Sender: TObject);var rc:TRECT; pt:TPOINT;begin GetWindowRect(self.Handle,rc); //Obtém a área retangular do formato GetCursorPos(pt); position if( not PtInRect(rc,pt)) then //Se o mouse não estiver dentro do escopo do formulário start if(Top = 0) then //Se o formulário estiver atualmente anexado à borda superior da tela, mova o formulário oculto para cima start Top := 0-Height+2; está oculto SetWindowPos(Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE ou SWP_NOSIZE); //Enviar o formulário para o frontend;end;
Espero que este artigo seja útil para a programação Delphi de todos.