当我不得不为我的工作购买德尔福时,我看到的一大卖点是支持平板电脑的能力。现在我工作的公司的客户想要使用平板电脑。我一直在努力寻找带有平板电脑的 delphi 示例,但我没有找到任何示例。有没有人有这方面的经验?任何类型的教程或示例?
当组件获得焦点时,我什至无法带上虚拟键盘并在失去焦点时将其隐藏。
当我不得不为我的工作购买德尔福时,我看到的一大卖点是支持平板电脑的能力。现在我工作的公司的客户想要使用平板电脑。我一直在努力寻找带有平板电脑的 delphi 示例,但我没有找到任何示例。有没有人有这方面的经验?任何类型的教程或示例?
当组件获得焦点时,我什至无法带上虚拟键盘并在失去焦点时将其隐藏。
Delphi 2010 为 Delphi 引入了一些不错的触摸和手势支持。
要获取有关它的更多信息,请访问EDN网站并查找 CodeRage 4 重播。Seppy Bloom有一个名为“ Hands on gestures in VCL ”的课程。同样在 CodeRage 5 中,Vesvolod Leonov 有一个名为“新应用程序和当前项目的手势功能”的会议。
Marco Cantu 的“ Delphi 2010 手册”的第 6 章也介绍了 Delphi 中的触摸和手势。
最后,您可以查看Chris Bensen 的博客以获取有关 Delphi 中的触摸和手势支持的一些介绍性帖子和演示源代码。
当组件获得焦点时,我什至无法带上虚拟键盘并在失去焦点时将其隐藏。
在 Delphi 2010 和更新版本中,已提供支持触摸的键盘组件。要使其在焦点改变时可见或隐藏,可以处理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 具有焦点时隐藏。
屏幕上键盘位置的计算不是那么聪明,如果具有焦点的控件非常靠近表单的底部边缘,键盘可能会落得太低。无论如何,在屏幕上定位控件超出了您的问题范围。