【发布时间】:2020-02-16 16:41:52
【问题描述】:
我在一个主题感知组件上工作,当我创建它时,我必须使用IsThemeActive(来自 UxTheme 单元)设置初始状态。但是如果我在组件constructor 中使用此功能,我会遇到访问冲突。在其他任何地方使用它都可以正常工作。发生了什么,如果我不能在 OnCreate 中设置初始状态,我该如何设置?
我的组件单元:
unit TestUnit;
interface
uses Classes, Windows, Controls, ComCtrls, StdCtrls, CommCtrl, Messages, Forms,
SysUtils, Graphics, UxTheme;
type
TSuperList = class(TListView)
private
FThemeEnabled: Boolean;
public
constructor Create(AOwner: TComponent); override;
end;
implementation
constructor TSuperList.Create(AOwner: TComponent);
begin
inherited;
FThemeEnabled:= IsThemeActive;
end;
end.
在应用程序中使用它:
procedure TForm1.FormCreate(Sender: TObject);
begin
List1:= TSuperList.Create(Form1);
List1.Parent:= Form1;
end;
【问题讨论】:
-
好的,所以我们确定它不能在构造函数中调用...现在,我应该在哪里调用它,这样我才能读取初始状态?
-
@TomBrunberg,我用最小的例子更新了这个问题。
-
我也尝试在
initialization部分使用IsThemeActive...它也失败了! -
我不能,因为我的组件没有
OnShow事件。但是我发现出了什么问题!我必须先打电话给InitThemeLibrary... :)
标签: delphi themes delphi-2009