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
[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
相关文章推荐
- Delphi实现菜单项上出现提示
- Delphi实现菜单项上出现提示
- 在delphi中实现密码框“大写锁定打开”的提示
- 技术散分:Delphi中用API实现在MSN的信息提示
- jquery实现鼠标移动出现提示信息
- 解决Delphi 7不出现代码提示的问题
- jquery实现鼠标移动出现提示信息效果代码
- 在Delphi中实现的“汽车每跑6000公里(>=6000)换机油”的提示功能!
- 用Delphi实现快闪窗体信息提示
- jquery实现鼠标移动出现提示信息
- 在delphi中实现密码框“大写锁定打开”的提示
- 基于jQuery实现的当离开页面时出现提示的实现代码
- 当发生异常时,怎样能不让‘delphi的异常提示框出现’而出现自己的‘异常提示框’?
- jquery实现鼠标移动出现提示信息
- js实现鼠标放上按钮出现提示
- 当发生异常时,怎样能不让‘delphi的异常提示框出现’而出现自己的‘异常提示框’?
- Delphi中用API实现在MSN的信息提示
- 基于jQuery实现的当离开页面时出现提示的实现代码
- Delphi安装NT服务程序时,不出现提示信息
- Javascript 实现鼠标移动到html元素出现提示框 转