我的应用程序在台式电脑和/或平板电脑上运行。不过,对于后者,我发现我必须提供一个屏幕键盘——这对于提供的 TTouchKeyboard 来说并不难。我的问题是如何确定触摸是否可用?我找到了一些示例代码,它使 WinAPi 调用 GetSystemMetrics:
function GetTouchCapabilities : TTouchCapabilities;
var ADigitizer : integer;
begin
result := [];
// First check if the system is a TabletPC
if GetSystemMetrics(SM_TABLETPC) <> 0 then begin
include(result,tcTabletPC);
if CheckWin32Version(6,1) then begin // If Windows 7, then we can do additional tests on input type
ADigitizer := GetSystemMetrics(SM_DIGITIZER);
if ((ADigitizer and NID_INTEGRATED_TOUCH) <> 0) then include(result,tcIntTouch);
if ((ADigitizer and NID_EXTERNAL_TOUCH) <> 0) then include(result,tcExtTouch);
if ((ADigitizer and NID_INTEGRATED_PEN) <> 0) then include(result,tcIntPen);
if ((ADigitizer and NID_EXTERNAL_PEN) <> 0) then include(result,tcExtPen);
if ((ADigitizer and NID_MULTI_INPUT) <> 0) then include(result,tcMultiTouch);
if ((ADigitizer and NID_READY) <> 0) then include(result,tcReady);
end else begin
// If not Windows7 and TabletPC detected, we asume that it's ready
include(result,tcReady);
end;
end;
end;
这里还有微软对平板电脑的定义。
然后,我搜索了 RTL 和 Delphi 源代码,试图找到更直接地为我提供此信息的例程,其方式与 Delphi 包装操作系统版本信息的方式类似,但我看不到任何(尽管可能是我只是不知道要搜索什么!)。上面的代码风格是检测触摸能力的最佳方式吗?还是我错过了更明显的东西?