You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.1 FMX StringGrid如何设置列KeyboardType为数字类型(Android端)

Delphi 11.1 FireMonkey Android 平台设置StringGrid指定列弹出数字键盘实现方法

FireMonkey自带的TStringGrid列类默认没有直接暴露KeyboardType属性,可通过以下两种方式实现指定列弹出数字软键盘,均在Android平台实测可用:

方法一:通过OnGetEdit事件快速实现(无需自定义类)

该方法不需要额外写自定义组件,适合快速修改现有项目:

  • 选中窗体上的目标StringGrid控件,在事件面板找到OnGetEdit事件,双击生成事件处理方法
  • 在事件中判断当前编辑的列序号,给目标列的编辑控件设置数字键盘类型,非目标列恢复默认键盘(避免控件复用导致的键盘类型错乱)
  • 参考代码如下:
procedure TMainForm.OrderGridGetEdit(Sender: TObject; ACol, ARow: Integer;
  AControl: TStyledControl);
begin
  // 示例:设置第3列(列索引从0开始计数,这里索引2对应界面上第三列)为数字键盘
  if ACol = 2 then
  begin
    if AControl is TEdit then
    begin
      // 纯数字输入选TVirtualKeyboardType.Number,需要输入小数点/负号选NumbersAndPunctuation
      TEdit(AControl).KeyboardType := TVirtualKeyboardType.Number;
    end;
  end
  else
  begin
    // 其余列恢复默认文本键盘
    if AControl is TEdit then
      TEdit(AControl).KeyboardType := TVirtualKeyboardType.Default;
  end;
end;

注意:FireMonkey的StringGrid会复用单元格编辑控件,必须给非目标列重置键盘类型,否则编辑其他列时会继承之前设置的数字键盘,出现异常。

方法二:自定义可复用数字列类

如果项目里多处需要数字输入的StringGrid列,可以自定义列类,避免重复写事件判断:

  • 先定义继承自TStringColumn的数字列类,重写创建单元格控件的方法,初始化时直接指定键盘类型
type
  TNumberStringColumn = class(TStringColumn)
  protected
    function CreateCellControl: TStyledControl; override;
  end;

function TNumberStringColumn.CreateCellControl: TStyledControl;
var
  LEditor: TEdit;
begin
  Result := inherited;
  if Result is TEdit then
  begin
    LEditor := TEdit(Result);
    LEditor.KeyboardType := TVirtualKeyboardType.NumbersAndPunctuation;
    // 可根据需求加输入过滤,比如限制只能输入数字和小数点
    LEditor.FilterChar := '0123456789.';
  end;
end;
  • 在窗体初始化阶段,把StringGrid中需要设置数字键盘的列替换为自定义的数字列即可:
procedure TMainForm.FormCreate(Sender: TObject);
var
  LNumCol: TNumberStringColumn;
begin
  LNumCol := TNumberStringColumn.Create(OrderGrid);
  LNumCol.Header := '金额'; // 替换为原列的标题、宽度等属性
  LNumCol.Width := 120;
  // 替换目标位置的列,示例为替换索引2的列
  OrderGrid.Columns[2] := LNumCol;
end;
  • 以上两种方法都不需要额外调用Android原生API,Delphi FireMonkey框架会自动将KeyboardType属性映射为Android原生EditText的inputType属性,自动弹出对应类型的软键盘。
  • 如果测试时发现键盘类型未生效,优先检查列索引是否填写正确,是否有其他业务逻辑在编辑触发时重新修改了编辑控件的KeyboardType属性。

内容的提问来源于stack exchange,提问作者user741461

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:54:36