![]() |
Ereignis wenn Eingabe in einem StringGrid beendet, wie?
Hallo!
Habe dazu leider nichts in im Forum oder irgendner FAQ gefunden. Ich gebe das Ergebnis eines MySQL Querys in einem StringGrid aus. Man kann die Zellen bearbeiten. Wenn das erfolgt möchte ich gerne Die Änderung mittels Query in die Datenbank eingeben und das StringGrid dann aktualisieren. OnSetEditText ist ja schon ganz gut aber es wird ja auch jedes Mal ausgeführt während der Benutzer noch etwas in der Zelle eintippt. Ich möchte aber gerne erst das Query starten wenn der Benutzer fertig ist mit seiner Eingabe. Jemand eine Idee, schlaue Anmerkung oder Alternative dazu? Danke schonmal, Christoph |
Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?
Zitat:
Delphi-Quellcode:
Bei mir war noch gefordert, einiges an diversem optischen Schnickschnack einzubauen. In Abhängigkeit von verschiedenen Zell-Werten einzelne Zellen zu sperren. Je nach Spalte auch Funktionstasten zuzulassen usw. Prinzipiell gibt es dazu 2 grundsätzliche Möglichkeiten : du schreibst die gewünschten Eigenschaften in die Zelle selbst und wertest das dann aus. D.h. "1" : Eingabe erlaubt und "0" : keine Eingabe. Erfordert intensive Nutzung von OnDrawCell, denn die 1/0 soll man ja nicht sehen. Daß OnSelectCell und OnKeypress verwendet werden müssen, dürfte wohl klar sein. Sind viele verschiedene Eigenschaften gefordert läuft das in Richtung Bitmuster. Eine Alternative wäre noch die Eigenschaft "Objects" des Stringgrids. So wurde das hier letztenendes auch gemacht. Jede Zelle hat einen eigenen Record, in dem die gewünschten Eigenschaften drinstehen.
procedure Tfrm.sgKeyPress(Sender: TObject; var Key: Char);
begin inherited; with Sender as TStringGrid do begin if Col = EingCol then begin case key of #13 : begin ... |
Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?
Hallo Christoph,
hier noch eine Alternative:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.StringGridSetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String); begin with Sender as TStringGrid do if EditorMode then Caption := 'still editing ...' else Caption := Format('%d / %d : "%s"', [ACol, ARow, Value]); end; |
Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?
thx @ Hansa. Sind sicherlich ne Menge interessante Hinweise ;-)
thx @ marabu. Mit
Delphi-Quellcode:
im SetEditText Ereignis hab ich ja zunächst eigentlich genau das was ich wollte. Prima :-)
if not TStringGrid(Sender).EditorMode
|
Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?
Sollte man noch erwähnen:
Wenn der Benutzer während der Eingabe eine andere Zelle markiert dann wird ja kein SetEditText ausgelöst. Eine Lösung wäre das selektieren einer anderen Zelle zu unterbinden während der Benutzer noch den Wert verändert:
Delphi-Quellcode:
Dann muss der Benutzer erst Enter drücken, die Eingabe damit beenden und mit
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean); begin if TStringGrid(Sender).EditorMode then CanSelect:=false;
Delphi-Quellcode:
kann man dann darauf reagieren.
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String); begin if not TStringGrid(Sender).EditorMode then ShowMessage(Format('%d / %d : "%s"', [ACol, ARow, Value])); end; Ich hoffe das klappt jetzt auch endlich^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 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 by Thomas Breitkreuz