1

我正在 Delphi XE2 中编写一个启用触摸屏的应用程序。

我有一个表格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 形式?

为了清楚起见,我想追溯谁调用了该程序,或者至少能够在程序中指定它,然后将文本(从第二种形式到主要形式)返回到右边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 回答