아래와 같이 버튼 클릭 시 10개 카테고리(TButtonCategory)에 5개의 버튼(TButtonItem)을 추가하고, 버튼 클릭시 버튼의 캡션을 얻어오는 예제입니다.

CategoryButtons.png

주의 할 점은 TButtonItem Click 시 발생하는 이벤트의 Sender가 TButtonItem이 아닌 모체인 TCategoryButtons가 넘어옵니다.

클릭한 TButtonItem은 TCategoryButtons.SelectedItem을 통해 접근할 수 있습니다.

 

참고로 TButtonItem은 Caption, Hint, Data(Pointer) 속성을 제공하므로 원하는 데이터를 알맞은 속성에 넣고 

클릭시 필요한 데이터를 꺼내서 구현할 수 있습니다.

 

(정정: 3/23)

TCategoryButtons.OnButtonClicked 이벤트를 이용하면 각 TButtonItem에 이벤트를 걸지 않아도 됩니다.

 

자세한 내용은 아래 코드를 참고하세요.

(첨부파일에서 다운로드 받을 수 있습니다.)

 

[코드]

type
  TForm1 = class(TForm)
    catMenuItems: TCategoryButtons;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);

    // 정정: TCategoryButtons.OnButtonClicked
    procedure catMenuItemsButtonClicked(Sender: TObject;
  private
    { Private declarations }
    procedure ButtonItemClick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: Integer;
  Cate: TButtonCategory;
  Item: TButtonItem;
begin
  catMenuItems.Categories.Clear;
  for i := 0 to 10 do
  begin
    Cate := catMenuItems.Categories.Add;
    Cate.Caption := 'Category ' + I.toString;
  end;


  //Menu Item
  for i := 0 to 10 do
  begin
    for j := 0 to 5 do
    begin
      Item := catMenuItems.Categories[i].Items.Add;
      Item.Caption := Format('Menu %d %d', [i,j]);
      Item.Hint := Format('Menu %d %d', [i,j]);
      Item.OnClick := ButtonItemClick;
    end;
  end;
end;

 

procedure TForm1.ButtonItemClick(Sender: TObject);
begin
  Memo1.Lines.Add(Sender.ClassName);
  Memo1.Lines.Add(catMenuItems.SelectedItem.ClassName);

  Memo1.Lines.Add(catMenuItems.SelectedItem.Caption);
end;

 

// 정정: TCategoryButtons.OnButtonClicked
procedure TForm1.catMenuItemsButtonClicked(Sender: TObject;
  const Button: TButtonItem);
begin
  Memo1.Lines.Add(Button.Caption);
end;

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14478
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13117
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15624
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21139
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22402
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18028
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38314
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173822
1063 [개발팁 시리즈] 델파이/C++빌더 VCL 애플리케이션을 개발한다면? 꼭 확인하세요! 관리자 2019.11.20 462
1062 주요 OS 시장 점유율 - 윈도우와 안드로이드! file 관리자 2019.11.19 559
1061 윈도우 버전 점유율 변화: 2009년부터 2019년 현재까지! file 관리자 2019.11.18 362
1060 [델파이 샘플 코드] 안드로이드, iOS, OSX, 윈도우, 리눅스, HTML5 관리자 2019.11.13 670
1059 FCM 전송 구헌혀기 - 앱 서버 프로토콜 사용 메시지 전송 험프리 2019.11.08 1106
1058 [고객사례-게임, 델파이] Rise of Legions 관리자 2019.11.08 786
1057 [데모 영상] 델파이 프로젝트에 구글 시트 연동하기 (엔터프라이즈 커넥터 활용) 관리자 2019.11.08 549
1056 델파이 코드 컨버전 빠르게 완료하기 관리자 2019.11.06 595
1055 엔터프라이즈 커넥터 무료 제공 (업데이트 서브스크립션 계약중인 고객 대상) 관리자 2019.10.31 428
1054 InterBase ToGo 모바일용 라이선스 배포하기 file 데브기어 2019.10.30 479
1053 DLL 폼에서 VCL 폼 스타일 적용하기 file 김원경 2019.10.28 5790
1052 [고객 사례- 의료, 델파이] 의료용 소프트웨어(폐활량&심전도 체크) - Advanced Spirometer and ECG 관리자 2019.10.25 637
1051 [고객사례-소셜네트워크, 델파이] KisKis 관리자 2019.10.25 1089
1050 이 달의 기술자료 - 2019년 11월 file 험프리 2019.10.25 359
1049 IBM 왓슨과 인공지능(AI) 활용하기 - 델파이/C++빌더 관리자 2019.10.25 651
1048 [발표자료] 20191017 실전 사례로 살펴보는 소프트웨어 현대화 전략 file 관리자 2019.10.23 365
1047 윈도우 10 지원과 좋은 UX 구현을 위해 기억해야 할 점 관리자 2019.10.22 613
1046 [개발사례-유통분야] 20년된 프로그램을 현대식 마이크로서비스 아키텍처로 전환 관리자 2019.10.22 1083
1045 [개발팁] TBooleanHelper.ToString 그리고 TUseBoolStrs 관리자 2019.10.21 272
1044 RAD스튜디오의 iOS 13 및 안드로이드 64-bit 대응 관리자 2019.10.21 542