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
  • 相关阅读:
    C#中使用My实现单例应用程序
    喝着啤酒学Python(2):第一个HelloWorld
    再读《精通css》04:盒模型和空白边叠加
    再读《精通css》07:圆角
    再读《精通css》08:阴影
    @ResponseBody 乱码
    再读《精通css》05:定位、浮动与清理
    关于javascript面向对象的一点思考
    再读《精通css》06:背景图片
    【求解释】关于第三方接口调用中安全的疑问
  • 原文地址:https://www.cnblogs.com/key-ok/p/3359672.html
Copyright © 2011-2022 走看看