AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TNumberBox Min/Max-Eingabeproblem

Ein Thema von idontknow · begonnen am 24. Nov 2021 · letzter Beitrag vom 17. Dez 2021
Antwort Antwort
idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#1

TNumberBox Min/Max-Eingabeproblem

  Alt 24. Nov 2021, 09:24
Moin,

ich steh gerade auf dem Schlauch: Ich würde gern eine TNumberbox zur Zahleneingabe verwenden und diese gern auf einen Zahlenraum von Min=5..Max=90 beschränken (Mal so als Beispiel).

Funktioniert im Prinzip wunderbar, solange ich nur die Up/Down-Buttons benutze.

Wenn ich nun aber direkt z.B. 45 eingeben möchte, führt schon die Eingabe der 4 dazu, das die untere Grenze verletzt wird und somit durch 5 ersetzt wird. Mit anderen Worten: Zahlen zwischen 10 und 49 kann ich so nicht direkt eingeben.

Mein Wunschverhalten wäre: Die Up/Down-Buttons sind begrenzt, es kann jedoch jede Zahl manuell eingegeben werden, hierbei werden die Grenzen z.B. erst bei OnExit geprüft und ggf. die Eingabe begrenzt.

Hat jemand eine Idee, wie ich das mit überschaubarem Aufwand realisieren kann?

Schon mal vielen Dank.
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TNumberBox Min/Max-Eingabeproblem

  Alt 24. Nov 2021, 09:36
Hallo, ich kenne diese Komponente noch nicht aber aus dem Bauch heraus würde ich eine eigene Prüfung einbinden.
Also min max so einstellen das alles angenommen werden kann.
Da ich nicht weiß wie deine GUI mit der Komponente aussieht und wann du dir erwartet hast das etwas passieren soll gebe ich hier ein mini beispiel.
Einen Knopf "Go." platzieren und dem OnClick davon dann deine Edit felder prüfen lassen, wenn alles gut ist "machWas()" wenn was aus der reihe hüpft "rotEinfärbenUndFocus()"
Ein automatische prüfung ohne Knopf, da würde ich mal gucken ob Komponente ein "OnLeave" oder "OnExit" hat um mich da reinzuklinken.
Gruß vom KodeZwerg

Geändert von KodeZwerg (24. Nov 2021 um 09:40 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
492 Beiträge
 
Delphi 12 Athens
 
#3

AW: TNumberBox Min/Max-Eingabeproblem

  Alt 24. Nov 2021, 09:52
Ich habe so was ähnliches für ein Datumsfeld umgesetzt. Die Prüfung erfolgt aber nicht bei der Eingabe, sondern über eine Funktion der Eingabekomponente.
Die wird erst aufgerufen, wenn z.B. Speichern angeklickt wird oder auf eine andere Eingabezeile gewechselt wird. Man kann es auch im OnExit machen, sollte aber dann bei Modalresult = mrCancel die Prüfung übergehen.

Konkret habe ich eine Prüfung eingebaut, die beim MouseEnter auf den Speichernschalter im Hint das Ergebnis der Prüfung anzeigt und beim Klicken des Schalters eine Messagebox zeigt und die fehlerhafte Eingabezeile fokussiert.
  Mit Zitat antworten Zitat
idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TNumberBox Min/Max-Eingabeproblem

  Alt 24. Nov 2021, 10:27
Die Wertbegrenzung durch die Up/Down-Buttons würde ich ja gern erhalten.

Mir scheint die ganze Min/Max-Implementation sinnlos zu sein.

Um meine eigene Wert-Begrenzung einzubauen, müsste ich wissen, ob der Benutzer auf einen Up/Down-Button gedrückt hat.
Leider liefert die Komponente aber auch kein OnUpDownButtonPressed-Ereignis...

Da hilft wohl nur, eine eigene Komponente von TNumberBox abzuleiten und lange rumzufummeln, um diese Basisfunktionalität zu erreichen?
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.609 Beiträge
 
Delphi 12 Athens
 
#5

AW: TNumberBox Min/Max-Eingabeproblem

  Alt 24. Nov 2021, 10:41
Das ist definitiv ein nicht zu erwartendes und auch nicht sinnvolles Verhalten. Bitte mach dafür doch einen QP-Report auf, damit das behoben werden kann. Die Min/Max-Überprüfung darf einfach nicht nach jedem Tastendruck erfolgen, sondern erst bei Enter oder Verlassen des Controls.

Als Workaround kannst du das AcceptExpressions einschalten und deine Eingabe mit einem + beginnen. Für die Praxis taugt das allerdings nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.667 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: TNumberBox Min/Max-Eingabeproblem

  Alt 24. Nov 2021, 11:02
Ich würde da die Eingabeprüfung generell erstmal ausschalten und sie verzögert durchführen lassen. Entweder erst, wenn der User OK (oder Save oder was auch immer) klickt, oder durch einen Timer gesteuert. Letzteres ist dabei meine bevorzugte Methode:

Es gibt einen Timer mit z.B. 200 ms Laufzeit. Der wird bei jedem OnChange-Event zuerst gestoppt und dann wieder gestartet, d.h. jeder Tastendruck startet die Zeit wieder von vorne. Im OnTimer-Event wird dann die Eingabeprüfung durchgeführt und falls sie fehlschägt dem User "irgendwie" mitgeteilt. Das "irgendwie" könnte z.B ein Label mit einer Fehlermeldung einblenden, das wieder verschwindet, wenn die Eingabe OK ist.

Wenn ich so drüber nachdenke: Eigentlich braucht man den Timer gar nicht. Man kann die Prüfung sofort im OnChange Event durchführen, solange diese Prüfung die Eingabe nicht stört. Der Timer hätte nur den Vorteil, dass der User nicht unnötig eine Fehlermeldung angezeigt bekommt, wenn er mit der Eingabe noch gar nicht fertig ist.
Thomas Mueller
  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 01:18 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