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..255of 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;

    http://blog.csdn.net/zswang/article/details/1619084

  • 相关阅读:
    中序遍历
    二叉树前序遍历
    A Real Stewart
    走遍美国 听写
    2016-12-12——2016-12-16友邻
    英语百日听力
    6.2分鱼问题两种解法
    Bootstrap组件1
    Bootstrap图标及另一个好用图标网站介绍
    Bootstrap全局CSS样式之图片
  • 原文地址:https://www.cnblogs.com/findumars/p/6347928.html
Copyright © 2011-2022 走看看