Маска в процентах для некоторых ячеек TStringGrid - PullRequest
0 голосов
/ 24 января 2019

У меня есть TStringGrid, где я буду вводить в каждом столбце значение, и мне нужна маска для отображения значения в процентах. Я новичок в Delphi, но я видел, что есть метод OnGetEditMask, но я не знаюкак создать маску для процента ... тогда я иду манипулировать этим значением в переменную типа Double.Пример я ввожу 5,4 и с маской получаю 5,4%

Тогда как мне получить данные списка в Double?

1 Ответ

0 голосов
/ 25 января 2019

Вы правильно назначаете параметр 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;
...