자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi TCategoryButtons 의 동적생성 후 action의 문제
2016.03.19 21:18
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
TCategoryButtons 의 동적생성 후 action의 문제
DB에서 TCategoryButtons.Categories 와
하위 Items를 끌고 와서 동적으로 생성을 하였는데
문제는 ActionList 에서 동적 생성이 문제가 된다는 점....
다른 방법으로 Click시 action을 하게 하는 방법이 있는지 궁금합니다.
동적생성을 하면 OnClick Event를 생성 시키지 못하는 단점이 있더군요.
아래는 TCategoryButtons 의 동적생성 코드 입니다.
catMenuItems = TCategoryButtons 입니다.
// Menu Group
DM.SysMenuGroupInfo.Open('T_SysMenuGroup');
while not DM.SysMenuGroupInfo.eof do
begin
catMenuItems.Categories.Add();
catMenuItems.Categories[DM.SysMenuGroupInfo.FieldByName('MenuTag').AsInteger - 1].Caption
:= DM.SysMenuGroupInfo.FieldByName('MenuGroupName').AsString;
catMenuItems.Categories[DM.SysMenuGroupInfo.FieldByName('MenuTag').AsInteger - 1].Collapsed := true;
DM.SysMenuGroupInfo.next;
end;
//Menu Item
while not DM.Qry_Menupri.eof do
begin
catMenuItems.Categories[DM.Qry_Menupri.FieldByName('MenuGroupTag').AsInteger - 1].Items.Add();
catMenuItems.Categories[FieldByName('MenuGroupTag').AsInteger - 1].Items[FieldByName('num').AsInteger - 1].caption
:= FieldByName('MenuName').AsString;
catMenuItems.Categories[FieldByName('MenuGroupTag').AsInteger - 1].Items[FieldByName('num').AsInteger - 1].hint
:= FieldByName('MenuID').AsString;
DM.Qry_Menupri.Next;
end;
댓글 3
-
험프리
2016.03.21 09:41
-
urong
2016.03.21 17:22
// Menu Group
for i = 0 to 10 do
begin
catMenuItems.Categories.Add();
catMenuItems.Categories[i].Caption
:= 'a' + .toString(i);
end;
//Menu Item
for i = 0 to 10 do
begin
for j = 0 to 5 do
begin
catMenuItems.Categories[i].Items.Add();
catMenuItems.Categories[i].Items[j].caption
:= 'a';
catMenuItems.Categories[i].Items[j].hint
:= 'a';
end;
end;
이렇게 동적으로 생성을 하고 각 버튼을 클릭했을때의 이벤트도 동적생성으로
0번 카테고리의 2번아이템을 누르면 그에 해당하는 화면을 띄울수 있도록 하려고 합니다.
화면의 이름은 Items.Caption 하고 Item.Hint 를 읽어들여서 찾을 수 있도록....
-
dreamjjss
2016.07.25 13:00
저도 같은 고민을 하다가 편법이긴 하지만 OnMouseUp 이벤트를 이용해서 처리 했습니다.
procedure TForm.catMenuItemsMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ClickCategory: TButtonCategory;
ClickButton: TButtonItem;
begin
ClickButton := catMenuItems.GetButtonAt(X, Y);
if ClickButton = nil then
begin
ClickCategory := catMenuItems.GetCategoryAt(X, Y);
if ClickCategory = nil then
begin
Exit;
end else
begin
// 카테고리 클릭 시..
ShowMessage(ClickCategory.Caption);
// MovePage(TCustomTabSheet(ClickCategory.Data));
end;
end else
begin
// 아이템 클릭 시..
ShowMessage(ClickButton.Caption);
//MovePage(TCustomTabSheet(ClickButton.Data));
end;
end;
Delphi TCategoryButtons 의 동적생성 후 action의 문제
2016.03.19 21:18
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
TCategoryButtons 의 동적생성 후 action의 문제
DB에서 TCategoryButtons.Categories 와
하위 Items를 끌고 와서 동적으로 생성을 하였는데
문제는 ActionList 에서 동적 생성이 문제가 된다는 점....
다른 방법으로 Click시 action을 하게 하는 방법이 있는지 궁금합니다.
동적생성을 하면 OnClick Event를 생성 시키지 못하는 단점이 있더군요.
아래는 TCategoryButtons 의 동적생성 코드 입니다.
catMenuItems = TCategoryButtons 입니다.
// Menu Group
DM.SysMenuGroupInfo.Open('T_SysMenuGroup');
while not DM.SysMenuGroupInfo.eof do
begin
catMenuItems.Categories.Add();
catMenuItems.Categories[DM.SysMenuGroupInfo.FieldByName('MenuTag').AsInteger - 1].Caption
:= DM.SysMenuGroupInfo.FieldByName('MenuGroupName').AsString;
catMenuItems.Categories[DM.SysMenuGroupInfo.FieldByName('MenuTag').AsInteger - 1].Collapsed := true;
DM.SysMenuGroupInfo.next;
end;
//Menu Item
while not DM.Qry_Menupri.eof do
begin
catMenuItems.Categories[DM.Qry_Menupri.FieldByName('MenuGroupTag').AsInteger - 1].Items.Add();
catMenuItems.Categories[FieldByName('MenuGroupTag').AsInteger - 1].Items[FieldByName('num').AsInteger - 1].caption
:= FieldByName('MenuName').AsString;
catMenuItems.Categories[FieldByName('MenuGroupTag').AsInteger - 1].Items[FieldByName('num').AsInteger - 1].hint
:= FieldByName('MenuID').AsString;
DM.Qry_Menupri.Next;
end;
댓글 3
-
험프리
2016.03.21 09:41
-
urong
2016.03.21 17:22
// Menu Group
for i = 0 to 10 do
begin
catMenuItems.Categories.Add();
catMenuItems.Categories[i].Caption
:= 'a' + .toString(i);
end;//Menu Item
for i = 0 to 10 dobegin
for j = 0 to 5 do
begin
catMenuItems.Categories[i].Items.Add();
catMenuItems.Categories[i].Items[j].caption
:= 'a';catMenuItems.Categories[i].Items[j].hint
:= 'a';
end;end;
이렇게 동적으로 생성을 하고 각 버튼을 클릭했을때의 이벤트도 동적생성으로
0번 카테고리의 2번아이템을 누르면 그에 해당하는 화면을 띄울수 있도록 하려고 합니다.
화면의 이름은 Items.Caption 하고 Item.Hint 를 읽어들여서 찾을 수 있도록....
-
dreamjjss
2016.07.25 13:00
저도 같은 고민을 하다가 편법이긴 하지만 OnMouseUp 이벤트를 이용해서 처리 했습니다.
procedure TForm.catMenuItemsMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ClickCategory: TButtonCategory;
ClickButton: TButtonItem;
begin
ClickButton := catMenuItems.GetButtonAt(X, Y);if ClickButton = nil then
begin
ClickCategory := catMenuItems.GetCategoryAt(X, Y);if ClickCategory = nil then
begin
Exit;
end else
begin// 카테고리 클릭 시..
ShowMessage(ClickCategory.Caption);
// MovePage(TCustomTabSheet(ClickCategory.Data));
end;
end else
begin
// 아이템 클릭 시..ShowMessage(ClickButton.Caption);
//MovePage(TCustomTabSheet(ClickButton.Data));
end;
end;
DB 없이 돌려볼 수 있는 샘플을 등록해 주시면 검토해 보겠습니다.
그 샘플 기준으로 어떤 동작이 필요한지 설명해 주세요.