Delphi. UniTreeMenu на примере TabletApplication

В составе примеров UniGUI есть пример, который мне понравился, это TabletApplication, выглядит это таким образом

Слева у нас UniTreeMenu. Справа UniPageControl, при нажатии на пункт меню, добавляются вкладки. Причем они Closable.

Вот как выглядит обработка нажатия на пункт меню

procedure TMainForm.UniTreeMenu1SelectionChange(Sender: TObject);
var
  N : TUniTreeNode;
  T : TUniTabSheet;
begin
  N := UniTreeMenu1.Selected;
  if Assigned(N) and N.IsLeaf then
  begin
    if N.Data = nil then
    begin
      T := TUniTabSheet.Create(Self);
      T.PageControl := UniPageControl1;
      T.Caption := N.Text;
      T.ImageIndex := N.ImageIndex;
      T.Closable := True;
      T.OnClose := TabSheetClose;
      N.Data := T;
      T.Data := N;
    end
    else
    begin
      T := N.Data;
    end;
    UniPageControl1.ActivePage := T;
  end;
end;

Смена и закрытие вкладки обработаны так

procedure TMainForm.UniPageControl1Change(Sender: TObject);
var
  T : TUniTabSheet;
  N : TUniTreeNode;
begin
  T := UniPageControl1.ActivePage;
  if Assigned(T) then
  begin
    N := T.Data;
    UniTreeMenu1.Selected := N;
  end;
end;

procedure TMainForm.TabSheetClose(Sender: TObject; var AllowClose: Boolean);
var
  N : TUniTreeNode;
begin
  N := (Sender as TUniTabSheet).Data;
  if N is TUniTreeNode then
    (N as TUniTreeNode).Data := nil;

  if UniPageControl1.PageCount = 1 then
    UniTreeMenu1.Selected := nil;
end;

Микрорежим

Это меню также можно свернуть, выглядеть это будет так

procedure TMainForm.UniToolButton1Click(Sender: TObject);
begin
  UniTreeMenu1.Micro := not UniTreeMenu1.Micro;
end;
This entry was posted in Без рубрики. Bookmark the permalink.