AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ereignis wenn Eingabe in einem StringGrid beendet, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignis wenn Eingabe in einem StringGrid beendet, wie?

Ein Thema von Takeshi · begonnen am 30. Mai 2006 · letzter Beitrag vom 30. Mai 2006
Antwort Antwort
Takeshi

Registriert seit: 17. Aug 2003
Ort: Mülheim Ruhr
26 Beiträge
 
#1

Ereignis wenn Eingabe in einem StringGrid beendet, wie?

  Alt 30. Mai 2006, 00:37
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
Christoph Friedrich
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?

  Alt 30. Mai 2006, 01:21
Zitat von Takeshi:
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?
Da gibts einiges. 8) Vermutlich soll das so was wie Excel, mit "richtiger" DB werden ? Ich sags Dir gleich : das wird nicht einfach ! Du mußt das Grid zellenweise behandeln. Z.B. so :

Delphi-Quellcode:
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
...
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?

  Alt 30. Mai 2006, 05:50
Hallo Christoph,

hier noch eine Alternative:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Takeshi

Registriert seit: 17. Aug 2003
Ort: Mülheim Ruhr
26 Beiträge
 
#4

Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?

  Alt 30. Mai 2006, 10:49
thx @ Hansa. Sind sicherlich ne Menge interessante Hinweise
thx @ marabu. Mitif not TStringGrid(Sender).EditorMode im SetEditText Ereignis hab ich ja zunächst eigentlich genau das was ich wollte. Prima
Christoph Friedrich
  Mit Zitat antworten Zitat
Takeshi

Registriert seit: 17. Aug 2003
Ort: Mülheim Ruhr
26 Beiträge
 
#5

Re: Ereignis wenn Eingabe in einem StringGrid beendet, wie?

  Alt 30. Mai 2006, 14:10
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:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
if TStringGrid(Sender).EditorMode then
  CanSelect:=false;
Dann muss der Benutzer erst Enter drücken, die Eingabe damit beenden und mit
Delphi-Quellcode:
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;
kann man dann darauf reagieren.
Ich hoffe das klappt jetzt auch endlich^^
Christoph Friedrich
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr.
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