StringGrid numeryczny

0

Mam taki problem: próbuję zrobić stringgrida numerycznego czyli, aby nie można było wpisywać literek w komórki, naciśnięcie "-" powodowałó zmianę znaku zawartości komórki, a , lub . wstawiało przecinek - z tym że tylko jeden możliwy na komórkę. kod źródłowy wygląda w ten sposób:

procedure TForm1.DaneKeyPress(Sender: TObject; var Key: Char);
var p:Extended; //(TFloat)

begin
case Key of
  '0'..'9' : ;
  'A'..'z' :Key:=#0;
  '='      :Key:=#0;
  '+'      :Key:=#0;
  '.',','  :  if  pos(DecimalSeparator,dane.cells[dane.row,dane.col])=0
              then  Key:=DecimalSeparator
              else  Key:=#0;
  '-' : begin Key:=#0; p:=strToFloat(dane.Cells[dane.row,dane.col]); p:=p*(-1);
                        dane.cells[dane.row,dane.col]:=FloatToStr(p);
           end;

  #8        : ;

Program wykonuję to co zakładam tylko w komórce [1,1]. nie mam pojęcia o co chodzi i dlaczego tak się dzieje. za Ewentualną pomoc serdecznie dziękuję.

0

Przepraszam wszystkich, jedank sie uporałem z tym problemem. Wydawałó mi się, że to będzie za bardzo na około, ale działa... a to najważniejsze. Pozdrawiam wszystkich programistów i tych co programują:) 3majta się i kombinujta..jak koniec pod górę:).

P.S. teraz kod wygląda tak:

procedure TForm1.DaneKeyPress(Sender: TObject; var Key: Char);
var p:Extended; //(TFloat)

begin
case Key of
  '0'..'9' : ;
  'A'..'z' :Key:=#0;
  '='      :Key:=#0;
  '+'      :Key:=#0;
  '.',','  :  begin
                Zaznaczenie:=dane.Selection;
                for wiersz:=Zaznaczenie.Left to Zaznaczenie.Right do
                begin
                for kolumna:=Zaznaczenie.Top to Zaznaczenie.Bottom do
                begin
                if  pos(DecimalSeparator,dane.cells[wiersz,kolumna])=0
                then  Key:=DecimalSeparator
                else  Key:=#0;
                end;
                end;

              end;
  '-' : begin Key:=#0;
                Zaznaczenie:=dane.Selection;
                for wiersz:=Zaznaczenie.Left to Zaznaczenie.Right do
                begin
                for kolumna:=Zaznaczenie.Top to Zaznaczenie.Bottom do
                begin
                p:=strToFloat(dane.Cells[wiersz,kolumna]); p:=p*(-1);
                        dane.cells[wiersz,kolumna]:=FloatToStr(p);
           end;end;end;

  #8        : ;

end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1