我正在努力让 FireMonkey TEdit 嵌套在 FireMonkey TPopup 中以接收键盘输入。桌面和移动项目都会发生,尽管我对后者感兴趣:

  • 创建一个新的 FMX 项目。
  • TButtonTPopup 添加到表单中,并将 TEdit 添加到 TPopup
  • 将弹出窗口的 Placement 属性设置为 plCenter ,将其 PlacementTarget 设置为 Button1
  • 通过将弹出窗口的 OnClick 属性设置为 IsOpen 来处理按钮的 True 事件。
  • 运行项目,单击/点击按钮,并尝试在编辑控件中输入文本。

  • 有任何想法吗?正确答案当然可能是:不支持键盘输入,但 documentation 不支持。

    最佳答案

    键盘输入似乎不适用于 TPopup。
    一个简单的解决方案是使用 TForm 作为弹出表单:

    unit Popup;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, FMX.Edit;
    
    type
      TfmPopup = class(TForm)
        Edit1: TEdit;
        Panel1: TPanel;
        procedure FormDeactivate(Sender: TObject);
        procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
      private
      protected
      public
      end;
    
    var
      fmPopup: TfmPopup;
    
    implementation
    
    {$R *.fmx}
    
    procedure TfmPopup.FormDeactivate(Sender: TObject);
    begin
      Close;
    end;
    
    procedure TfmPopup.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
    begin
      if Key = vkEscape then begin
        Close;
      end;
    end;
    
    end.
    

    表格资源:
    object fmPopup: TfmPopup
      Left = 0
      Top = 0
      BorderStyle = None
      Caption = 'Form1'
      ClientHeight = 94
      ClientWidth = 142
      FormFactor.Width = 320
      FormFactor.Height = 480
      FormFactor.Devices = [Desktop, iPhone, iPad]
      OnDeactivate = FormDeactivate
      OnKeyDown = FormKeyDown
      DesignerMobile = False
      DesignerWidth = 0
      DesignerHeight = 0
      DesignerDeviceName = ''
      DesignerOrientation = 0
      DesignerOSVersion = ''
      object Panel1: TPanel
        Align = Client
        Height = 94.000000000000000000
        Width = 142.000000000000000000
        TabOrder = 1
        object Edit1: TEdit
          Touch.InteractiveGestures = [LongTap, DoubleTap]
          TabOrder = 1
          Position.X = 20.000000000000000000
          Position.Y = 32.000000000000000000
          Width = 100.000000000000000000
          Height = 22.000000000000000000
        end
      end
    end
    

    当然你可以改进这个简单的例子:
    不要将 TEdit 放在这个表单上,而是继承这个表单并将编辑放在那里。
    例如。:
    TfmMyPopup = class(TfmPopup)
      Edit1: TEdit;
    private
    protected
    public
    end;
    

    使用 TPopup 等一些功能改进 TfmPopup 的基类:
    例如。放置。
    愿您可以在 TfmPopup 中使用从未显示的 TPopup 来使用 TPopup 的放置例程,而无需重写此代码。

    关于delphi - 允许键盘输入到嵌套在 FireMonkey TPopup 中的 FireMonkey TEdit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20890373/

    10-10 22:25