자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)

Q. 

안녕하세요. 리오 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 을 메모장에 프린트 하는 거에요 

델파이 고수분 좀 도와주세요 ㅠㅠ 

http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_qna&no=15999

 

A. 

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; 

번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2021.6~2021.12 관리자 2015.01.22 15766
공지 유용한 관련 사이트 관리자2 2014.03.20 54580
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97985
3099 Delphi 10.4.1 iOS 카메라 앨범 다중 선택 방법 [1] 로로봉 2020.10.28 186
3098 xe4 2D 바코드 사용하려면? [1] 왕팝콘 2020.11.17 153
3097 마우스 오버 문제...........? [2] 헨씀히포 2020.11.06 256
3096 안녕하세요. Undo에 관한 질문입니다. [1] 벌꿀이 2020.11.12 165
3095 서비스 프로그램 디버깅 맛재현 2020.11.12 116
3094 오라클-FireDAC 배포시 cannot initialize oci environment 오류 발생 문의 드립니다. [3] agallee 2020.10.28 345
3093 델파이 10.3.2 에서 메인메뉴 컴포넌트에서 드래그앤드롭을 쓰고 싶은데 방법을 모르곘습니다ㅠ file ggg 2020.11.05 329
3092 Tcart 관련입니다. [1] file 오늘도좋은하루 2020.10.24 220
3091 C++ Builder XE4에서 C++11 또는 C++14를 사용할 수 있는 방법은? palindrome 2020.10.26 160
3090 XE5 에서 REST API JSON 요청시 전송되는 값이 일부 ASCII 로 변환됩니다. osy 2020.10.23 193
3089 반투명 판넬 구현하기...? [2] 헨씀히포 2020.10.23 1196
3088 Delphi 10.4.1 iOS TDateEdit 문의 file 로로봉 2020.10.23 161
3087 xe5 에서 rest api 요청시 ansi 문자로 전송하는 방법을 문의드립니다. osy 2020.10.22 166
3086 델파이 XE8에서 사용할수 잇는 이미지 컴포넌트를 구입하고 싶습니다 헨씀히포 2020.10.21 134
3085 10.4.1 TSpeedButton 폰트사이즈 가 조절 되지 않습니다. [1] 포비 2020.10.19 254
3084 RS232 통신 구현방법을 문의 드립니다. [1] delphi1 2020.10.14 373
3083 FireDac 에서 informix 연결이 안됩니다.. 도와주세요 [2] file 천공인 2020.09.18 299
3082 FMX개발시 레이아웃 구성관련 문의 [2] Firemonkey 2020.09.24 379
3081 FMX 안드로이드 개발시 폰트리스트 가져오는 방법? Firemonkey 2020.10.13 152
3080 FastReport에서 코드작성은 어떻게 해야되나요? 코드탭이 아예 선택이 안되네요.. [2] file 왕초보 2020.10.13 254