Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Stringgrid OnCellChange ? (https://www.delphipraxis.net/179200-stringgrid-oncellchange.html)

Volker Z. 20. Feb 2014 00:23

AW: Stringgrid OnCellChange ?
 
Hallo,

Zitat:

Allerdings ist da noch eine Sache nicht so optimal. Ich muss ja die Differenz der bestimmten Zellen eventuell auswerten.
Differenz der "bestimmten" Zellen "eventuell" auswerten? Wie, wo, was jetzt? :gruebel:

Was tut denn
Delphi-Quellcode:
procedure TForm1.sg1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
begin
  if Value <> '' then
    NeuerWert := Value
  else
    NeuerWert := '0';

  lblDiffWert.Caption := IntToStr (StrToInt (NeuerWert) - StrToInt (AlterWert))
end;
nicht?

Gruß

Hansa 25. Feb 2014 17:45

AW: Stringgrid OnCellChange ?
 
Im SetEditText die Zelle auszuwerten, das geht ja schon. Nur : das würde bedeuten, bei jedem Tastendruck ändert sich der Bildschirm. Habe ich 42000 eingegeben und ändere ich das gerne auf 52000 ab, dann brauche ich 15 mal einen Tastendruck und 15 mal ändert sich die Zelle, obwohl lediglich EINE einzige falsche Zahl korrigiert werden soll. Das finde ich 1 übertrieben und macht 2. den Bildschirm ziemlich unruhig. Kommt dann noch datenbank ins Spiel dann kommen noch 15 DB-Zugriffe dazu. Das Ganze wäre besser dann durchzuführen, wenn der Editiervorgang beendet ist, z.B. beim drücken von RETURN. Wäre auch kein Problem, aber wehe wenn einer dann mittendrin auf andere Zelle klickt.

On SelectCell liefert z.B. nur nächste Zelle. Nützt also auch nichts. Und mir fällt nun nichts ein, wo man da eingreifen könnte. :shock:

Volker Z. 25. Feb 2014 19:34

AW: Stringgrid OnCellChange ?
 
Hallo,

Zitat:

[...] Das Ganze wäre besser dann durchzuführen, wenn der Editiervorgang beendet ist [...]
Würde ich auch so sehen - und wohl auch so machen -, aber Dein Problem erschließt sich mir nicht so ganz.

Zitat:

[...] Und mir fällt nun nichts ein, wo man da eingreifen könnte
Naja, wie wäre es denn mit OnDrawCell? Den entsprechenden Zustand vorher merken und beim Neuzeichnen aktualisieren:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if FModified and (ACol = FSaveCol) and (ARow = FSaveRow) then
    begin
      StringGrid1.Cells [ACol, ARow] := IntToStr (StrToInt (StringGrid1.Cells [ACol, ARow]) - StrToInt (FSaveValue));
      FModified := False
    end
end;

procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: string);
begin
  FSaveCol := ACol;
  FSaveRow := ARow;
  FSaveValue := Value
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string);
begin
  FModified := FSaveValue <> Value
end;
Oder verstehe ich da was falsch?

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz