我正在寻找Raize组件'标签控件的替代方案。
我希望能够在每个页面的顶部添加关闭按钮,我想在选项卡上使用倾斜的标签和颜色。哦,我正在使用FireMonkey 2.
//我知道raize不支持firmonkey。
答案 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。我在当前的开发项目中使用它并且工作正常。