아래와 같이 버튼 클릭 시 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 15442
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39257
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
1263 [동영상강의] 델파이 기본 교육_13.메모장 만들기2 관리자 2012.07.04 6954
1262 [XE3] VCL 이나 FireMonkey 폼을 Metropolis UI로 컨버팅하는 1분 동영상 관리자 2012.09.12 6917
1261 [델파이 문법] 프로시저와 함수 #9 file 관리자 2012.08.20 6905
1260 [델파이 문법 시리즈] #6. 제네릭 - 제약조건 file 관리자 2012.03.29 6899
1259 XE5 안드로이드 단말기 연결시 확인사항 file c2design 2013.09.23 6879
1258 [델파이 문법] 클래스와 객체 #12 file 관리자 2012.06.04 6871
1257 파이어몽키용 TMS 그리드의 간략한 소개 백서 관리자 2012.09.26 6867
1256 3줄의 코드로 "움직이는 3D 컬러애벌레" 만들기 관리자 2012.07.12 6864
1255 [델파이 문법] 문법 요소 #4 file 관리자 2012.10.19 6849
1254 [동영상강의] 델파이 기본 교육_15.델파이와 DB연결과 dbExpress 관리자 2012.07.12 6831
1253 [델파이 문법] 클래스와 객체 #9 file 관리자 2012.05.16 6807
1252 [동영상 강의] 델파이 기본 교육_21.트랜잭션처리 관리자 2012.08.10 6790
1251 [델파이 문법 시리즈] #4. 제네릭 - 타입(기반,클래스,인터페이스,레코드,프로시저) file 관리자 2012.03.27 6748
1250 [델파이 문법 시리즈] #5. 제네릭 - 메소드(파라미터,오버로드,타입 호환성) file 관리자 2012.03.28 6739
1249 [델파이 문법] 데이터 타입, 변수 및 상수 #3 file 관리자 2013.02.13 6736
1248 [델파이 문법] 클래스와 객체 #21 file 관리자 2012.07.13 6729
1247 RichEdit 에서 라인과 칼럼을 알아내기 박병일 2011.12.22 6711
1246 C++Builder XE3 파이어몽키 31 비디오(한글자막) 관리자 2013.03.05 6705
1245 델파이 XE 컨버전 가이드 (첨부파일) file 관리자 2012.06.21 6667
1244 안드로이드 - 장비 부팅 시 앱을 자동시작(링크) Humphery 2014.01.15 6635