OnMouseLeave
コンポーネントのイベントを検出する必要がありTDateTimePicker
ますが、イベント リストにそのようなイベントが含まれていません。手動で検出する方法はありますか?
3 に答える
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;
JVCLにはdatetimepickerコントロールがあり、Delphiのバージョンに関係なくOnMouseEnter/OnMouseLeaveイベントが必要です(私の知る限り、すべてのJVCLコントロールにはそれらがあります)。
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 コントロールからのマウス リーブ メッセージを探し、必要な処理を行います (私の例では、色で遊んでいます)。
これが回避策になることを願っています。