В Delphi 2010 появилась приятная поддержка касаний и жестов в Delphi.
Чтобы получить больше информации об этом, перейдите на сайт EDN и найдите повторы CodeRage 4.Существует сеанс под названием « Руки на жестах в VCL » от Seppy Bloom.Также в CodeRage 5 есть сессия под названием « Gesturing Capabilities для новых приложений и текущих проектов » Везволода Леонова.
Глава 6 книги Марко Канту " Руководство по Delphi 2010 * " также охватывает прикосновения и жесты в Delphi.
В конце концов, вы можете проверить Блог Криса Бенсена для некоторых вводных постов и демонстрационного исходного кода о поддержке касаний и жестов в 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 есть фокус.
Расчет позиции клавиатуры на экране не такой умный, и клавиатура может упасть слишком сильно, если элемент управления с фокусировкой оченьблизко к нижнему краю формы.В любом случае, размещение элемента управления на экране выходит за рамки вашего вопроса.