4

仕事のためにデルファイを購入しなければならなかったときに私が見た大きなセールスポイントの1つは、タブレットPCをサポートする機能でした。今、私が働いている会社のクライアントは、タブレットPCを使いたいと思っています。タブレットPCでデルファイの例を探すのに一生懸命取り組んできましたが、見つかりません。誰かがそれを経験したことがありますか?どんな種類のチュートリアルや例ですか?

コンポーネントがフォーカスを取得したときに仮想キーボードを持ってきて、それを失ったときに非表示にすることさえできないようです。

4

1 に答える 1

7

Delphi 2010は、Delphiにいくつかの優れたタッチとジェスチャーのサポートを導入しました。

詳細については、EDN Webサイトにアクセスして、CodeRage4のリプレイを探してください。SeppyBloomによる「VCLでのジェスチャーの実践」というタイトルのセッションがあります。また、CodeRage 5には、VesvolodLeonovによる「新しいアプリケーションと現在のプロジェクトのジェスチャー機能」というタイトルのセッションがあります。

MarcoCantuの「Delphi2010ハンドブック」の第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にフォーカスがあると非表示になります。

画面上のキーボードの位置の計算はそれほど巧妙ではなく、フォーカスのあるコントロールがフォームの下端に非常に近い場合、キーボードが下がりすぎる可能性があります。とにかく、画面上にコントロールを配置することはあなたの質問の範囲外です。

于 2010-11-29T14:14:38.730 に答える