当我不得不为我的工作购买delphi时,我看到的一个大卖点是支持tablet pc的能力,现在我工作的公司的客户想使用tablet pc。我一直在努力寻找在tablet pc上使用delphi的例子,但我没有找到任何例子。有谁有使用它的经验吗?有任何类型的教程或示例吗?
我似乎甚至不能在组件获得焦点时带来虚拟键盘,而在失去焦点时将其隐藏起来。
发布于 2010-11-29 22:14:39
Delphi 2010为Delphi引入了一些漂亮的触摸和手势支持。
要获取更多信息,请访问EDN网站并查找CodeRage 4回放。有一个由赛皮·布鲁姆主持的题为“Hand on gestures in VCL”的会议。在CodeRage 5中,还有一个由Vesvolod Leonov主持的名为“新应用程序和当前项目的手势功能”的会议。
马尔科坎图的“Delphi2010手册”的第6章也涵盖了德尔福的触摸和手势。
最后,你可以在上找到一些关于触摸和手势支持的介绍性文章和演示源代码。
我似乎甚至不能在组件获得焦点时带来虚拟键盘,而在失去焦点时将其隐藏起来。
在Delphi2010和更新的版本中,触摸式keyboard component已经可用。要使其可见或在焦点更改时将其隐藏,可以处理CM_FOCUSCHANGED VCL消息,并在获得焦点的控件派生自某个类或满足某些特殊条件时使键盘可见。下面是一个示例代码:
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
TouchKeyboard1: TTouchKeyboard;
private
procedure ActivateVirtualKeyboard(Control: TWinControl; Keyboard: TTouchKeyboard);
procedure CmFocusChanged(var Msg: TCMFocusChanged); message CM_FOCUSCHANGED;
public
{ Public declarations }
end;
/// Implementation
procedure TForm1.ActivateVirtualKeyboard(Control: TWinControl; Keyboard: TTouchKeyboard);
var
APoint : TPoint;
begin
if Control is TCustomEdit then
begin
APoint := Control.ClientToScreen(Point(0,0));
APoint := Keyboard.Parent.ScreenToClient(APoint);
Keyboard.Left := APoint.X;
Keyboard.Top := APoint.Y + (Control.Height);
Keyboard.Visible := True;
end
else
Keyboard.Visible := False;
end;
procedure TForm1.CmFocusChanged(var Msg: TCMFocusChanged);
begin
ActivateVirtualKeyboard(Msg.Sender, TouchKeyboard1);
end;
上面的代码在每次焦点改变时调用ActivateVirtualKeyboard。Msg.Sender是获得焦点的控件。ActivateVirtualKeyboard检查控件是否是TCustomEdit的后代(像TEdit或TMemo这样的组件是该类的后代)。如果控件是从TCustomEdit派生的,则它将虚拟键盘放在控件的正下方,并使键盘可见;否则,它将隐藏键盘。
在示例代码中,我们在Form1上有一个编辑、一个备忘录和一个按钮。键盘应对Edit1和Memo1可见,并在Button1具有焦点时隐藏。
计算键盘在屏幕上的位置并不那么聪明,如果具有焦点的控件非常接近窗体的底部边缘,则键盘可能会变得太低。无论如何,在屏幕上定位控件超出了您的问题的范围。
https://stackoverflow.com/questions/4303115
复制相似问题