虚拟键盘 - 将按钮点击发送到备忘录的最佳方式?

时间:2009-02-08 05:35:46

标签: delphi

我还在D2007上,需要创建一个支持unicode的虚拟键盘。所以我使用TMS的unicode按钮来模拟按键,但我想避免的是必须分配

mmo.Lines.Text := mmo.Lines.Text + Button1.Caption;

~50次。必须有一种更好的方法一次发送一个字符到备忘录。有没有办法在Object Inspector中使用Tag属性并从那里分配值,或者如何?

你会怎么做?

3 个答案:

答案 0 :(得分:8)

为所有按钮分配相同的OnClick事件处理程序。不像上面使用Button1那样按名称引用每个按钮,而是使用Sender参数。这就是它的用途。它告诉您触发了哪个控件的事件以使处理程序运行。

Sender具有静态类型TObject。单击其中一个按钮时,Sender将具有运行时类型TButton或您正在使用的任何实际类。要使代码编译,您需要进行类型转换。例如:

procedure TKeyboardForm.ButtonClick(Sender: TObject);
begin
  mmo.Lines.Text := mmo.Lines.Text + (Sender as TButton).Caption;
end;

答案 1 :(得分:1)

某种类型的按钮可能是按钮的更好选择,因为它们不会抓住焦点。然后闪烁的光标将保留在备忘录中。

通过tweeking您使用的按钮的属性,您可能会得到相同的结果。我不知道tms按钮,但您可以尝试将tabstop设置为false。

答案 2 :(得分:0)

我可能有点老了,我住在乡下,所以我可能只是落后于时代。我不知道“snarg”是否意味着“我还没有得到它”或者“对不起,我发现了我的错误”。关于它意味着后者的可能性,似乎Rob Kennedy提出的这个建议是正确的:

procedure TKeyboardForm.ButtonClick(Sender: TObject);
begin
  mmo.Lines.Text := mmo.Lines.Text + (Sender as TButton).Caption;
end;  

如果你在事件处理程序内的行上放置一个断点并评估TButton(发件人).Caption,它是否显示你按下的按钮的标题?我看到你现在正在遍历所有按钮。如果您想要的只是标题,那么代码似乎应该解决它。

杰克