您的位置:首页 > 编程语言 > Delphi

Delphi实现菜单项上出现提示

2017-01-24 22:21 323 查看
type

[align=left] TMenuHintWindow = class(THintWindow)[/align]
[align=left] private[/align]
[align=left] FTimerShow: TTimer;[/align]
[align=left] FTimerHide: TTimer;[/align]
[align=left] procedure TimerShowTimer(Sender: TObject);[/align]
[align=left] procedure TimerHideTimer(Sender: TObject);[/align]
[align=left] procedure ApplicationHint(Sender: TObject);[/align]
[align=left] public[/align]
[align=left] constructor Create(AOwner: TComponent); override;[/align]
[align=left] destructor Destroy; override;[/align]
[align=left] end;[/align]
[align=left] [/align]
[align=left]constructor TMenuHintWindow.Create(AOwner: TComponent);[/align]
[align=left]begin[/align]
[align=left] inherited;[/align]
[align=left] FTimerShow := TTimer.Create(nil);[/align]
[align=left] FTimerShow.OnTimer := TimerShowTimer;[/align]
[align=left] FTimerShow.Interval := Application.HintPause;[/align]
[align=left] FTimerShow.Enabled := False;[/align]
[align=left] [/align]
[align=left] FTimerHide := TTimer.Create(nil);[/align]
[align=left] FTimerHide.OnTimer := TimerHideTimer;[/align]
[align=left] FTimerHide.Interval := Application.HintHidePause;[/align]
[align=left] FTimerHide.Enabled := False;[/align]
[align=left] Application.OnHint := ApplicationHint;[/align]
[align=left]end;[/align]
[align=left] [/align]
[align=left]destructor TMenuHintWindow.Destroy;[/align]
[align=left]begin[/align]
[align=left] if Assigned(FTimerShow) then FTimerShow.Free;[/align]
[align=left] if Assigned(FTimerHide) then FTimerHide.Free;[/align]
[align=left] inherited;[/align]
[align=left]end;[/align]
[align=left] [/align]
[align=left]procedure TMenuHintWindow.ApplicationHint(Sender: TObject);[/align]
[align=left]var[/align]
[align=left] vHandle: THandle;[/align]
[align=left] vClassName: array[0..255] of Char;[/align]
[align=left]begin[/align]
[align=left] TimerHideTimer(FTimerHide);[/align]
[align=left] if Application.Hint <>'' then[/align]
[align=left] begin[/align]
[align=left] vHandle := WindowFromPoint(Mouse.CursorPos);[/align]
[align=left] GetClassName(vHandle, vClassName, SizeOf(vClassName));[/align]
[align=left] if not SameText('#32768', vClassName) and[/align]
[align=left] (HTMENU <> SendMessage(Handle, WM_NCHITTEST,0,[/align]
[align=left] MakeLong(Mouse.CursorPos.X, Mouse.CursorPos.Y))) then[/align]
[align=left] Exit;[/align]
[align=left] FTimerShow.Enabled := True;[/align]
[align=left] FTimerHide.Enabled := True;[/align]
[align=left] end;[/align]
[align=left]end;[/align]
[align=left] [/align]
[align=left]procedure TMenuHintWindow.TimerHideTimer(Sender: TObject);[/align]
[align=left]begin[/align]
[align=left] ReleaseHandle;[/align]
[align=left] FTimerShow.Enabled := False;[/align]
[align=left] FTimerHide.Enabled := False;[/align]
[align=left]end;[/align]
[align=left] [/align]
[align=left]procedure TMenuHintWindow.TimerShowTimer(Sender: TObject);[/align]
[align=left]var[/align]
[align=left] vRect: TRect;[/align]
[align=left]begin[/align]
[align=left] if Application.Hint <>'' then[/align]
[align=left] begin[/align]
[align=left] vRect := CalcHintRect(MaxInt, Application.Hint, nil);[/align]
[align=left] OffsetRect(vRect, Mouse.CursorPos.X +16, Mouse.CursorPos.Y +16);[/align]
[align=left] ActivateHint(vRect, Application.Hint);[/align]
[align=left] end;[/align]
[align=left] TTimer(Sender).Enabled := False;[/align]
[align=left]end;[/align]
[align=left] [/align]
[align=left]procedure TForm1.FormCreate(Sender: TObject);[/align]
[align=left]begin[/align]
[align=left] TMenuHintWindow.Create(Self);[/align]
end; http://blog.csdn.net/zswang/article/details/1619084
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: