小编Chr*_*Pas的帖子

在Delphi属性构造函数中使用特定的类类型引用

由于Delphi无法处理枚举值的属性,我尝试了另一种方法.TMyEnum是我的枚举.TMyEnumLabelProvider类提供了我需要的标签.我将enum-type与属性链接到labelprovider.但是这不能编译.在引用其classtype之前,我无法完全定义提供程序,因为它在其中一个方法中使用了TMyEnum.

TEnumLabelProviderCallback = procedure(Context: TObject; 
                                       Index: integer; 
                                       const Name: string) of object;

TEnumLabelProvider = class abstract
public
    procedure Iterate(Context: TObject; 
                      Callback: TEnumLabelProviderCallback); virtual; abstract;
end;

TEnumLabelProviderClass = class of TEnumLabelProvider;

TEnumLabelProviderAttribute = class(TCustomAttribute)
private
    FProviderClass: TEnumLabelProviderClass;
public
    constructor Create(ProviderClass: TEnumLabelProviderClass);
    property ProviderClass: TEnumLabelProviderClass read FProviderClass;
end;

TMyEnumLabelProvider = class;

{$SCOPEDENUMS ON}

[TEnumLabelProvider(TMyEnumLabelProvider)]
TMyEnum = (MyEnum0,
           MyEnum1,
           MyEnum2);
{$SCOPEDENUMS OFF}

// This is where the compilation fails.....
TMyEnumLabelProvider = class(TEnumLabelProvider)
public
    class function GetLabel(MyEnum: TMyEnum): string;
    procedure Iterate(Context: TObject; Callback: TEnumLabelProviderCallback); …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

6
推荐指数
1
解决办法
726
查看次数

标签 统计

delphi ×1

delphi-xe2 ×1