我还在D2007上,需要创建一个支持unicode的虚拟键盘。所以我使用TMS的unicode按钮来模拟按键,但我想避免的是必须分配
mmo.Lines.Text := mmo.Lines.Text + Button1.Caption;
~50次。必须有一种更好的方法一次发送一个字符到备忘录。有没有办法在Object Inspector中使用Tag属性并从那里分配值,或者如何?
你会怎么做?
答案 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,它是否显示你按下的按钮的标题?我看到你现在正在遍历所有按钮。如果您想要的只是标题,那么代码似乎应该解决它。
杰克