有没有办法用FireMonkey添加提示或工具提示?

时间:2014-03-14 23:27:40

标签: delphi user-interface tooltip firemonkey

我已经找到它但却找不到任何东西。有没有办法用FireMonkey添加提示或工具提示?是否有可用于此的组件?

理想情况下,我正在寻找类似这样的东西(标注类型工具提示):

a callout type tooltip

对于已暂停此问题的版主:我正在寻找有关如何实现此问题的源代码行,而不是购买/使用的软件。目前(AFAIK)没有能够实现此目的的源代码组件,因此不会存在“傻瓜式”或“垃圾邮件”的风险。

4 个答案:

答案 0 :(得分:11)

这就是我最终做到的方法:创建一个看起来像这样的Button的提示:

enter image description here

向表单添加按钮。然后添加一个TPopup。在其中放置一个CalloutPanel,并可选择将对齐设置为AlClient。在该CalloutPanel上删除一个TLabel并写下你的提示文本。

您的结构应如下所示:

enter image description here

然后转到TPopup并将PlacementTarget设置为Button1(您的按钮)。接下来,转到Placement并选择BottomCenter:

enter image description here

接下来,在按钮上添加MouseEnter和MouseLeave事件的处理程序:

procedure TForm1.Button1MouseEnter(Sender: TObject);
begin
Popup1.IsOpen := True;
end;

procedure TForm1.Button1MouseLeave(Sender: TObject);
begin
Popup1.IsOpen := False;
end;

应该这样做。

答案 1 :(得分:0)

这"应该这样做"是一个非常好的解决方法,但如果您的鼠标在标注面板内 它像疯了一样闪烁 - 任何关于如何避免它的想法?

我希望firemonkey并不总是处于中途状态 android词有通知但不在windows中

答案 2 :(得分:0)

我是Delphi和FireMonkey的新手。我也想要工具提示。以下是我的想法:FireMonkey没有提供工具提示,这是故意的,有充分的理由。

我认为使用FireMonkey的一个好主意是你开发了一个且只有一个程序。然后,在不更改一行代码的情况下,您编译一个版本以在Windows上运行,另一个版本在Android上运行,另一个版本在Mac OS上运行,等等。因此,即使不更改一行代码,您也可以使用桌面和智能手机版本使用相同的用户界面完全相同。

因此,FireMonkey仅支持智能手机和台式机共有的功能。在智能手机上,没有鼠标,手指或其他东西的悬停。因此,Firemonkey不支持在桌面上悬停。因为没有悬停,所以没有工具提示(Delphi命名法中的“提示”)。

所以你必须决定:你想要一个在Windows和智能手机上完全相同的应用程序,而不需要更改代码而没有单独的代码吗?或者您想要所有桌面功能?如果您想要所有桌面功能,包括工具提示(提示)和所有其他功能,那么您应该使用Embarcadero的VCL(可视组件库)。使用VCL将允许您通过设置文本框,按钮和所有其他控件的“提示”属性来获取工具提示(提示),而无需编写代码。

但如果您想要一款适用于智能手机的应用,则必须使用FireMonkey。 VCL不适用于此。

正如我所提到的,我还是Delphi的新手。所以,当然,我感谢更正 来自经验丰富的Delphi开发人员。

答案 3 :(得分:0)

您可以使用FloatAnimation和Opacity属性进行提示。

向表单添加按钮。然后在里面添加CalloutPanel(或任何形状)。 接下来,在CalloutPanel上放置一个TLabel来编写提示文本。我在Form Creating时将CalloutPanel.Visible属性设置为False。然后将TFloatAnimation附加到CalloutPanel.Opacity属性。

Next set some TFloatAnimation properties:

由于持续时间提示显示顺利。

然后创建Button事件OnMouseEnter和OnMouseLeave。

procedure TForm1.Button1MouseEnter(Sender: TObject);
begin
   CalloutPanel1.Visible := true;
end;

procedure TForm1.Button1MouseLeave(Sender: TObject);
begin
   CalloutPanel1.Visible := false;
end;

That's it