我正在用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;


当然这部分工作不起作用...我想我需要指定temp对象属于X形式?

明确地说,我想追溯谁调用了该过程,或者至少能够在该过程中指定它,然后将文本(从第二种形式转换为主要形式)返回到正确的TEdit

最佳答案

欢迎您将所需的任何参数传递给所需的任何函数。如果需要在另一个函数中使用传递的值,则需要将其保存在某个位置,以便以后的函数仍可以访问它。

在您的示例中,您似乎为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);

关于delphi - 将Tobject传递给另一种形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12065429/

10-10 19:02