Delphi掩码为二进制数

时间:2013-03-26 19:30:37

标签: delphi mask

我有StringGrid,并希望只有10的单元格。我尝试使用StringGridGetEditMask

procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
  Value := '0';
  if not (strToInt(Value) in [0,1]) then value := #0;
end;

但是我可以输入0到9之间的所有数字。如何过滤除0和1之外的所有数字?

2 个答案:

答案 0 :(得分:3)

出于您的意图,您需要继承TStringGrid类,并在此类子类中分配给inplace编辑器,例如这个插入类中显示的OnKeyPress事件:

type
  TStringGrid = class(Grids.TStringGrid)
  private
    procedure InplaceEditKeyPress(Sender: TObject; var Key: Char);
  protected
    function CreateEditor: TInplaceEdit; override;
  end;

implementation

{ TStringGrid }

function TStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  TMaskEdit(Result).OnKeyPress := InplaceEditKeyPress;
end;

procedure TStringGrid.InplaceEditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8, '0', '1']) then
    Key := #0;
end;

答案 1 :(得分:2)

您误解了OnGetEditMask事件。 Value不是您可以更改的新字符串,而是您应该为控件提供掩码的位置。但遗憾的是,edit masks不允许您请求的功能。