Hi Mo,
Hab versucht spin-edit etwas bessere Manieren beizubringen.
Das Problem ist jedoch folgendes:
Erhöht man den eingetragenen Wert durch Klicken auf den kleinen Pfeil bzw. durch die Nach-oben-Taste auf der Tastatur wäre standardgemäß bei 59 Schluß. Nun wollte ich jedoch, dass sobald 59 erreicht wird, der Zähler bei 0 wieder beginnt. Das Ganze soll natürlich auch in die andere Richtung funktionieren.
Daher hab ich folgenden Code beim OnChange Ereignis verwendet:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TFormGoAway.SpinMinutenChange(Sender: TObject); begin if SpinMinuten.Value= 60 then SpinMinuten.Value:=0; if SpinMinuten.Value= -1 then SpinMinuten.Value:=59; end; |
Wenn man nun den eingetragenen Wert markiert und versucht diesen zu überschreiben passiert leider (scheinbar) folgendes:
1.) Der Inhalt wird gelöscht
2.) Die Tastatureingabe wird durchgeführt
ad 1.)
Das Löschen bewirkt intern scheinbar den Wert -1. Dadurch erzeuge ich - siehe oben - den Wert 59
ad 2.)
Nun wird die Tastatureingabe (z.B. eine 3, wenn die Taste 3 gedrückt wurde) vor dem Wert 59 angezeigt. Somit also den schwachsinnigen Wert von 359
Versuche nun das Problem mit folgendem Code zu umgehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TFormGoAway.SpinMinutenChange(Sender: TObject); begin if SpinMinuten.Value= 60 then SpinMinuten.Value:=0; if SpinMinuten.Value> 60 then SpinMinuten.Value:=min; if (SpinMinuten.Value= -1) and (min =0) then SpinMinuten.Value:=59; if SpinMinuten.Value< -1 then SpinMinuten.Value:=0; min:=SpinMinuten.Value; end; |
Mit der Variable min, die ich global als integer definiert habe, merke ich mir immer den letzten Wert.
Mit diesem Code funktioniert es schon recht gut. Es gibt nur 3 Probleme:
1.) Wird 0 gelöscht, erzeugt die Procedure 59
2.) Wird ein anderer Wert markiert und gelöscht (mit der Taste entfernen), dann würde das SpinEdit-Feld leer bleiben, wenn keine weitere Eingabe erfolgt.
3.) Der Cursor wandert an die erste Stelle, sobald ein zu großer Wert eingegeben wird.
Den 2. Punkt fang ich nun ab, in dem ich auf OnExit reagiere und beim Wert -1 diesen auf 0 ändere.
Für mein erstes Problem hab ich jedoch keine Lösung.
Das 3. Problem ist mir eher wurscht
Für Lösungsvorschläge wär ich daher dankbar
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.