gpt4 book ai didi

delphi - 如何使 TFont 属性在对象检查器中默认显示?

转载 作者:行者123 更新时间:2023-12-03 15:20:06 25 4
gpt4 key购买 nike

概述

在编写组件时,我喜欢为已发布的属性指定一个默认值,通过这样做,对象检查器会以粗体显示任何新更改的属性,这对于使用该组件的任何人来说当然非常有用,因为他们可以轻松识别默认值和修改后的属性值。

示例

以下是包含两个 Color 和两个 Font 属性的组件示例:

我正在类结构中将发布的属性设置为默认:

type
TMyComponent = class(TComponent)
private
FColor: TColor;
FColorTo: TColor;
FFont: TFont;
FFontHot: TFont;
procedure SetColor(const Value: TColor);
procedure SetColorTo(const Value: TColor);
procedure SetFont(const Value: TFont);
procedure SetFontHot(const Value: TFont);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Color: TColor read FColor write SetColor default clGreen;
property ColorTo: TColor read FColorTo write SetColorTo default clBlue;
property Font: TFont read FFont write SetFont; //< set default?
property FontHot: TFont read FFontHot write SetFontHot; //< set default?
end;

和构造函数:

constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

FColor := clGreen;
FColorTo := clBlue;

FFont := TFont.Create;
FFont.Color := clRed;
FFont.Name := 'Segoe UI';
FFont.Size := 10;
FFont.Style := [];

FFontHot:= TFont.Create;
FFontHot.Color := clNavy;
FFontHot.Name := 'Verdana';
FFontHot.Size := 8;
FFontHot.Style := [fsItalic];
end;

destructor TMyComponent.Destroy;
begin
FFont.Free;
FFontHot.Free;

inherited Destroy;
end;

问题

我遇到的问题是如何将已发布的 Font 属性“标记”为默认属性?

当我将组件添加到表单时,对象检查器中的 TFont 属性均为粗体(非默认)。如果我单击每个已发布字体旁边的椭圆,我可以看到我从构造函数中设置的值显示出来 - 但它们仍然是粗体。但奇怪的是,每种字体的大小值从未以粗体显示(即显示不变)。

标准发布的属性可以非常容易地设置为默认,但是如何使用像 TFont 这样具有子属性的类来做到这一点?

我看不到从类结构中设置默认值的方法,只能在构造函数中设置。即使我可以从类结构中定义默认值(这似乎不可能),我怀疑它是否有效,因为字体尚未创建。例如(这显然不起作用):

published
property FontHot: TFont read FFontHot write SetFontHot default FFontHot.Color := clRed; //< set default?

那么,在将新组件添加到对象检查器时,如何使已发布的 TFont 属性显示为默认且不变?

我想这同样适用于类似于 TFont 的其他类作为子属性。

最佳答案

对于对象属性,默认 storage specifier存储。存储后出现 False(从不保存到 DFM)、True(始终保存)或返回任一无参数函数。您需要最后一个:

private
function IsFontStored: Boolean;
published
property Font: TFont read FFont write SetFont stored IsFontStored;

IsFontStored函数中,您可以决定当前设置的字体是否为默认字体。如果是,则返回False

关于delphi - 如何使 TFont 属性在对象检查器中默认显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com