0

OnMouseLeaveコンポーネントのイベントを検出する必要がありTDateTimePickerますが、イベント リストにそのようなイベントが含まれていません。手動で検出する方法はありますか?

4

3 に答える 3

2

CMMouseLeave プロシージャの保護を解除できます。

TDateTimePicker = class(ComCtrls.TDateTimePicker)   
   procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;  
 end;

 { TDateTimePicker }

 procedure TDateTimePicker.CMMouseLeave(var Message: TMessage);
 begin 
   {do something}; 
 end;
于 2009-11-20T12:55:04.103 に答える
0

JVCLにはdatetimepickerコントロールがあり、Delphiのバージョンに関係なくOnMouseEnter/OnMouseLeaveイベントが必要です(私の知る限り、すべてのJVCLコントロールにはそれらがあります)。

于 2009-11-20T11:27:09.793 に答える
-2

TDateTime はビジュアル コンポーネントではないため、マウスを離すイベントはありません。実際のコンポーネントを確認できますか (日時ピッカーですか?) onExit イベントは、マウスがビジュアル コントロールを離れるのを処理する必要があります。

また、使用している Delphi のバージョンを知っておくと役立ちます。

ありがとう...

申し訳ありませんが、昨日はさらにサポートを提供できたのですが、私が使用していたコンピューターには Delphi がインストールされていませんでした。エクスポートしない特定のコントロールの Mouse Leave イベントを取得するには、次の手順を試してください。(このコードは、日時ピッカー コントロールを保持するフォームにあります)

procedure TForm1.FormCreate(Sender: TObject);
begin
    application.OnMessage := AppMsg;
    // Save the windows hande of the date time picker...
    DTWind := DateTimePicker1.handle;
end;

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  // If we find a mouse leave event, for the date/time picker,
  // then do something
  if (msg.message = 160) and
     (msg.hwnd = DTWind)
  then
  begin
     if dateTimePicker1.color = clBlue
     then dateTimePicker1.Color := clRed
     else  dateTimePicker1.Color := clBlue;
  end;
end;

アプリケーション メッセージ (AppMsg) を取得するプロシージャを作成し、アプリケーション オブジェクトの OnMessage イベントに割り当てます。dateTimePicker コントロールの Windows ハンドルを保存します。

プロシージャ内で、DateTimePicker コントロールからのマウス リーブ メッセージを探し、必要な処理を行います (私の例では、色で遊んでいます)。

これが回避策になることを願っています。

于 2009-11-20T11:16:57.240 に答える