6
Delphi에서 열거 형 값의 특성을 처리 할 수 없으므로 다른 접근 방식을 시도했습니다. TMyEnum이 제 enum입니다. TMyEnumLabelProvider 클래스는 필 요한 레이블을 제공합니다. enum-type과 속성을 labelprovider에 연결합니다. 그러나 이것은 컴파일되지 않습니다. 그 메소드 중 하나에서 TMyEnum을 사용하기 때문에 classtype을 참조하기 전에 제공자를 완전히 정의 할 수 없습니다.Delphi 속성 생성자에서 특정 클래스 유형 참조 사용
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); override;
end;
올바르게 수행하는 방법에 대한 아이디어. 지금은 GetLabel (MyEnum : integer)을 선언하여 해결 방법을 제시하고 있지만 분명히 엄격한 형식을 선호합니다.
미리 감사드립니다.
두 번째 생각에는 클래스 도우미를 사용하여이 문제를 해결할 수있었습니다. int를 사용하는 것보다 우아하지는 않지만 더 좋음 : 'TMyEnumLabelProvider = 클래스 (TEnumLabelProvider) public 프로 시저 반복 (컨텍스트 : TObject; 콜백 : TEnumLabelProviderCallback); 보수; 끝; [TEnumLabelProvider (TMyEnumLabelProvider)] TMyEnum = (MyEnum0, MyEnum1, MyEnum2); TMyEnumLabelProviderHelper = TMyEnumLabelProvider의 클래스 도우미 public 클래스 함수 GetLabel (MyEnum : TMyEnum) : string; end;' –
실례지만, 성취하고자하는 것을 찾을 수는 없습니다. 예를 들어 "열거 형 레이블"은 무엇을 의미합니까? –
@UweRaabe 그는 UI에 표시되는 열거 형 요소에 연결된 문자열을 의미한다고 생각합니다. 예를 들어 바인딩 프레임 워크를 생각해보십시오. – jpfollenius