【问题标题】:What is the TForm.TipMode property for?TForm.TipMode 属性有什么用?
【发布时间】:2014-09-12 13:41:35
【问题描述】:

TForm.TipMode 属性是什么?

它已在 Delphi XE3 中添加,但文档没有说明此属性。

【问题讨论】:

  • 我不再对 Delphi 的新帮助中未记录的函数感到惊讶。现在,当我找到一个记录在案的函数时,我感到很惊讶。

标签: delphi delphi-xe6


【解决方案1】:

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 指出这一点。我已经编辑以包含该信息。 )

【讨论】:

  • 这是VCL代码吗?硬编码路径?我希望至少代码会查看HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\TabTip.exe。甚至密钥本身也没有那么硬编码:%CommonProgramFiles%\microsoft shared\ink\TabTip.exe
  • @Sertac:是的,恐怕是直接来自 VCL.Controls.Pas,在 XE6 中的第 13360 行附近。
  • @Sertac:同意。看起来他们在某些时候用接口替换了东西,只是没有删除旧代码。 (或者也许它从未在发布的代码中使用过,只是从未被清理过。)
  • @Sertac:我已经编辑了我的答案以包含有关所使用的 ITextInputPanel 接口的信息(以及有关死代码中的硬编码路径的信息)。感谢您发现这一点;在我看到这个问题并调查它是什么之前,我从来没有注意到 TTipMode,然后错过了它。
  • @SertacAkyuz 代码可以从 Embarcadero 中出现的事实简直令人震惊。就好像他们根本没有代码审查。
猜你喜欢
  • 2010-11-12
  • 2013-08-08
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多