使用“|” Delphi 中提示文本的符号
Using "|" symbol for a hint-text in Delphi
出于某种原因,当我指定“|”时任何 Delphi 控件的提示字符串中的符号提示在第一次出现时终止“|”所以工具提示 window 只包含部分文本,直到第一个“|”遇到...
我已经在 C++(WinApi + MFC)中测试了该符号,它显示了带有“|”的漂亮 K 提示符号,所以它看起来像是一些 Delphi 特定的错误。
整个程序工作正常,但是这个带有提示的东西让我很烦 =\
那么,有什么解决办法吗?
这是设计使然,记录在案的行为:
There are two parts to the Hint string--short and long--separated by the |
character. Short hints are used by pop-up tool tips. Long hints are used by the status bar. Use the GetShortHint
and GetLongHint
global functions from the Controls
unit to extract the long and short hints from a hint string.
为了 "fix" 这样你可以显示 |
个字符,你必须:
使用 TApplication.OnShowHint
or TApplicationEvents.OnShowHint
事件。
直接对所需控件进行子类化以处理 CM_HINTSHOW
消息。
两者都在准备弹出窗口时触发,在拆分 Hint
文本之后和实际显示弹出窗口之前。两者都提供对 THintInfo
记录的访问,您可以根据需要自定义该记录。它有一个 HintStr
字段,您可以将其设置为您想要的任何文本,包括 |
个字符。它有一个 HintControl
字段指向显示弹出窗口的控件。
最简单的解决方案是使用 OnShowHint
事件来设置 HintStr := HintControl.Hint
。
使用TApplication.OnShowHint
:
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := AppShowHint;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.OnShowHint := nil;
end;
procedure TForm1.AppShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
begin
HintStr := HintInfo.HintControl.Hint;
end;
使用TApplicationEvents.OnShowHint
:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
begin
HintStr := HintInfo.HintControl.Hint;
end;
好吧,我想到的最简单的解决方案就是编辑 "Controls.pas":
function GetShortHint(const Hint: string): string;
var
I: Integer;
begin
{$IFDEF _ONLY_SIMPLE_HINTS_}
Result:=Hint;
{$ELSE}
I := AnsiPos('|', Hint);
if I = 0 then
Result := Hint else
Result := Copy(Hint, 1, I - 1);
{$ENDIF}
end;
function GetLongHint(const Hint: string): string;
var
I: Integer;
begin
{$IFDEF _ONLY_SIMPLE_HINTS_}
Result:=Hint;
{$ELSE}
I := AnsiPos('|', Hint);
if I = 0 then
Result := Hint else
Result := Copy(Hint, I + 1, Maxint);
{$ENDIF}
end;
所以我刚刚在我的项目中添加了“{$DEFINE _ONLY_SIMPLE_HINTS_}
”=)
免责声明:如果您不像我那么懒,请按照 Remy Lebeau 的建议使用 TApplication.OnShowHint
或 CM_HINTSHOW
拦截。
出于某种原因,当我指定“|”时任何 Delphi 控件的提示字符串中的符号提示在第一次出现时终止“|”所以工具提示 window 只包含部分文本,直到第一个“|”遇到...
我已经在 C++(WinApi + MFC)中测试了该符号,它显示了带有“|”的漂亮 K 提示符号,所以它看起来像是一些 Delphi 特定的错误。
整个程序工作正常,但是这个带有提示的东西让我很烦 =\
那么,有什么解决办法吗?
这是设计使然,记录在案的行为:
There are two parts to the Hint string--short and long--separated by the
|
character. Short hints are used by pop-up tool tips. Long hints are used by the status bar. Use theGetShortHint
andGetLongHint
global functions from theControls
unit to extract the long and short hints from a hint string.
为了 "fix" 这样你可以显示 |
个字符,你必须:
使用
TApplication.OnShowHint
orTApplicationEvents.OnShowHint
事件。直接对所需控件进行子类化以处理
CM_HINTSHOW
消息。
两者都在准备弹出窗口时触发,在拆分 Hint
文本之后和实际显示弹出窗口之前。两者都提供对 THintInfo
记录的访问,您可以根据需要自定义该记录。它有一个 HintStr
字段,您可以将其设置为您想要的任何文本,包括 |
个字符。它有一个 HintControl
字段指向显示弹出窗口的控件。
最简单的解决方案是使用 OnShowHint
事件来设置 HintStr := HintControl.Hint
。
使用TApplication.OnShowHint
:
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := AppShowHint;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.OnShowHint := nil;
end;
procedure TForm1.AppShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
begin
HintStr := HintInfo.HintControl.Hint;
end;
使用TApplicationEvents.OnShowHint
:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
begin
HintStr := HintInfo.HintControl.Hint;
end;
好吧,我想到的最简单的解决方案就是编辑 "Controls.pas":
function GetShortHint(const Hint: string): string;
var
I: Integer;
begin
{$IFDEF _ONLY_SIMPLE_HINTS_}
Result:=Hint;
{$ELSE}
I := AnsiPos('|', Hint);
if I = 0 then
Result := Hint else
Result := Copy(Hint, 1, I - 1);
{$ENDIF}
end;
function GetLongHint(const Hint: string): string;
var
I: Integer;
begin
{$IFDEF _ONLY_SIMPLE_HINTS_}
Result:=Hint;
{$ELSE}
I := AnsiPos('|', Hint);
if I = 0 then
Result := Hint else
Result := Copy(Hint, I + 1, Maxint);
{$ENDIF}
end;
所以我刚刚在我的项目中添加了“{$DEFINE _ONLY_SIMPLE_HINTS_}
”=)
免责声明:如果您不像我那么懒,请按照 Remy Lebeau 的建议使用 TApplication.OnShowHint
或 CM_HINTSHOW
拦截。