【问题标题】:Virtual keyboard - best way to send button clicks to memo?虚拟键盘 - 将按钮点击发送到备忘录的最佳方式?
【发布时间】:2009-02-08 05:35:46
【问题描述】:

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

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

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

你会怎么做?

【问题讨论】:

    标签: delphi


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      您可以通过调整您使用的按钮的属性来获得相同的结果。我不知道 tms 按钮,但你可以尝试将 tabstop 设置为 false。

      【讨论】:

        【解决方案3】:

        我可能有点老了,我住在乡下,所以我可能只是落后于时代。我不知道“snarg”是指“我还是没听懂”还是“对不起,我发现了我的错误”。如果这意味着后者,那么 Rob Kennedy 的这个建议似乎是正确的:

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

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

        杰克

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-31
          • 1970-01-01
          • 2012-07-21
          • 2018-05-31
          • 2023-03-10
          • 2017-12-17
          相关资源
          最近更新 更多