天天看點

執行個體講解如何在Delphi中動态建立dxBarManager内容

一、dxBarManager中一些非常重要的概念:

   TCategorys:為了友善對dxBarManager中的項目進行歸類而設計的一個屬性,當然,隻使用預設的名字為Default的Category也沒有關系,隻是如果在設計界面上隻用一個而不用其他的Category會顯得非常亂。

    TdxBarSubItem:可以挂載其他TdxBarItem項目的一個容器,相當于【主菜單】。

    TdxBarButton:具體的項目欄,相當一個【菜單項】。

    TdxBarSepartor:分隔線。

    TdxBarItemLink:項目連結關系,比如,想要把一個dxBarSubItem對象放置在一個容器對象上(如想放置在dxBar上),其步驟就是:先在dxBar上建立一個dxBarItemLink,然後讓這個建立的dxBarItemLink.Item指向這個dxBarSubItem。同樣的道理,如果想要把一個dxBarButton對象挂載在一個dxBarSubItem對象容器下,也是先建立一個dxBarItemLink,然後讓這個建立的dxBarItemLink.Item指向該dxBarButton。

二、建立一個TdxBarSubItem,并在它下面挂載5個TdxBarButton

procedure TMainForm.btn_AddClick(Sender: TObject);
var
  aItemLink: TdxBarItemLink;
  aSubItem: TdxBarSubItem;
  aBarButton: TdxBarButton;
  aSeparator: TdxBarSeparator;//分隔線
  i: Integer;
begin
  //建立一個dxSubItem,相當于建立一個主菜單項
  aSubItem := TdxBarSubItem.Create(Self);
  i := aSubItem.BarManager.Categories.Count+1;
  aSubItem.Caption := Format('系統菜單%d',[i]);

  aItemLink := aSubItem.BarManager.Bars[0].ItemLinks.Add;
  aItemLink.Item := aSubItem;

  //======以下這兩行代碼,純屬為了把每個dxSubItem歸屬到一個不同的類别下====//
  //==同時也是為了友善在dxBarManager中統計出到底建立了多少個“主”菜單
  //未清除Category之前,dxBarManager在建立時預設會建立一個名為Default的Category
  aSubItem.BarManager.Categories.Add(Format('Categories_%-2d',[i]));
  aSubItem.Category := i;

  //建立一個dxBarButton,相當于建立一個明細菜單項
  for i := 1 to 5 do
  begin
    aBarButton := TdxBarButton.Create(Self);//記憶體資源由Self負責管理
    aBarButton.Caption := Format('菜單項%d',[i]);
    aBarButton.OnClick:= mi_ItemOnClick; //動态添加Button的Onclick單擊事件

    aItemLink := aSubItem.ItemLinks.Add;
    aItemLink.Item := aBarButton;

    if (i mod 3 = 0) and (i<5) then //放上一個分隔線
    begin
      aSeparator := TdxBarSeparator.Create(Self);
      aSeparator.Caption := '分隔線';
      aSeparator.ShowCaption := False;
      aItemLink := aSubItem.ItemLinks.Add;
      aItemLink.Item := aSeparator;
    end;
  end;
end;      

三、顯示dxBarManager中的内容,看看它到底建立一些什麼東西。

procedure TMainForm.btn_DisplayClick(Sender: TObject);
var
  I: Integer;
begin
  //看看dxBarManager1中到底有些什麼東西
  Memo1.Clear;
  Memo1.Lines.Add(Format('dxBarManager中Category總數量=%d,Category Name分别為:',[dxbarManager1.Categories.Count]));
  Memo1.Lines.AddStrings(dxBarManager1.Categories);
  Memo1.Lines.Add('=================================');
  for I := 0 to dxBarManager1.ItemCount-1 do
  begin
    Memo1.Lines.Add(Format('%.3d:Caption=%-10s,Category=%2d,%-20s',
      [i+1,dxBarManager1.Items[i].Caption,dxbarManager1.Items[i].Category,dxBarManager1.Items[i].ClassName])
    );
  end;
end;      

四、如何清除dxBarManager中的内容

procedure TMainForm.btn_ReleaseClick(Sender: TObject);
var
  I: Integer;
begin
  //dxBarManager1Bar1.ItemLinks.Clear;
  dxBarManager1.Categories.Clear;
  for i:=dxBarManager1.ItemCount downto 0 do //必須使用downto
    dxBarManager1.Items[i].Free;
end;      

五、看看運作效果

繼續閱讀