Delphi 2010 Tablet PC Поддержка - PullRequest
       34

Delphi 2010 Tablet PC Поддержка

4 голосов
/ 29 ноября 2010

Одной из главных выгодных вещей, которые я увидел, когда мне пришлось покупать Delphi для моей работы, была возможность поддержки планшетных компьютеров. Теперь клиент компании, в которой я работаю, хочет использовать планшетный ПК. Я очень старался найти примеры Delphi с планшетным ПК, но я не нашел ни одного. У кого-нибудь есть опыт с этим? Любые учебные пособия или примеры?

Кажется, я даже не могу принести виртуальную клавиатуру, когда компонент получает фокус, и скрыть ее, когда он теряет.

1 Ответ

7 голосов
/ 29 ноября 2010

В 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 есть фокус.

Расчет позиции клавиатуры на экране не такой умный, и клавиатура может упасть слишком сильно, если элемент управления с фокусировкой оченьблизко к нижнему краю формы.В любом случае, размещение элемента управления на экране выходит за рамки вашего вопроса.

...