Polecam dać taką akcję na edycję tekstu w kolumnie (poniższy przykład sprawdza wszystkie kolumny, więc do twoich potrzeb musisz go jeszcze dostosować):
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
try
StrToFloat(value+'0');
except
StringGrid1.Cells[Acol, Arow]:='1,0';
end
end;
Jeśli ktoś wpisał złą liczbe, StrToFloat zakończy się wyjątkiem,
try except end;
to przejmie i jeśli był błąd, do komórki wpisze wartość domyślną (tu 1,0). Warto zwrócić uwagę na zapis (value+'0'). Po co on jest? SetEditText() jest wywoływane po każdym znaku. Więc napisanie minusa wywoływało by błąd i nie pozwalało rozpoczęcie wpisywania liczby na przykład -2. Sam znak już zmieniłby wartość na 1,0. Symbol -0 jest prawidłową liczbą. Ważnym jest też, że nie powinieneś zapamiętywać rezultatu StrToFloat w tym momencie, bo co prawda 1,2 odczyta jako 1,20 i będzie OK, to -3 odczyta jako -30 i będzie problem.
Mógłbyś ewentualnie skonstruować funkcję podwójną: jeśli bez dodawania '0' liczba jest OK to ją zapamiętaj i zakończ, jeśli nie to spróbuj dopisać '0' i sprawdź: będzie OK, to masz liczbę (jeśli nie zakończy się po pierwszym sprawdzaniu, to znaczy, że '0' nie zmieni liczby); w ostateczności weź wartość domyślną.
Przykład: [StringGrid1, Label1]
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
begin
try
StrToFloat(value);
Label1.Caption:=value;
exit;
except
end;
try
StrToFloat(value+'0');
Label1.Caption:=value+'0';
except
StringGrid1.Cells[ACol, ARow]:='1,0';
Label1.Caption:='1,0';
end;
end;