首页 > 解决方案 > Firemonkey 中的多行提示

问题描述

我正在尝试在我用delphi 10 seattle(FMX)制作的应用程序中创建多行提示。设置提示时似乎换行不起作用。

Button1.Hint := 'Line 1' + #13#10 + 'Line2';

关于如何做到这一点的任何想法。不过,这在 VCL 中运行良好。

标签: firemonkeydelphi-10-seattlec++builder-10.3-rio

解决方案


我可以提供一个提示,我刚刚在 C++ Builder Rio 中解决了相同类型的问题。我没有 Delphi,只有 C++ Builder,但是这两个产品是如此相互关联,我一直使用 Delphi 的提示(或代码)来解决我的问题。

在 C/C++ 中,您通常可以使用“\r”或其等效的“\n\l”来显示回车(我试图在 TMemo 中显示)。TMemo 看起来只是在去除代码(除了它认为用于换行的“\l”是无效的转义码,因此它只会显示“l”)并且在一行上显示所有内容。我确实注意到选项卡 ("\t") 的快捷方式正在工作。

同样,在 C/C++ 中,还有其他用于创建字符的选项。相当于您正在执行的操作,“char(13)+char(10)”仅显示字符“23”,所有内容都在同一行(正如您所描述的那样)。这就是在使用十进制(以 10 为基数)时添加字符的方式。如果我想使用十六进制,我会写“\0xd\0xa”(它只是从文本中删除并显示在一行上,就像上面第二段中的内容一样)。

我发现在 C++ Builder 中工作的解决方案是对我的字符编码(“\015\012”)使用八进制表示法。就个人而言,在大约 50 年的编程中,我以前从未见过十六进制失败但八进制有效的情况,但我绝望地尝试了它。

对于所有这些测试和调试,我创建了一个新项目,在表单中添加了一个 TMemo 和一个按钮(并为按钮设置 ShowHint=true),并为按钮的代码输入以下内容:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    UnicodeString CR = "\015\012";
    Memo1->Text = "a" + CR + "b";
    Button1->Hint = Memo1->Text + " (hint)";
}

因此,我对您的问题的解决方案是弄清楚如何将八进制代码输入字符并在 Delphi 中显示相应的文本,然后将该编码用于八进制字符“015”和“012”。


推荐阅读