Delphi中使用Hint体验windows的温柔
来源:互联网 发布:部落冲突法师升级数据 编辑:程序博客网 时间:2024/04/29 20:56
因此就有了当需要验证用户输入的数据时候正确的时候,如果输入的内容不合法,那么就显示一个错误的对话框。本来觉得没有什么,但是我们的测试人员给了我一个建议说:这么做太恐怖了,让用户感觉好像发生了什么不可避免的严重问题,他说能不能温柔一些呢?比如使用一个警告的对话框。但是我不同意使用一个警告的对话框,因为我认为那是可忽略的内容才会显示一个警告,通常是不会显示一个警告的。我们尝试了在Windows建立一个非法的文件夹,体会一下Windows的温柔。Windows确实是很温柔,只用一个Hint就解决了这个问题。
在Delphi中每个组件几乎都具有Hint属性,但是他们只是在鼠标移动到该组件的时候才显示Hint内容。幸运的是,Delphi为我们提供了一个THintWindow组件,这样就不需要我们手工封装一个组件了。为了实现我们温柔的目标,我们封装一个来实现他。
代码如下:
- THintControl = class(TComponent)
- private
- FHint: string;
- HintWindow: THintWindow;
- HintTimer: TTimer;
- FComponent: TControl;
- protected
- procedure HideHint(Sender:TObject); virtual;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- property Hint: string read FHint write FHint;
- property Component: TControl read FComponent write FComponent;
- procedure ShowHint(AHint: string); overload;
- procedure ShowHint(AHint: string; AComponent: TControl); overload;
- end;
- implementation
- { THintControl }
- procedure THintControl.ShowHint(AHint: string);
- begin
- ShowHint(AHint, FComponent);
- end;
- constructor THintControl.Create(AOwner: TComponent);
- begin
- inherited;
- HintWindow := HintWindowClass.Create(nil);
- HintWindow.Color := Application.HintColor;
- HintTimer:=TTimer.Create(nil);
- HintTimer.OnTimer:=HideHint;
- HintTimer.Interval:=Application.HintHidePause;
- end;
- destructor THintControl.Destroy;
- begin
- // sleep(HintTimer.Interval);
- HintTimer.Free;
- HintWindow.Free;
- inherited;
- end;
- procedure THintControl.HideHint(Sender: TObject);
- begin
- TTimer(Sender).Enabled:=false;
- ShowWindow(HintWindow.Handle,SW_HIDE);
- end;
- procedure THintControl.ShowHint(AHint: string; AComponent: TControl);
- var
- vPoint:TPoint;
- vRect:TRect;
- begin
- if AHint<>'' then
- begin
- if not Windows.IsWindowVisible(HintWindow.Handle) or (HintWindow.Caption<>AHint) then
- begin
- vRect:=HintWindow.CalcHintRect(Screen.Width,AHint,nil);
- vPoint.X := AComponent.Left;
- vPoint.Y := AComponent.Top + AComponent.Height ;
- vPoint := AComponent.Parent.ClientToScreen(vPoint);
- Inc(vRect.Left,vPoint.X);
- Inc(vRect.Right,vPoint.X);
- Inc(vRect.Top,vPoint.Y);
- Inc(vRect.Bottom,vPoint.Y);
- HintWindow.ActivateHint(vRect,AHint);
- HintTimer.Enabled:=true;
- end;
- end
- else
- ShowWindow(HintWindow.Handle,SW_HIDE);
- end;
- //调用示例:
- procedure TForm1.Button2Click(Sender: TObject);
- var
- vHint: THintControl;
- begin
- vHint := THintControl.Create(self);
- try
- vHint.Component := edit1;
- vHint.ShowHint('合法的年龄范围为:18~120');
- finally
- end;
- end;
- Delphi中使用Hint体验windows的温柔
- Oracle 中HINT的使用
- Oracle中hint的使用
- Delphi的Hint(2)
- Delphi的Hint入门
- DELPHI hint 的应用
- Delphi的Hint(1)
- Delphi的Hint入门指导
- Delphi的Hint入门指导
- Delphi的Hint入门指导
- Delphi中IntraWeb的学习初体验
- 简单的Hint使用
- Delphi 使用帮助提示(Hint)制作简单即时的系统帮助
- oracle中hint的使用-SQL语句优化
- 印象中最温柔的MM
- MySql中常用的hint
- MySql中常用的hint
- ORACLE使用HINT的方法
- PPTFile操作
- 通过搜索发现
- Asp.net页面出现“Internet Explorer无法打开站点,已终止操作”的解决
- Javascript的布尔型
- SQL join 语法
- Delphi中使用Hint体验windows的温柔
- 通过event对象的fromElement属性解决热区设置主实体的一个bug
- 分页查询
- import声明多于一行的时候jsp编译报错的解决方法
- Jar转exe文件
- 解决Jsonwriter发生的Positioned Update not supported问题
- 自定义webwork的Intercepter和Result实现简单工作流
- 标签的重用感想
- 关于JavaScript继承的Base类--Dean Edwards