자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 15765
공지 유용한 관련 사이트 관리자2 2014.03.20 54580
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97982
1933 델파이 xe seattle 10 사용중 이미지 인쇄 버그 네이트 2020.11.17 81
1932 Delphi 10.4.1 iOS 카메라 앨범 다중 선택 방법 [1] 로로봉 2020.10.28 186
1931 xe4 2D 바코드 사용하려면? [1] 왕팝콘 2020.11.17 153
1930 마우스 오버 문제...........? [2] 헨씀히포 2020.11.06 256
1929 안녕하세요. Undo에 관한 질문입니다. [1] 벌꿀이 2020.11.12 165
1928 서비스 프로그램 디버깅 맛재현 2020.11.12 116
1927 오라클-FireDAC 배포시 cannot initialize oci environment 오류 발생 문의 드립니다. [3] agallee 2020.10.28 345
1926 델파이 10.3.2 에서 메인메뉴 컴포넌트에서 드래그앤드롭을 쓰고 싶은데 방법을 모르곘습니다ㅠ file ggg 2020.11.05 329
1925 XE5 에서 REST API JSON 요청시 전송되는 값이 일부 ASCII 로 변환됩니다. osy 2020.10.23 192
1924 반투명 판넬 구현하기...? [2] 헨씀히포 2020.10.23 1196
1923 Delphi 10.4.1 iOS TDateEdit 문의 file 로로봉 2020.10.23 161
1922 xe5 에서 rest api 요청시 ansi 문자로 전송하는 방법을 문의드립니다. osy 2020.10.22 166
1921 델파이 XE8에서 사용할수 잇는 이미지 컴포넌트를 구입하고 싶습니다 헨씀히포 2020.10.21 134
1920 RS232 통신 구현방법을 문의 드립니다. [1] delphi1 2020.10.14 373
1919 FireDac 에서 informix 연결이 안됩니다.. 도와주세요 [2] file 천공인 2020.09.18 298
1918 FastReport에서 코드작성은 어떻게 해야되나요? 코드탭이 아예 선택이 안되네요.. [2] file 왕초보 2020.10.13 254
1917 Getit Package Manager에서 Fast Report VCL 설치하려는데 에러납니다 도와주세요 [2] file 왕초보 2020.10.12 214
1916 갑자기 발생한 There is a problem with the site's security certoficate 에러 [4] file 노력하는삶 2020.10.12 286
1915 datasnap 서버프로그램에서 특정클라이언트에게만 내용을 전달할수가 있을까요 [1] 라빌레나 2020.10.02 369
1914 10.4 시드니에서 푸시가 (Android, IOS) 가 되는지요? [1] delphiman 2020.10.05 162