L'exemple de cet article décrit comment Delphi réalise la capacité du formulaire à détecter le survol de la souris et à masquer et afficher automatiquement la fenêtre. Partagez-le avec tout le monde pour votre référence. La méthode spécifique de mise en œuvre est la suivante :
const WM_MouseEnter = $B013; WM_MouseLeave = $B014;type TfrmMain = class(TForm) . R *.dfm}procédure TfrmMain.WMMouseEnter(var Msg: TMessage);begin if(Top<0) then start Top := 0; //Pour garantir que le formulaire déroulant est présenté au premier plan SetWindowPos(Handle,HWND_TOPMOST,0,0,0 ,0, SWP_NOMOVE ou SWP_NOSIZE); //Pousse le formulaire au premier plan SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE); //Puis annule le formulaire au front-end ; on timer Vérifier régulièrement si la souris est toujours dans la portée du formulaire, // Cela peut éviter de perdre la procédure événementielle MOUSELEAVE à cause d'un mouvement rapide de la souris TfrmMain.Timer1Timer(Sender: TObject);var rc:TRECT; pt:TPOINT;begin GetWindowRect(self.Handle,rc); //Obtenir la zone rectangulaire du formulaire GetCursorPos(pt); position if( not PtInRect(rc,pt)) then //Si la souris n'est pas dans la portée du formulaire, commencez if(Top = 0) then //Si le formulaire est actuellement attaché au bord supérieur de l'écran, déplacez le formulaire masqué vers le haut.begin Top := 0-Height+2; Timer1.Enabled := False; est masqué SetWindowPos(Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE ou SWP_NOSIZE); //Pousse le formulaire vers le frontend;end;
J'espère que cet article sera utile à la programmation Delphi de chacun.