在互联网上长时间搜索后,根据我找到的信息,我创建了这段代码来更改控件的提示字体大小。但是当我尝试分配Message.HintInfo.HintWindowClass:=HintWin;
时,它会给我错误:E2010不兼容的类型:'THintWindowClass'和'THintWindow'。如果我尝试对THintWindowClass(HitWin)
进行类型转换,则会导致访问冲突。我该怎么办?
在这个similar question中,Remy Lebeau说:“要更改提示的布局,可以从THintWindow派生一个新类,并将该类类型分配给THintInfo.HintWindowClass字段。”......但是我不明白他的意思。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyButton = class(TButton)
protected
HintWin: THintWindow;
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
MyButton: TMyButton;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
MyButton:=TMyButton.Create(Form1);
MyButton.Parent:=Form1;
MyButton.Caption:='Test';
MyButton.Left:=100;
MyButton.Top:=100;
MyButton.ShowHint:=true;
end;
constructor TMyButton.Create(AOwner: TComponent);
begin
inherited;
HintWin:=THintWindow.Create(self);
HintWin.Canvas.Font.Size:=24;
end;
destructor TMyButton.Destroy;
begin
HintWin.Free;
inherited;
end;
procedure TMyButton.CMHintShow(var Message: TCMHintShow);
begin
inherited;
Message.HintInfo.HintWindowClass:=HintWin;
Message.HintInfo.HintStr:='My custom hint';
end;
end.
答案 0 :(得分:1)
正如评论中提到的其他人一样,您可以使用这样的自定义提示窗口:
Message.HintInfo.HintWindowClass := TMyHintWindow;
使用以下声明,您只能为按钮使用更大的提示字体:
TMyHintWindow = class(THintWindow)
public
constructor Create(AOwner: TComponent); override;
end;
//...
constructor TMyHintWindow.Create(AOwner: TComponent);
begin
inherited;
Canvas.Font.Size := 20;
end;
说明:在THinWindow.Create
中,字体用值Screen.HintFont
初始化-因此,在调用inherited
之后,您可以自定义提示字体。
最后的注释:由于THintWindow.Paint
的当前实现(D 10.2.3 Tokyo),您不能更改提示文本的字体颜色,因为该值取自Screen.HintFont.Color
提示窗口被绘制的时间。在这种情况下,您将必须覆盖Paint
并自己绘制完整的提示窗口。