1

DelphiXE2でタッチスクリーン対応のアプリケーションを作成しています。

のフォームがありTEditsます。それらをクリックすると、私が書いたプロシージャを呼び出してTTouchkeyboard、ラベル(キャプション用)とTEditキーボード入力用のラベルが付いた、常に最大化された別のフォームを表示します。

私の手順(vkeyboardは私のフォーム名ですTTouchkeyboard):

procedure TLogin.showkeyboard(numeric,password: Boolean; 
  caption,value:string;Sender:TObject);
begin
  if numeric then 
    vkeyboard.TouchKeyboard1.Layout := 'NumPad' // make the TTouchkeyboard on the form numeric or alpha
  else 
    vkeyboard.TouchKeyboard1.Layout := 'Standard';
  if password then 
    vkeyboard.input.PasswordChar := '*' //make the TEdit show * or normal characters
  else 
    vkeyboard.input.PasswordChar := #0;
  vkeyboard.title.Caption := caption;
  vkeyboard.input.Text := value;
  vkeyboard.Show;
end;

Form1.Edit1フォームにオブジェクトを送信しようとしてvkeyboardいますが、正しく送信する方法がわかりません。

なんで?入力フォーム()で[完了]をクリックできるようにしたいのでvkeyboard、送信者をさかのぼって、メインフォームの編集でテキストを更新します。

procedure Tvkeyboard.sButton1Click(Sender: TObject);
begin
  (temp as TEdit).Text := input.Text; // send back the text to the right object
  vkeyboard.Hide;
end;

もちろん、この小さな部分は機能しませんでした...一時オブジェクトがXフォームに属することを指定する必要があると思いますか?

明確にするために、誰がプロシージャを呼び出したか、または少なくともプロシージャでそれを指定できるようにしてから、テキスト(2番目のフォームからメインフォームへ)を右側に戻したいと思いますTEdit

4

1 に答える 1

4

必要な関数に必要な引数を渡すことは大歓迎です。渡された値をさらに別の関数で使用する必要がある場合は、それをどこかに保存して、後の関数がアクセスできるようにする必要があります。

あなたの例を使用すると、関数にSenderパラメーターを提供したようshowkeyboardです。TEditキーボードを表示するようにトリガーしたコントロールへの参照を渡している場所だと思います。Tvkeyboardに格納されたオブジェクトはvkeyboard後でその値を使用する必要があるため、その値のコピーをTvkeyboardオブジェクトに渡します。TEditフィールドを宣言します。

type
  Tvkeyboard = class(...)
    ...
  public
    EditSender: TEdit;

次に、showkeyboardそのフィールドを次のように設定します。

vkeyboard.EditSender := Sender;

最後に、テキストを設定するときにそのフィールドを使用します。

procedure Tvkeyboard.sButton1Click(Sender: TObject);
begin
  EditSender.Text := input.Text; // send back the text to the right object
  Self.Hide;
end;

常にTEditコントロールであることがわかっているため、Senderパラメーターのタイプを変更showkeyboardして、その特定のタイプを反映させることができます。

procedure TLogin.showkeyboard(..., Sender: TEdit);
于 2012-08-22T02:10:21.237 に答える