![]() |
Delphi-Version: 5
Stringgrid OnCellChange ?
Hallo,
ich bräuchte den Wert einer Stringgid-Zelle, bevor sie geändert wird und danach. Z.B. Zelle hat den Wert 5. Den ändere ich jetzt auf 7. Gut, den geänderten Wert habe ich ja direkt in der Zelle drin stehen, aber woher weiss ich jetzt, dass der vorher 5 war ? :shock: Weitere Frage ist dann noch : solange der User die zelle editiert braucht ja nichts gemacht zu werden, erst beim verlassen der Zelle. Da wäre jetzt so etwas in Richtung OnCellExit nützlich. Geht das mit dem normalen TStringgrid schon irgendwie, oder muss ich das nachrüsten ? Wenn ja wie am Besten ? |
AW: Stringgrid OnCellChange ?
In OnEnter und OnSelectCell den "alten" Inhalt in einer Variable speichern (aka dein selbstgebautes OnCellEnter)
und im OnSelectCell, sowie im OnExit, kann kann der alte mit dem neuen Wert verglichen werden. (aka OnCellExit) Eventuell noch OnRowMoved und OnColMoved auch mit als OnCellExit und danach als OnCellEnter beachten, falls Zeilen/Spalten verschoben werden dürfen. |
AW: Stringgrid OnCellChange ?
Geht nicht, das Stringgrid wird ja nicht verlassen, noch "betreten". Deshalb scheiden OnEnter und OnExit des Grids aus.
|
AW: Stringgrid OnCellChange ?
Hallo,
du könntest OnSelectCell nutzen, was ausgelöst wird, bevor die Zelle ausgewählt wird. (laut Hilfe) So könntest du deinen alten Wert erhalten Habs getestet - bevor man einen Wert in der Zelle ändern kann, wird OnSelectCell ausgelöst und spuckt noch den alten Wert der Zelle aus |
AW: Stringgrid OnCellChange ?
Hallo,
Zitat:
Gruß |
AW: Stringgrid OnCellChange ?
Zitat:
|
AW: Stringgrid OnCellChange ?
Hallo,
OnGetEditText wird getriggert, wenn in Options das Flag goEditing gesetzt ist (laut TE kann der Anwender editieren). Hat mit der Mask nichts zu tun Gruß |
AW: Stringgrid OnCellChange ?
Alleine mit den Events
Delphi-Quellcode:
und
GetEditText
Delphi-Quellcode:
kann man genau bestimmen, wann eine Zelle editiert wird und wann diese Bearbeitung abgeschlossen ist.
SetEditText
Die anderen Events sind dazu überflüssig. |
AW: Stringgrid OnCellChange ?
Hallo,
Zitat:
Delphi-Quellcode:
kann man genau bestimmen, wenn eine Zelle in den Editiermodus wechselt (das wird nur einmal getriggert, bevor der Inplace-Editor angezeigt wird),
GetEditText
Delphi-Quellcode:
hingegen wird bei jeder Änderung (bei jedem Tastenanschlag) und beim abschließenden Return, beim Klick auf eine andere Zelle etc. getriggert - also u. U. sehr häufig.
SetEditText
Zitat:
Zitat:
Delphi-Quellcode:
und entsprechend merken
GetEditText
Zitat:
Gruß |
AW: Stringgrid OnCellChange ?
Liste der Anhänge anzeigen (Anzahl: 1)
Thx, scheint wirklich so in der Richtung zu gehen. Allerdings ist da noch eine Sache nicht so optimal. Ich muss ja die Differenz der bestimmten Zellen eventuell auswerten.
Zitat:
|
AW: Stringgrid OnCellChange ?
Hallo,
Zitat:
Was tut denn
Delphi-Quellcode:
nicht?
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; Gruß |
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: |
AW: Stringgrid OnCellChange ?
Hallo,
Zitat:
Zitat:
Delphi-Quellcode:
Oder verstehe ich da was falsch?
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; Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz