AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Auf Änderungen in TEdit reagieren

Ein Thema von Swann · begonnen am 19. Nov 2014 · letzter Beitrag vom 19. Nov 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Auf Änderungen in TEdit reagieren

  Alt 19. Nov 2014, 15:28
TEdit (XE2) hat ein AsInteger?
Glaub ich nicht.
Und seb´lbst wenn, dann wäre es falsch implementiert, wenn es bei Zuweisung/Änderung kein OnChange auslöst.


Zitat:
Gibt es für diese Fragestellung ein Standardevent, das ich nicht kenne? Oder was ist die beste Lösung in diesem Fall?
Beschreib doch mal, wann das Event auslössen soll,
dann findet sich bestimmt etwas.

Da du niemals wissen kannst, wann ein Benutzer mit seiner Eingabe fertig ist, ...
Jupp.

OnChange -> es wurde grade etwas geändert (ob Eingabe fertig, ist dabei egal)
Darum gibt es neben StrToInt z.B. auch TryStrToInt und StrToIntDef.

OnExit -> fermutlich fertig, da Benutzer das Edit verlässt.
PS: Beim Klick auf Menüs, das [X] und ToolButtons, welche keinen Eingabefokus bekommen, wird dort niemals OnExit ausgelöst, da das Edit den Fokus nicht verliert.

Man kann natürlich nach OnChange noch etwas warten und erst dann reagieren, aber wenn der Benutzer ein bissl länger braucht, weil er z.B. noch bissl überlegen muß, muß er auch da noch nicht fertig sein.
Die WebCam anzapfen hilft auch nicht, da der Benutzer auch mal kurz weggehen kann, weil er was nachgucken muß, bevor er weitertippt.
usw.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Swann

Registriert seit: 19. Nov 2014
3 Beiträge
 
#2

AW: Auf Änderungen in TEdit reagieren

  Alt 19. Nov 2014, 16:34
Hallo ihr zwei,

vielen Dank schonmal für die raschen Antworten!

Wenn du beim OnExit bleibst, müsstest du nach dem automatischen Füllen des 2. Editfeldes dessen OnExit-Code aufrufen.
Es ist klar, dass das so geht. Allerdings wird der Code dadurch relativ unübersichtlich, und man muss gut aufpassen, dass man auch die OnExit-Methoden für wirklich alle Felder, die sich ändern können, aufruft. Daher hatte ich auf eine Möglichkeit gehofft, das Feld selbst überwachen zu lassen, wann es neuen Inhalt bekommt.


TEdit (XE2) hat ein AsInteger?
Glaub ich nicht.
Und seb´lbst wenn, dann wäre es falsch implementiert, wenn es bei Zuweisung/Änderung kein OnChange auslöst.
Ok, du hast in beiden Punkten recht. Zum einen handelt es sich nicht um ein einfaches TEdit, wie ich fälschlicherweise behauptet habe, sondern um eine Ableitung von TCustomEdit (nicht von mir geschrieben). Zum anderen habe ich da wohl nicht richtig aufgepasst, denn bei neuerlichem Testen merke ich nun, dass OnChange tatsächlich ausgelöst wird... Entschuldige bitte, mein Fehler.

Um mal ein etwas konkreteres Beispiel zu bringen: Edit1 dient dazu, die Stückzahl einer zu kaufenden Ware aufzunehmen, Edit2 den Preis pro Stück, Edit3 die Gesamtkosten, Edit4 eventuelle Rabatte und Edit5 den Endpreis (=Gesamtkosten - Rabatt). Ich habe also direkte Abhängigkeiten
Edit1 -> Edit3,
Edit2 -> Edit3,
Edit3 -> Edit5,
Edit4 -> Edit5.

Gleichzeitig gibt es eine Liste bereits getätigter Käufe. Wenn man dort auf einen Eintrag klickt, sollen die entsprechende Stückzahl und der entsprechende Preis in Edit1 und Edit2 gefüllt werden und daraus automatisch der Inhalt von Edit3 berechnet werden. OnChange tut in diesem Fall eigentlich schon das richtige. Ich hätte eben gern ein Eierlegende-Wollmilchsau-Event, das sich bei solchen automatischen Füllungen wie OnChange verhält, aber andererseits bei Benutzereingaben die Rechnungen erst durchführt, wenn der Nutzer auf Enter drückt oder das Feld sonstwie aus dem Fokus nimmt.

Viele Grüße,
Swann
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Auf Änderungen in TEdit reagieren

  Alt 19. Nov 2014, 16:53
Es ist klar, dass das so geht. Allerdings wird der Code dadurch relativ unübersichtlich, und man muss gut aufpassen, dass man auch die OnExit-Methoden für wirklich alle Felder, die sich ändern können, aufruft. Daher hatte ich auf eine Möglichkeit gehofft, das Feld selbst überwachen zu lassen, wann es neuen Inhalt bekommt.
Das tun sie doch mit dem OnChange-Ereignis, das prompt reagiert, wenn es neuen Inhalt bekommt. Fertige Programme gibt es dagegen noch nicht als Komponenten. Das mußt du schon noch selber programmieren. Du kannst z.B. OnKeyUp auswerten und z.B. das Betätigen der Entertaste = Chr(13) als Eingabe-Ende werten, was ja den allermeisten PC-Anwendern nicht neu oder gar fremd sein dürfte. Beim Programmseitigen Ändern der Anzeige mußt du dann dieselbe Procedure aufrufen wie beim Betätigen der Enter-Taste.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:51 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