0

我正在寻找Raize组件的选项卡控件的替代方法。

我希望能够在每个页面的顶部添加关闭按钮,并且我想在标签上使用倾斜的标签和颜色。哦,我正在使用 FireMonkey 2。

//我知道raize不支持firmonkey。

4

3 回答 3

3

FiremonkeyTTabControlCommon Controls页面中有它自己的(默认情况下)。您可以使用TStylebook. 例如,我很有信心可以在选项卡本身上添加一个关闭按钮。

毕竟,FMX 是一个基于矢量的框架,所以所有的视觉元素都必须存在于样式中。为此,您可能希望将样式加载到 TStylebook 中,因为我无法找到将默认样式加载到其中的方法。向下导航到tabitemstyle,从那里您将能够调整它的视觉外观。只需根据需要添加关闭按钮(对齐、布局等)。

回到您的应用程序代码中,您将寻找使用FindStyleResource例程来设置代码(XE2 使用FindBinding,因此您将设置BindingName属性)。我将假设您的关闭按钮称为“关闭按钮”(不带引号);

var
  MyTab : TTabItem;
begin
  MyTab := ((TabItem1 as TTabItem).FindStyleResource('CloseButton') as TButton).OnClick := TabClose;
end;

您希望在最初创建选项卡时添加该代码,或者如果在设计时创建所有选项卡,您需要在 FormCreate 中运行它。您基本上是在告诉它,当单击 CloseButton 时,您想要调用 notify event/procedure TabClose。此过程与单击按钮相同。

您甚至可以StyleName将选项卡的属性更改为CloseButton+Index_of_tab。

现在,至于关闭选项卡本身的代码,类似这个未经测试的示例可能会起作用,尽管您需要对其进行迭代。

procedure TForm1.TabClose(Sender: TObject);
var
  _mytab : Integer;
  _activetab : Integer;
begin
  _activetab := ((Sender as TTabItem).Parent as TTabControl).ActiveTab.Index;
  _mytab := ((Sender as TTabItem).Parent as TTabControl).ActiveTab.Index;
  ((Sender as TTabItem).Parent as TTabControl).Tabs[_MyTab].Free;
  ((Sender as TTabItem).Parent as TTabControl).TabIndex := _activetab;
end;

现在,这是聪明的部分,并利用了框架的设计。当您单击另一个元素内的样式元素时,默认情况下,它将选择父元素。在此示例中,它将选择包含用户单击的关闭按钮的选项卡。然后,它将关闭该选项卡(从技术上讲,它会释放它,我在开发中没有过多地处理选项卡,因此您需要研究“关闭”它们的正确方法)。

但是,这有一个问题;如果您希望切换回之前活动的选项卡,您可能希望找到一种更好的方法来检测以前的活动选项卡。现在,它只会打开您刚刚关闭的选项卡之后的选项卡(由于选项卡计数现在减少 1,因此活动选项卡索引选择下一个物理选项卡)。您可能可以通过将_activetab代码拆分到其他地方来做到这一点。


我用自己的一些程序做过类似的事情,这就是我通常创建“混合”组件的方式。您实质上是在利用框架的模块化设计,使其做您想做的事情,而不必依赖第三方组件。

于 2013-02-21T17:31:32.553 回答
1

由于 FMX 是一个非常年轻的框架,因此支持它的第三方组件供应商并不多。

我还没有看到任何用于 FMX 的第 3 方 TabControl 组件,快速的 Google 搜索表明没有。所以你可能不走运。

于 2013-02-20T16:24:28.157 回答
0

我知道这是一个旧查询,但如果有人仍在寻找带有关闭按钮和倾斜标签边的标签,请查看 TMSSoftware 的 TTMSFMXTabSet。我在当前的开发项目中使用它,它工作正常。

于 2017-09-13T00:25:34.803 回答