Вы правильно назначаете параметр Value
в событии OnGetEditMask
(при условии, что в региональных настройках используется десятичная запятая, а не десятичная точка), повторяется здесь для полноты:
procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
if (ACol = 0) or (ACol = 1) then
Value := '99,9%';
end;
Затем, чтобы преобразовать строковое содержимое ячейки в double
, необходимо удалить знак процента из строки, прежде чем передать его, например. StrToFloatDef()
Например:
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
d: double;
b: boolean;
begin
b := False;
s := StringGrid1.Cells[1, 1];
if s <> '' then
begin
if s[Length(s)] = '%' then
begin
s := copy(s, 1, Length(s)-1);
b := true;
end;
d := StrToFloatDef(s, 0.0);
if b then d := d / 100;
end;
ShowMessage(FloatToStr(d));
end;