Процентная маска для некоторых ячеек TStringGrid

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

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


person Manzini    schedule 24.01.2019    source источник
comment
begin if (ACol = 0) or (Acol=1) then Value := '99,9%' ; end; Я сделал так, но все равно не работает как надо   -  person Manzini    schedule 24.01.2019


Ответы (1)


Вы правильно назначаете параметр 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;
person Tom Brunberg    schedule 25.01.2019
comment
Спасибо, чувак, одна вещь по-прежнему не работает в отношении маски ... Я бы хотел, чтобы на 60 отображалось 60,0%, этого не происходит, когда я печатаю, появляется только десятичная дробь, например 60,0 ... может улучшить Это в маске? - person Manzini; 25.01.2019
comment
Что ж, изначально вы не высказали это требование, и оно не возникает само по себе. Возможно, вы могли бы решить это с помощью события OnGetEditText. - person Tom Brunberg; 25.01.2019