delphi – 如何在对象检查器中将TFont属性显示为默认值?
概观
在编写组件时,我喜欢为我发布的属性提供一个默认值,通过这样做,Object Inspector在Bold中显示任何新更改的属性,这当然对使用该组件的任何人都非常有用,因为他们可以轻松识别默认值和修改后的值. 例 以下是包含两个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? 那么,在将新组件添加到Object Inspector时,如何将已发布的TFont属性显示为默认值并保持不变? 我想这同样适用于类似于TFont的其他类作为子属性. 解决方法
对于对象属性,将存储默认值
storage specifier.存储后出现False(从不保存到DFM),True(总是保存),或者返回无参数函数.你需要最后一个:
private function IsFontStored: Boolean; published property Font: TFont read FFont write SetFont stored IsFontStored; 在IsFontStored函数中,您可以决定当前设置的字体是否为默认字体.如果是这样,返回False. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |