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

时间: 2024-12-20 21:27:28

Delphi实现菜单项上出现提示的相关文章

建立CMenu菜单项,实现选中菜单项点击左键响应事件

这里我只是根据自己的项目做了一些总结,实现点击右键弹出菜单项,点左键选择菜单项: CMenu menu; VERIFY(menu.CreatePopupMenu());//新建一个cmenu菜单项 menu.AppendMenuW(MF_STRING, 10001, _T("重定义")); menu.AppendMenuW(0, MF_SEPARATOR);//增加一条直线 menu.AppendMenuW(MF_STRING, 10002, _T("修改"));

Delphi XE2 生成的.exe 在未安装有Delphi的电脑上运行提示 “丢失 rtl160.bpl”

解决方案: XE2中加入了多平台的概念,默认的Release模式,也是带包编译,带运行时库的,所以,需要手工设置一下工程选项: 打开工程以后,Project-->Options-->左侧树列表选中C++ Linker-->右侧上方的Target选择Release configuration 下的 32-bit Windows platform-->取消 Link with Dynamic RTL 的对钩-->左侧树列表选中 Packages 下的 Runtime Packag

qt之菜单项定制

qt实现菜单,简单的界面QMenu+QAction完全可以实现,在加上qss的支持,可以定制出比较美观的菜单,qt的菜单一般用在托盘.按钮和工具栏上. 当然啦,也有很多软件有比较美观的托盘菜单,比如360.电脑管家等软件,效果图如图1所示,其实qt在4.2之后也提供了定制菜单的功能,使用QWidgetAction可以定制出自己想要的菜单来,接下来是我定制菜单栏的步骤. 图1 360图盘菜单 实现效果如下图2所示,菜单是由单个条目组成的,每一个条目又由左右两部分组成,左边是一个图标,并伴有底色,右

每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoint 自定义列表项添加callout菜单.希望能够给大家带来一些帮助. 1.  在aspx页引用可视化Web部件 有时候会需要在页面中引用项目中创建的可视化Web部件,具体步骤有以下这几步: 1) 在aspx页面顶部注册该可视化Web部件 示例如下: <%@ Register Tagprefix=&qu

TortoiseSVN菜单项功能说明

TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,使用起来比较方便. TortoiseSVN每个菜单项都表示什么意思 01.SVN Checkout(SVN取出)点击SVN Checkout,弹出检出提示框,在URL of repository输入框中输入服务器仓库地址,在Checko

每天的学习经验:SharePoint 2013 定义自己添加的产品清单。Callout菜单项、文档关注、SharePoint服务机端对象模型查询

前言: 前一段时间一直都比較忙.没有什么时间进行总结,刚好节前项目上线.同一时候趁着放假能够好好的对之前遇到的一些问题进行总结. 主要内容有使用SharePoint服务端对象模型进行查询.为SharePoint 自己定义列表项加入callout菜单.希望能够给大家带来一些帮助. 1.  在aspx页引用可视化Web部件 有时候会须要在页面中引用项目中创建的可视化Web部件,详细步骤有下面这几步: 1) 在aspx页面顶部注冊该可视化Web部件 示比例如以下: <%@ Register Tagpr

JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include进来.这样,当要对导航栏进行修改时,只需要修改一个文件,而不用修改所有相关的页面文件.不过,我这里没有这样做,没有抽取出来. 二.实现当前页面的标识+不同页面的head头部背景图片的改变 现在在(一)实现的基础之上,来实现导航栏当前所选页面的菜单项高亮显示,让访问者一路了然知道"我正在这里"

SharePoint 2013:自定义ECB菜单项的添加

本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xml中,定义一个CustomAction,重点关注一下其中高亮部分的属性(本例在文档内容类型的项上添加了一个菜单项,点击导航到一个自定义应用程序页面,并传递项所在的列表的Id作为参数): 添加到Feature,并部署.效果如下: 服务器对象模型创建 这里会用到Feature的事件处理程序.本例同时还演

Form_通过Custom.pll新增菜单项(案例)

2014-05-31 BaoXinjian In Capgemini 一.摘要 custom.pll 一个每次form启动时都会调用的pll包,因此有些对标准form的客制化可以在custom.pll中实现 个人感觉和form个性化有类似性,区别是form个性化通过设定去设定,而custom.pll通过代码中实现 而且对custom.pll的修改会影响所有的form调用,所以对代码的可控性和效率要求比较高 而Form的个性化,影响的定义有function level 和 form level,所