如何获取和使用匿名控件的 FONT 属性?
How to get and work with the FONT property of an ANONYMOUS CONTROL?
在 Delphi 10.4 中,在 VCL 应用程序中,使用 TApplicationEvents
组件的 OnMessage
事件处理程序,我增加了右击控件的字体大小:
procedure TformMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
ThisControl: TControl;
begin
if (Msg.Message = WM_RBUTTONDOWN) then
begin
ThisControl := FindDragTarget(Mouse.CursorPos, True);
CodeSite.Send('TformMain.ApplicationEvents1Message: RIGHTCLICK!', ThisControl.Name);
if ThisControl is TLabel then
TLabel(ThisControl).Font.Size := TLabel(ThisControl).Font.Size + 1
else if ThisControl is TCheckBox then
TCheckBox(ThisControl).Font.Size := TCheckBox(ThisControl).Font.Size + 1;
// ETC. ETC. ETC.! :-(
end;
end;
对于所有控件类型来说,这是一种非常低效的方法,因为我必须枚举所有现有的控件类型,因为 TControl
没有 TFont
属性 .
更好的方法是获取控件的 TFont
属性,而不必先询问 TYPE 然后再键入控件。
但是怎么做呢?
如果您重新声明类型,您可以访问 class 的受保护属性。
现在你用一个插入器 class 来做到这一点,但我仍然习惯了旧的方式。
当您对字体进行某些操作时,如果发现某个特定的控制炸弹,您可能需要添加一个检查。到目前为止,它一直对我有用。
type
TCrackControl = class(TControl);
procedure TformMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
ThisControl: TCrackControl;
begin
if (Msg.Message = WM_RBUTTONDOWN) then
begin
ThisControl := TCrackControl(FindDragTarget(Mouse.CursorPos, True));
CodeSite.Send('TformMain.ApplicationEvents1Message: RIGHTCLICK!', ThisControl.Name);
If assigned(ThisControl.Font) then
ThisControl.Font.Size := ThisControl.Font.Size + 1;
end;
end;
在 Delphi 10.4 中,在 VCL 应用程序中,使用 TApplicationEvents
组件的 OnMessage
事件处理程序,我增加了右击控件的字体大小:
procedure TformMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
ThisControl: TControl;
begin
if (Msg.Message = WM_RBUTTONDOWN) then
begin
ThisControl := FindDragTarget(Mouse.CursorPos, True);
CodeSite.Send('TformMain.ApplicationEvents1Message: RIGHTCLICK!', ThisControl.Name);
if ThisControl is TLabel then
TLabel(ThisControl).Font.Size := TLabel(ThisControl).Font.Size + 1
else if ThisControl is TCheckBox then
TCheckBox(ThisControl).Font.Size := TCheckBox(ThisControl).Font.Size + 1;
// ETC. ETC. ETC.! :-(
end;
end;
对于所有控件类型来说,这是一种非常低效的方法,因为我必须枚举所有现有的控件类型,因为 TControl
没有 TFont
属性 .
更好的方法是获取控件的 TFont
属性,而不必先询问 TYPE 然后再键入控件。
但是怎么做呢?
如果您重新声明类型,您可以访问 class 的受保护属性。 现在你用一个插入器 class 来做到这一点,但我仍然习惯了旧的方式。 当您对字体进行某些操作时,如果发现某个特定的控制炸弹,您可能需要添加一个检查。到目前为止,它一直对我有用。
type
TCrackControl = class(TControl);
procedure TformMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
ThisControl: TCrackControl;
begin
if (Msg.Message = WM_RBUTTONDOWN) then
begin
ThisControl := TCrackControl(FindDragTarget(Mouse.CursorPos, True));
CodeSite.Send('TformMain.ApplicationEvents1Message: RIGHTCLICK!', ThisControl.Name);
If assigned(ThisControl.Font) then
ThisControl.Font.Size := ThisControl.Font.Size + 1;
end;
end;