在Delphi FireMonkey中寻找第三方tabcontrol

时间:2013-02-20 15:14:31

标签: delphi tabcontrol firemonkey

我正在寻找Raize组件'标签控件的替代方案。

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

//我知道raize不支持firmonkey。

3 个答案:

答案 0 :(得分:3)

Firemonkey在TTabControl页面中拥有自己的Common Controls(默认情况下)。您可以使用TStylebook设置此样式。例如,我非常有信心可以在标签上添加一个关闭按钮。

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

返回应用程序代码,您将要使用FindStyleResource例程来设置代码(XE2使用FindBinding,因此您需要设置BindingName财产而不是)。我假设您的关闭按钮被称为'CloseButton'(没有引号);

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

您最初要创建选项卡时要添加该代码,或者如果在设计时创建所有选项卡,则需要在FormCreate中运行它。您基本上告诉它,当单击CloseButton时,您要调用通知事件/过程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;

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

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


我用自己的一些程序做了类似的事情,这就是我通常创建'混合'组件的方式。您实际上是利用框架的模块化设计使其按照您的意愿执行操作,而不必依赖第三方组件。

答案 1 :(得分:1)

由于FMX是一个非常年轻的框架,目前还没有很多第三方组件供应商支持它。

我还没有看到任何针对FMX的第三方TabControl组件,而快速谷歌搜索表明没有任何。所以你可能运气不好。

答案 2 :(得分:0)

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