この記事の例では、マウスオーバーを感知してウィンドウを自動的に非表示にしたり表示したりするフォームの機能を Delphi がどのように実現するかを説明します。皆さんの参考に共有してください。具体的な実装方法は以下の通りです。
const WM_MouseEnter = $B013; WM_MouseLeave = $B014;type TfrmMain = class(TForm); プロシージャ Timer1Timer(var Msg: TMessage); 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); //その後、フォームをフロントエンドにキャンセルします := True;end;// on timer マウスがまだフォームの範囲内にあるかどうかを定期的にチェックします。 //これにより、マウスの急速な移動による MOUSELEAVE イベント プロシージャの喪失を回避できます。 TfrmMain.Timer1Timer(Sender: TObject);var rc:TRECT; pt:TPOINT;begin GetWindowRect(self.Handle,rc) //現在のマウスを取得します。 Position if( not PtInRect(rc,pt)) then //マウスがフォームの範囲内にない場合 begin if(Top = 0) then //フォームが現在画面の上端にアタッチされている場合、非表示のフォームを上に移動します begin Top := 0-Height+2 end; //フォームの終了後にタイマーがオフになります。は非表示です SetWindowPos(Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE または SWP_NOSIZE); // フォームをフロントエンドにプッシュします。
この記事が皆さんの Delphi プログラミングに役立つことを願っています。