В составе примеров 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;