zoukankan      html  css  js  c++  java
  • Delphi实现菜单项上出现提示

    type
      TMenuHintWindow = class(THintWindow)
      private
        FTimerShow: TTimer;
        FTimerHide: TTimer;
        procedure TimerShowTimer(Sender: TObject);
        procedure TimerHideTimer(Sender: TObject);
        procedure ApplicationHint(Sender: TObject);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;
     
    constructor TMenuHintWindow.Create(AOwner: TComponent);
    begin
      inherited;
      FTimerShow := TTimer.Create(nil);
      FTimerShow.OnTimer := TimerShowTimer;
      FTimerShow.Interval := Application.HintPause;
      FTimerShow.Enabled := False;
     
      FTimerHide := TTimer.Create(nil);
      FTimerHide.OnTimer := TimerHideTimer;
      FTimerHide.Interval := Application.HintHidePause;
      FTimerHide.Enabled := False;
      Application.OnHint := ApplicationHint;
    end;
     
    destructor TMenuHintWindow.Destroy;
    begin
      if Assigned(FTimerShow) then FTimerShow.Free;
      if Assigned(FTimerHide) then FTimerHide.Free;
      inherited;
    end;
     
    procedure TMenuHintWindow.ApplicationHint(Sender: TObject);
    var
      vHandle: THandle;
      vClassName: array[0..255] of Char;
    begin
      TimerHideTimer(FTimerHide);
      if Application.Hint <> '' then
      begin
        vHandle := WindowFromPoint(Mouse.CursorPos);
        GetClassName(vHandle, vClassName, SizeOf(vClassName));
        if not SameText('#32768', vClassName) and
          (HTMENU <> SendMessage(Handle, WM_NCHITTEST, 0,
          MakeLong(Mouse.CursorPos.X, Mouse.CursorPos.Y))) then
          Exit;
        FTimerShow.Enabled := True;
        FTimerHide.Enabled := True;
      end;
    end;
     
    procedure TMenuHintWindow.TimerHideTimer(Sender: TObject);
    begin
      ReleaseHandle;
      FTimerShow.Enabled := False;
      FTimerHide.Enabled := False;
    end;
     
    procedure TMenuHintWindow.TimerShowTimer(Sender: TObject);
    var
      vRect: TRect;
    begin
      if Application.Hint <> '' then
      begin
        vRect := CalcHintRect(MaxInt, Application.Hint, nil);
        OffsetRect(vRect, Mouse.CursorPos.X + 16, Mouse.CursorPos.Y + 16);
        ActivateHint(vRect, Application.Hint);
      end;
      TTimer(Sender).Enabled := False;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      TMenuHintWindow.Create(Self);
    end;
    View Code
  • 相关阅读:
    How to provide highlighting with Spring data elasticsearch
    Android——仿QQ聊天撒花特效
    Android 仿新版QQ的tab下面拖拽标记为已读的效果
    GitHub控件之BadgeView(数字提醒)
    Android之基于百度云推送IM
    Android消息推送完美解决方案全析
    android asmack 注册 登陆 聊天 多人聊天室 文件传输
    android:TextAppearance.Material.Widget.Button.Inverse问题
    Android 高仿微信实时聊天 基于百度云推送
    Gradle DSL method not found: 'android()
  • 原文地址:https://www.cnblogs.com/key-ok/p/3359672.html
Copyright © 2011-2022 走看看