有没有简单的方法可以在Firemonkey中做类似Delphi IDE的选项卡而不继承
TTabControl
?
TTabItem
内容更改,则显示“实心圆圈”)我看到了创建运行时TTabItem,firemonkey,但代码似乎有点复杂。
我应该从哪里开始看呢? OnPaint 事件?
向样式添加实心圆应该很容易
这是我如何使用它的示例,“模拟 MDI 或对接应用程序”
procedure TMain.btnParametresClick(Sender: TObject);
var F : TFormParam;
ATabItem : TTabItem;
begin
// si existe déjà
if Liste.ContainsKey('Parametres')
then begin
TabControl1.ActiveTab:=IndexTab('Paramètres');
end
else begin
// si non créé
F:=TFormParam.Create(Self);
ATabItem:=TabControl1.Add();
// ajout à la liste
Liste.Add('Parametres',F);
ATabItem.Text:='Paramètres';
ATabItem.StyleLookup:='CloseTabItem';
TButton(ATabItem.FindStyleResource('btnCloseTab')).OnClick:=CloseTab;
TButton(ATabItem.FindStyleResource('btnCloseTab')).TagObject:=ATabItem;
TButton(ATabItem.FindStyleResource('btnCloseTab')).TagString:='Parametres';
ATabItem.AddObject(F.MainLayout);
TabControl1.TabIndex:=TabControl1.TabCount-1; // onglet actif=nouvelle fenêtre
end;
Multiview1.HideMaster;
end;
但是与按钮交互有点棘手。 要关闭我的表单相关选项卡,我使用这个
procedure TMain.CloseTab(Sender: TObject);
var F : TForm;
begin
if not Datas.PeutFermer then Exit;
if TabControl1.TabIndex=TabControl1.TabCount-1 then TabControl1.Previous else TabControl1.Next;
if Liste.TryGetValue(TButton(Sender).TagString,F) then
F.Close;
TTask.Run(
procedure
begin
TThread.Synchronize(nil,
procedure
begin
TButton(Sender).TagObject.DisposeOf;
if TabControl1.TabIndex>TabControl1.TabCount-1
then TabControl1.TabIndex:=TabControl1.TabCount-1
end);
end);
Liste.Remove(TButton(Sender).TagString);
end;