2013-03-26 3 views
2

У меня есть StringGrid и хочу иметь в ней только ячейки 1 или 0. Я пытаюсь использовать StringGridGetEditMaskМаска Delphi для двоичных чисел

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?

+1

Я не получу ваш код. Если вы присваиваете значение ''0''' Value', то, безусловно, 'StrToInt (Value)' будет равно '0'? –

+0

Я конвертирую значение в целое число и сравниваю с 0 и 1. Если значение не равно 0 или нет 1, значение будет равно пустому символу. – Vlad

ответ

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; 
+0

Конечно, вы предпочитаете использовать 'CharInSet' вместо этого оператора' in', как предупреждает Unicode Delphi, но я не использовал его здесь, так как вы не сообщили нам свою версию Delphi. – TLama

2

Вы неправильно поняли событие OnGetEditMask. Value - это не новая строка, которую вы можете изменить, но место, где вы должны дать управление маске. К сожалению, однако, edit masks не разрешает запрашиваемые функции.

Смежные вопросы