大家好,怎么在TApplication中改变Hint字体的颜色? 最好举个例子,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 改造HINT的输出方式 Delphi为每个可视构件(而非快速按钮专属)都提供了Hint 及ShowHint特性,其中Hint属性指定文本提示盒中的文本, 而ShowHint属性则决定鼠标指向构件时是否显示文本提示盒, 当ShowHint值为True时,显示文本提示盒。用户可在对象监 视器(ObjectInspector)的属性栏中设置或在程序中修改Hint 及ShowHint属性。 除此之外,Delphi还在类TApplication中提供了 HintColor、HintPause、HintHidePause、HintShortPause几 个属性来控制文本提示盒的输出方式。 一般来说,HintColor、HintPause、HintHidePause、 HintShortPause通常在Form的OnCreate事件中设定它们的值 (如有需要的话),如以下的一段程序。 ProcedureTMainForm.FormCreate(Sender:TObject); begin Application.HintPause:0;{使文本提示盒立即出现} Application.HintPause:clBlue;{以蓝色小方框的 方式出现} Application.HintHidePause:10000;{延长停留时间 为10秒} Application.HintShortPause:100; end; 另外,在编程中,我们还可以通过TApplication的OnHint 事件获取鼠标指向构件的Hint文本。 事实上,Delphi提供的文本提示盒输出方框、文本字型都 太小,既不美观亦不易看清。值得庆幸的是,Delphi2.0版提 供了全部构件的源代码,我们可以通过对类TApplication的 源码作一些小修改,增加一个HintFont的属性,即可象修改 HintColor一样来修改文本提示盒的字体、字型大小等。 TApplication是在Forms单元里定义的,因此让我们打开 Forms.pas单元文件来作以下一些修改: ProcedureSetHintColor(Value:TColor}; ProcedureSetHintFont(Value:TFont); {1997.04.19Mynewidea} PropertyHintColor: TColorreadFHintColorWriteSetHintColor; PropertyHintFont:TFontwriteSetHintFont; {1997.04.19Mynewidea} ProcedureTApplication.SetHintColor(Value:Color); 上增加一个过程 {1997.04.19Mynewidea} ProcedureTApplication.SetHintFont(Value:TFont); beginif(Value nil)and(FHinWindow nil)then FHintWindow.Canvas.Font:Value; end;{1997.04.19Mynewidea} 别忘了在新增的语句旁作一些必要的注释,如上面的 {1997.04.19Mynewidea},可以很清楚地知道哪些语句是你 自己加进去的。 将修改后的Forms.pas存盘,然后重建库文件,以后在 你的库文件里,类TApplication就多了一个属性HintFont, 你就可以很轻易的通过HintFont属性来修改文本提示盒的字 体、字型大小了,如以下一段程序: ProcedureTMainForm.FormCreate(Sender:TObject); Var NewHintFont:TFont.Create; begin NewHintFont:TFont.Create; NewHintFont.Name:′楷体-GB2312′;{设置字体为 楷体} NewHintFont.Size:12;{设置字型大小为12} Application.HintFont:NewHintFont; end; 此外,Delphi绘制文本提示盒是在类THintWindow的方法 ActivateHint中通过WindowsAPI资源函数SetWindowPos来实 现的,这段代码在Controls.pas单元文件里,有兴趣的读者 可以进一步修改这段代码以绘制其他任意形状(如椭圆、圆等) 而不仅仅是矩型方框的文本提示盒!但或许最好的方法是从类 THintWindow继承下来一个新类,并重载ActivateHint方 法,然后在应用程序开始处给变量HintWindowClass指派一个 新类实例. to lion_lh(xmanx):谢谢!将修改后的Forms.pas存盘,然后重建库文件-------------------------------------怎么来重建库文件,望指点! to wsz1995(你好) :谢谢!能告诉我怎么来创建ThintWindow实例么?我不会啊! //系统提示帮助Application.HintColor := clInfoBk; //clYellow,clLimeif not Application.ShowHint then Application.ShowHint := True; to tongdings(痛定):谢谢你!我是想让HINT提示的字体变颜色,用什么办法呢? application.HintColor:=rgb(255,150,80) ; to lihongyue (虚怀若谷) :不好意思,刚看到,这样吧,我这儿有篇文章其中有介绍这个的,如需要,请告诉E-mail我给你发过去。格式pdf wsz1995(你好) :非常感谢![email protected] dongfang73(东方) :谢谢!wsz1995(你好) :谢谢,正在接收,有没有收获都会给分的。 wsz1995(你好) :谢谢你,我会好好研究的。 嗬嗬,建议不要更改VCL的本身结构和数据。可以通过外部数据来实现,另外,可以自己编写合适hint啊。 to reallike(爱翔) :谢谢指点!更改VCL本身结构和数据是不是会有什么影响?我想请教一下,怎么通过外部数据来实现?我不懂啊,谢谢! wsz1995(你好) 你好,可以给我一份吗? 简单的说: 从ThintWindow继承下一个类, 在子类的属性中设置字体的COLOR,type Tmyhintwindow = class(Thintwindow)....在构建函数中设置Font.color然后在程序里的initialization部分Application.showhint := false;hintwindowsclass := 从ThintWindow继承下的类;application.showhint := true;end; to wl3c(卧龙) :谢谢支持!to wsz1995(你好) :再次表示感谢! to lihongyue(虚怀若谷) to wl3c(卧龙) 你们好邮件已发出请查收, 要改变字体,需重构THintWindow类。具体可参考lion_lh(xmanx)兄的方法。 补充一点,最好不要改变vcl内部结构及其代码。重构THintWindow类 源代码是这样的请大家审查unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TMyHintWindow = class(Thintwindow) protected procedure Paint; override; end;type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TMyHintWindow.Paint;var R: TRect;begin R := ClientRect; Inc(R.Left, 2); Inc(R.Top, 2); Canvas.Font.Color := $0000FF00;//clgreen DrawText(Canvas.Handle, PChar(Caption), -1, R, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly);end;initialization application.ShowHint := false; HintWindowClass := TMyHintWindow; application.ShowHint := true;end. 开发DB2数据库程序,编译完的EXE要装DB2的客户端才能用 谁知道以下是什么数据类型? DBGridEh能否这样显示方式啊!!!!!!!!! RPC 服务不处于监听状态 DLL中如何定义进程间共享的全局变量 这样的问题怎么解决? 小问题,但是很急。劳烦大虾们解决一下。 关联表的语句错误,帮忙看一下啊 别见笑,一个菜问题. 如何使用Tstrings,我在声明后无法使用 以shape控件的圆心为中心旋转shape控件的问题? 请教一个串行通信的问题~!
Delphi为每个可视构件(而非快速按钮专属)都提供了Hint
及ShowHint特性,其中Hint属性指定文本提示盒中的文本,
而ShowHint属性则决定鼠标指向构件时是否显示文本提示盒,
当ShowHint值为True时,显示文本提示盒。用户可在对象监
视器(ObjectInspector)的属性栏中设置或在程序中修改Hint
及ShowHint属性。
除此之外,Delphi还在类TApplication中提供了
HintColor、HintPause、HintHidePause、HintShortPause几
个属性来控制文本提示盒的输出方式。
一般来说,HintColor、HintPause、HintHidePause、
HintShortPause通常在Form的OnCreate事件中设定它们的值
(如有需要的话),如以下的一段程序。
ProcedureTMainForm.FormCreate(Sender:TObject);
begin
Application.HintPause:0;{使文本提示盒立即出现}
Application.HintPause:clBlue;{以蓝色小方框的
方式出现}
Application.HintHidePause:10000;{延长停留时间
为10秒}
Application.HintShortPause:100;
end;
另外,在编程中,我们还可以通过TApplication的OnHint
事件获取鼠标指向构件的Hint文本。
事实上,Delphi提供的文本提示盒输出方框、文本字型都
太小,既不美观亦不易看清。值得庆幸的是,Delphi2.0版提
供了全部构件的源代码,我们可以通过对类TApplication的
源码作一些小修改,增加一个HintFont的属性,即可象修改
HintColor一样来修改文本提示盒的字体、字型大小等。
TApplication是在Forms单元里定义的,因此让我们打开
Forms.pas单元文件来作以下一些修改:
ProcedureSetHintColor(Value:TColor};
ProcedureSetHintFont(Value:TFont);
{1997.04.19Mynewidea}
PropertyHintColor:
TColorreadFHintColorWriteSetHintColor;
PropertyHintFont:TFontwriteSetHintFont;
{1997.04.19Mynewidea}
ProcedureTApplication.SetHintColor(Value:Color);
上增加一个过程
{1997.04.19Mynewidea}
ProcedureTApplication.SetHintFont(Value:TFont);
beginif(Value nil)and(FHinWindow nil)then
FHintWindow.Canvas.Font:Value;
end;{1997.04.19Mynewidea}
别忘了在新增的语句旁作一些必要的注释,如上面的
{1997.04.19Mynewidea},可以很清楚地知道哪些语句是你
自己加进去的。
将修改后的Forms.pas存盘,然后重建库文件,以后在
你的库文件里,类TApplication就多了一个属性HintFont,
你就可以很轻易的通过HintFont属性来修改文本提示盒的字
体、字型大小了,如以下一段程序:
ProcedureTMainForm.FormCreate(Sender:TObject);
Var
NewHintFont:TFont.Create;
begin
NewHintFont:TFont.Create;
NewHintFont.Name:′楷体-GB2312′;{设置字体为
楷体}
NewHintFont.Size:12;{设置字型大小为12}
Application.HintFont:NewHintFont;
end;
此外,Delphi绘制文本提示盒是在类THintWindow的方法
ActivateHint中通过WindowsAPI资源函数SetWindowPos来实
现的,这段代码在Controls.pas单元文件里,有兴趣的读者
可以进一步修改这段代码以绘制其他任意形状(如椭圆、圆等)
而不仅仅是矩型方框的文本提示盒!但或许最好的方法是从类
THintWindow继承下来一个新类,并重载ActivateHint方
法,然后在应用程序开始处给变量HintWindowClass指派一个
新类实例.
-------------------------------------
怎么来重建库文件,望指点!
能告诉我怎么来创建ThintWindow实例么?我不会啊!
Application.HintColor := clInfoBk; //clYellow,clLime
if not Application.ShowHint then
Application.ShowHint := True;
不好意思,刚看到,
这样吧,我这儿有篇文章其中有介绍这个的,
如需要,请告诉E-mail我给你发过去。格式pdf
可以给我一份吗?
type
Tmyhintwindow = class(Thintwindow)
....
在构建函数中设置Font.color
然后在程序里的
initialization部分
Application.showhint := false;
hintwindowsclass := 从ThintWindow继承下的类;
application.showhint := true;
end;
to wl3c(卧龙)
你们好邮件已发出请查收,
具体可参考lion_lh(xmanx)兄的方法。
重构THintWindow类
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyHintWindow = class(Thintwindow)
protected
procedure Paint; override;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyHintWindow.Paint;
var
R: TRect;
begin
R := ClientRect;
Inc(R.Left, 2);
Inc(R.Top, 2);
Canvas.Font.Color := $0000FF00;//clgreen
DrawText(Canvas.Handle, PChar(Caption), -1, R, DT_LEFT or DT_NOPREFIX or
DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly);
end;
initialization
application.ShowHint := false;
HintWindowClass := TMyHintWindow;
application.ShowHint := true;
end.