【发布时间】:2014-09-12 13:41:35
【问题描述】:
TForm.TipMode 属性是什么?
它已在 Delphi XE3 中添加,但文档没有说明此属性。
【问题讨论】:
-
我不再对 Delphi 的新帮助中未记录的函数感到惊讶。现在,当我找到一个记录在案的函数时,我感到很惊讶。
标签: delphi delphi-xe6
TForm.TipMode 属性是什么?
它已在 Delphi XE3 中添加,但文档没有说明此属性。
【问题讨论】:
标签: delphi delphi-xe6
TTipMode 在 Controls.pas 中定义,用于跟踪 TabTip.exe 中的文本输入面板的状态(打开或关闭),该面板位于 ITextInputPanel 界面中。
procedure TWinControl.UpdateTIPStatus;
begin
if Assigned(FTIPIntf) then
begin
if TipMode = tipOpen then SetTextInputPanelStatus(Self, True)
else if TipMode = tipClose then SetTextInputPanelStatus(Self, False);
end;
end;
这是从此方法调用的SetTextInputPanelStatus 过程:
procedure SetTextInputPanelStatus(Control: TWinControl; OpenTIP: Boolean);
procedure InvokeTabTip;
const
DefaultTabTipPath = 'C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe';
DefaultOnScreenKeyboardPath = 'C:\Windows\System32\OSK.exe';
var
TabTipPath: string;
begin
TabTipPath := DefaultTabTipPath;
ShellExecute(0, 'open', PChar(TabTipPath), nil, nil, SW_SHOWNOACTIVATE);
end;
procedure OPenTip2;
begin
(Control.FTIPIntf as ITextInputPanel).SetInPlaceVisibility(1); // True
end;
procedure CloseTip;
begin
(Control.FTIPIntf as ITextInputPanel).SetInPlaceVisibility(0); // False
end;
begin
if Assigned(Control.FTIPIntf) then
begin
if OpenTIP then OpenTip2 // InvokeTabTip
else CloseTip;
end;
end;
这表明如果最终参数(OpenTip)是True,它会打开带有程序命令行的文本输入面板(在OpenTip 中完成)。如果参数是False,它将关闭该窗口。在DefaultTabTipPath指定的位置执行应用程序可以看到文本输入窗口。
(请注意,包含上述常量的InvokeTabTip 的代码永远不会执行;对它的调用已被注释掉。感谢@SertacAkyuz 指出这一点。我已经编辑以包含该信息。 )
【讨论】:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\TabTip.exe。甚至密钥本身也没有那么硬编码:%CommonProgramFiles%\microsoft shared\ink\TabTip.exe