AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DBEdit mitteilen das Eingabe komplett
Thema durchsuchen
Ansicht
Themen-Optionen

DBEdit mitteilen das Eingabe komplett

Ein Thema von Hausmarke · begonnen am 13. Jan 2014 · letzter Beitrag vom 13. Jan 2014
Antwort Antwort
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#1

DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 12:52
Hallo Wissende,

ich suche eine Lösung für folgenden Sachverhalt:
in einem DBEdit soll auf die Eingabe eines bestimmten Zeichens, mit dem Inhalt gerechnet werden.
Konkret, der Umsatz soll bei der Eingabe eines Vorzeichens für die Berechnung eines Saldos bereitstehen.
Das Problem aktuell ist, das wenn ich auf den Vorzeichenwechsel reagiere, der eingegebene Wert noch nicht im Datenfeld steht und ich somit ein falsches Resultat erhalte.

Die 1. Idee war, den Fokus zu wechseln, allerdings werden dadurch diverse Ereignisse ausgelöst was diesen Lösungsweg eher unattraktiv macht.
Gibt es die Möglichkeit dem DBEdit mitzuteilen das die Eingabe beendet wurde (ohne den Fokus des DBEdits zu wechseln)?


Nachtrag:
ich habe dies nun anders gelöst und die Berechnung an das OnExit des DBEdits gehangen anstatt an das OnChange des Dataset Datenfeldes.
Dennoch rein interesse halber, würde es mich interessieren ob man dem DBEdit mitteilen kann das die Eingabe fertig ist. Wenn also jemand eine Lösung hat, immer her damit.

Geändert von Hausmarke (13. Jan 2014 um 14:04 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 14:14
Du könntest z.B. auf OnKeyPress reagieren: Sobald der Anwender die Entertaste (= Chr(13)) drückt, rufst du deine Bearbeitungsmethode auf.
  Mit Zitat antworten Zitat
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#3

AW: DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 14:33
Hallo Perlsau, danke für deine Idee.

Das Aufrufen der Methode die das Feld berechnet war nicht das Problem. Vielmehr ist das Datenfeld zum Zeitpunkt der Berechnung leer, da das DBEdit die Eingabe noch nicht an das Datenfeld weitergeleitet hat.
Hierbei sollte man erwähnen das die Berechnungsmethode im Datenmodul durch ein OnChange eines Datenfeldes ausgelöst wurde.
Was jetzt jedoch durch das OnExit des DBEdits ausgelöst wird.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 14:50
Das Aufrufen der Methode die das Feld berechnet war nicht das Problem.
Hat ja auch keiner behauptet.

Vielmehr ist das Datenfeld zum Zeitpunkt der Berechnung leer, da das DBEdit die Eingabe noch nicht an das Datenfeld weitergeleitet hat. Hierbei sollte man erwähnen das die Berechnungsmethode im Datenmodul durch ein OnChange eines Datenfeldes ausgelöst wurde. Was jetzt jedoch durch das OnExit des DBEdits ausgelöst wird.
Meine DBEditfelder ändern ihre Farbe, sobald sie zur Eingabe bereit sind (Dataset.Edit) und wieder zurück, sobald die Eingabe beendet wurde (Dataset.Post).

Es geht doch offenbar darum, ein anwender- bzw. benutzerfreundliches Handling zu implementieren. Da halte ich es für etwas gewöhnungsbedürftig, eine Eingabe durch das Verlassen des Feldes abzuschließen: Der Anwender muß also irgendwo anders hinklicken, um seine Eingabe zu bestätigen und die Verarbeitung auszulösen. Dann könntest du ihm auch gleich einen Button präsentieren oder eben ganz auf diesen ganzen Firlefanz verzichten, das DBEdit beim Enter zur Eingabe vorbereiten (Dataset.Edit; DBEdit.ReadOnly := False; DBEdit.Color := clGreen; etc.) und beim Drücken der Entertaste die Eingabe auf Korrektheit überprüfen und gegebenfalls abschließen (Dataset.Post; DBEdit.ReadOnly := True; DBEdit.Color := clWhite; etc.). Ist die Eingabe nicht korrekt, machst du entweder ein Dataset.Cancel oder beläßt die Datenmenge im Editiermodus, wobei du dem Anwender natürlich seine Fehleingabe anzeigen mußt. Das wäre eine konkrete und begreifbare Vorgehensweise für den Anwender; dagegen ist "irgendwo hinklicken zu müssen" etwas vage und läßt manchen Anwender dann auch mal außerhalb des Formulars oder sonstwohin klicken, was zu Fehlverhalten der Anwendung führen könnte. Du kannst z.B. auch noch auf die Betätigung der ESC-Taste prüfen, womit der Anwender signalisieren kann, daß er die Eingabe abzubrechen wünscht. Beim Verlassen des Feldes ohne vorherige Bestätigung mit Enter verwirfst du die Eingabe (Dataset.Cancel).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#5

AW: DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 15:35
Das Problem aktuell ist, das wenn ich auf den Vorzeichenwechsel reagiere, der eingegebene Wert noch nicht im Datenfeld steht und ich somit ein falsches Resultat erhalte.
Wenn eigentlich auf die Änderung der Daten reagiert werden soll, dann reagiere auch auf deren Änderung?

Also nicht im View (DBEdit), sondern in Data (DataSet).


dagegen ist "irgendwo hinklicken zu müssen" etwas vage und läßt manchen Anwender dann auch mal außerhalb des Formulars oder sonstwohin klicken, was zu Fehlverhalten der Anwendung führen könnte.
Ich komm nicht weiter ... hier fehlt die Any-Key-Taste.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jan 2014 um 15:38 Uhr)
  Mit Zitat antworten Zitat
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#6

AW: DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 15:41
Das Aufrufen der Methode die das Feld berechnet war nicht das Problem.
Hat ja auch keiner behauptet.
Beim absenden dachte ich mir schon das diese Formulierung etwas unglücklich gewählt ist.

Du hast recht mit dem was du sagst und ich hatte es auch genau so vorher. Dennoch musste ich es anders lösen.
Da dieses Eingabefeld nicht am Ende des Formulars steht und noch Pflichtfelder folgen, sollte es in diesem Fall für den User kein Problem darstellen bzw. er sollte sich nicht animiert sehen irgend wohin zu klicken.

Während der Eingabe werden andere Felder aktualisiert sodass der User sieht wie seine Eingabe den Datensatz verändert. Nur kann es sein das die Berechnung des laufenden Saldo dazu führen, das der Datensatz gewechselt werden muss, was zwangsläufig zu einem Post führt. Bei bestehenden Datensätzen ist das kein Problem, ist der Datensatz jedoch Neu, soll er nicht zwischen drin, sondern erst bei Abschluss der Eingabe speichern.

Geändert von Hausmarke (13. Jan 2014 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#7

AW: DBEdit mitteilen das Eingabe komplett

  Alt 13. Jan 2014, 15:47
Das Problem aktuell ist, das wenn ich auf den Vorzeichenwechsel reagiere, der eingegebene Wert noch nicht im Datenfeld steht und ich somit ein falsches Resultat erhalte.
Wenn eigentlich auf die Änderung der Daten reagiert werden soll, dann reagiere auch auf deren Änderung?

Also nicht im View (DBEdit), sondern in Data (DataSet).
Dies war die vorhergehende Lösung, ich habe auf die Änderung meines Datenfeldes für den Status reagiert, allerdings war die Eingabe für das Datenfeld welches den Wert liefern sollte noch nicht abgeschlossen.
Abgeschlossen in dem Sinn, das man das DBEdit verlässt und der Wert somit ins Datenfeld des Datasets geschrieben wird.

Jetzt stoße ich praktisch die Berechnung vom View aus an nachdem der Status möglicherweise geändert wurde und mein Wert für die Berechnung auch im Datenfeld steht. Die Berechnung an sich findet dann im Dataset statt.

Geändert von Hausmarke (13. Jan 2014 um 15:51 Uhr)
  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 09:41 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