TMySets 즉, 집합의 열거형 타입(TMyEnum) 정보만 알아오면 되네요?
TypeInfo.TypeData.CompType^; 으로 집합의 열거형 타입 정보를 알아올 수 있습니다.
System.TypInfo.pas 소스코드의 TTypeData 선언부를 보면 아래와 같은 코드가 있습니다.
...
tkSet: (
SetTypeOrSize: UInt8;
CompType: PPTypeInfo;
{SetAttrData: TAttrData;
SetLoByte: UInt8;
SetSize: UInt8});
...
TTypeData는 tkSet(집합)인 경우 CompType을 제공합니다.
여기에 열거형의 타입정보가 담겨져 있습니다.
전체적인 코드는 다음과 같이 작성하면 되겠네요.
procedure TForm1.PrintSetType(TypeInfo: PTypeInfo);
var
I, Min, Max: Integer;
SetName: string;
EnumType: PTypeInfo;
begin
if TypeInfo.Kind = tkSet then
begin
// 기본 값
Min := 0;
Max := 255;
// 집합(set of)의 타입(열거형) 정보
// 열거형의 갯수 파악
EnumType := TypeInfo.TypeData.CompType^;
if EnumType.Kind = tkEnumeration then
begin
Min := EnumType.TypeData.MinValue;
Max := EnumType.TypeData.MaxValue;
end;
for I := Min to Max do
begin
SetName := GetSetElementName(TypeInfo.TypeData.CompType^, I);
Memo1.Lines.Add(SetName);
end;
end;
end;
이글은 데브기어 기술게시판에도 옮기겠습니다.^^
연구 님이 쓰신 글 :
: 안녕하세요. 리오 10.3 사용중 해결 못하고 있는 부분이 있어서 부탁 드려요. ㅠㅠ
:
: 열거형 타입
: TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);
:
: set 타입
: TBorderIcons = set of TBorderIcon;
:
:
: set 타입인 TBorderIcons 을 파라미터로 주었을 때
: biSystemMenu, biMinimize, biMaximize, biHelp 을 프린트 하려고하는데요
:
: 열거형은 처리했는데 set 타입은 어떻게 프린트해야 할지 아무리 구글링해봐도
: 해결방법이 보이지 않습니다. ㅠㅠ
:
: procedure PrintSetType(TypeInfo: PTypeInfo);
: begin
: // 이걸 못 만들겠어요 ㅠㅠ
: end;
:
:
: 그러니까
:
: TMyEnum = (etOne, etTwo, etThree, etFour, etFive);
: TMySets = set of TMyEnum;
:
: 이 있을 때
:
: procedure Form1.Button1Click(Sender: TObject);
: begin
: PrintSetType(System.TypeInfo(TMySets));
: end;
:
: set 타입인 TMySets 를 파라미터로 주면
: etOne, etTwo, etThree, etFour, etFive 을 메모장에 프린트 하는 거에요
:
: 델파이 고수분 좀 도와주세요 ㅠㅠ
:
|