Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[16000] Re:rtti 관련.. 델파이 고수분 도와주에요 ㅠㅠ
험프리 [hjfactory] 279 읽음    2019-01-08 10:58
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 을 메모장에 프린트 하는 거에요
:
: 델파이 고수분 좀 도와주세요 ㅠㅠ
:

+ -

관련 글 리스트
15999 rtti 관련.. 델파이 고수분 도와주에요 ㅠㅠ 연구 215 2019/01/07
16000     Re:rtti 관련.. 델파이 고수분 도와주에요 ㅠㅠ 험프리 279 2019/01/08
16001         Re:Re: 간단하게 구현하는 방법 빌더(TWx) 423 2019/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.