AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SpinEdit MinValue

Ein Thema von thomas2009 · begonnen am 11. Apr 2011 · letzter Beitrag vom 12. Apr 2011
Antwort Antwort
Seite 1 von 2  1 2      
thomas2009
(Gast)

n/a Beiträge
 
#1

SpinEdit MinValue

  Alt 11. Apr 2011, 21:34
Hi
Ich verstehe nicht, warum ich 0 in SpinEdit eintippen kann,
obwohl SpinEdit.MinValue=1
Nur wenn SpinEdit1 den Focus verliert, dann wird der Value von 0 zu 1 verändert

Ich darf in SpinEdit kein 0 eintippen. Ich habe versucht inEvent Onchange :
Delphi-Quellcode:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
if (SpinEdit1.Value>0) and (SpinEdit1.Text<>'') then begin
SpinEdit2.Text:=IntToStr(Trunc(x / SpinEdit1.Value));

end else begin
exit; end;
end;
Trotzdem bekomme ich Fehler ! wenn ich 0 eintippe oder den Wert in SpinEdit1 lösche !

Geändert von thomas2009 (11. Apr 2011 um 21:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: SpinEdit MinValue

  Alt 11. Apr 2011, 22:02
Was zum Teufel programmierst du denn da? Hast du dir deinen Quellcode schon mal durchgelesen? Langsam wirds echt lustig mit dir...

Wenn ein User etwas eintippt kann nicht live geprüft werden, ob der eingegebene Wert korrekt ist. Das ist erst bei der OnExit-Methode möglich. Daher kann ein User auch eine 0 eingeben! Stell dir mal vor, du beschränkst das SpinEdit auf das Interval [3-20] und der User will 20 eingeben, dann würde schon bei der Eingabe der 2 sein Wert korrigiert werden.

Alternativ könntest du dir mal die Property EditorEnabled anschauen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#3

AW: SpinEdit MinValue

  Alt 11. Apr 2011, 23:15
OnExit-Methode funktioniert Ohne Fehler. Das ist eine Lösung, wenn es nicht möglich ist, Online (Onchange) die Werte zu berechnen
Ich möchte die Änderung Live sehen Onchange und nicht nur wenn ich ausserhalb wo anderes zu klicken !
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: SpinEdit MinValue

  Alt 11. Apr 2011, 23:31
Hast du überhaupt gelesen, was ich dir geschrieben habe? Den Eindruck macht es jedenfalls keineswegs... Du wirst doch wohl nicht glauben, dass dir die Mitglieder hier auf die Dauer noch viel helfen werden, wenn du schon das ignorierst was da steht. Ein wenig darüber nachdenken, was da steht und warum ein SpinEdit so funktioniert, wie es funktioniert, würde schon nicht schaden. Ich habe dir ja auch einen Lösungsweg beschrieben, der dich sichtlich gar nicht interessiert. Passt dir daran irgendwas nicht? Oder wo liegt denn bitte das Problem?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#5

AW: SpinEdit MinValue

  Alt 11. Apr 2011, 23:44
Alles was ich machen wollte ist folgendes
Delphi-Quellcode:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
if (SpinEdit1.Text='') or (SpinEdit1.Value<1) then begin
ShowMessage('Bitte einen Wert von 1 bis 10000 eingeben'); end else begin
bla bla
Ich möchte unbedingt Live die Werte berechnen und nicht OnExit
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: SpinEdit MinValue

  Alt 11. Apr 2011, 23:47
Das geht nicht, wenn du dem User erlaubst via Tastatur Werte einzugeben! Nochmals schreibe ich das nicht hin. Der Grund, warum es nicht geht steht weiter oben. Ich habe dir auch eine Property genannt mit der du dem User verbieten kannst Werte direkt einzugeben. Er muss daher die Pfeiltesten (Tastatur) nutzen oder eben die Pfeil-Button mit der Maus klicken.

Oder du überlegst dir einfach, ein komplett anderes Control zu nutzen!

Wenn es sich um dein Scale-Dialog handelt sollte auch folgende Lösung funktionieren: du kannst beim OnChange prüfen, ob der eingegebene Werte korrekt ist. Wenn ja, dann lass den Ok- bzw. Übernehmen-Button aktiviert (Enabled = True), ansonsten setze Enabled bei ungültigen Werten auf False. So kann der User nie eine Aktion ausführen, die die fehlerhafte Daten vorliegen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (11. Apr 2011 um 23:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: SpinEdit MinValue

  Alt 12. Apr 2011, 00:00
Haie sind bissig!

Probier mal folgendes
Delphi-Quellcode:
  if SpinEdit.Value < SpinEdit.MinValue then
    SpinEdit.Value := SpinEdit.MinValue
  else
  if SpinEdit.Value > SpinEdit.MaxValue then
    SpinEdit.Value := SpinEdit.MaxValue;
Edit: Doch im Grunde hat der Hai recht!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (12. Apr 2011 um 00:03 Uhr)
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#8

AW: SpinEdit MinValue

  Alt 12. Apr 2011, 00:13
Er muss daher die Pfeiltesten (Tastatur) nutzen oder eben die Pfeil-Button mit der Maus klicken.
Was wäre, wenn der User statt 1, den Wert 200 eingeben will?
Muss er 199 mals die Pfeil-Taste drücken

Oder du überlegst dir einfach, ein komplett anderes Control zu nutzen!
Es gibt in Delphi keine weitere Kontrole ausser Edit und SpinEdit

Wenn es sich um dein Scale-Dialog handelt sollte auch folgende Lösung funktionieren: du kannst beim OnChange prüfen ...
Ja aber das Ergebnis muss Live gesehen werden

Hier ist zum Beispiel von einem anderen Programm, wenn ich 0 eingebe

Probier mal folgendes
...
Wenn Du deinen Code in Onchange hin legst, dann bekommt Du Fehler
Miniaturansicht angehängter Grafiken
minvalue.jpg  

Geändert von thomas2009 (12. Apr 2011 um 00:28 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: SpinEdit MinValue

  Alt 12. Apr 2011, 06:49
Du wirst kaum verhindern können, dass der Anwender eine Null eintippt, weil Du nicht wissen kannst, ob daraus vielleicht ein "03" wird. Das Einzige, was Du tun kannst, ist, später in Deiner Verarbeitung auf die Null (nicht) zu reagieren, indem Du in diesem Fall intern mit einer "1" oder einem anderen sinnvollen Wert weiterrechnest. Spätestens im OnExit-Ereignis wird die GUI ja wider glatt gezogen.

Im OnChange-Ereignis könntest Du bei einem Wert, der nicht dem gewünschten Wertebereich entspricht, das Eingabefeld anders färben. Sobald Du aber anfängst, den eingegebenen String im OnChange-Ereignis zu verändern, wirst Du den Anwender in 9 von 10 Fällen verärgern, weil Du nicht vorhersehen kannst, was er eigentlich wollte und daher keine Korrektur in seinem Sinne vornehmen kannst.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

AW: SpinEdit MinValue

  Alt 12. Apr 2011, 07:56
Man könnte auch ein UpDown nehmen, der Wertebereich von SmallInt sollte hier reichen.

Im assoziierten Edit-OnChange prüft man mit TryStrToInt ob die Eingabe im Werte-Bereich ist und aktualisiert UpDown.Position.

Die Live-Anzeige wird nur im UpDown.OnChanching ausgelöst.

Delphi-Quellcode:
procedure TForm1.UpDown1Changing(Sender: TObject;
  var AllowChange: Boolean);
begin
  Label1.Caption := IntToStr(UpDown1.Position);
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  i : Integer;
begin
  if TryStrToInt((Sender as TEdit).Text, i) then
  begin
    if (i >= UpDown1.Min) and (i <= UpDown1.Max) then
      UpDown1.Position := i;
  end;
end;
Wichtig ist in der Combo die Unabhängigkeit der Ereignisse, wobei die Abhängigkeit der unabhängigen Komponenten abhängig von der Anwendung, unschön ist, ganz unabhängig vom Nutzen der Methode.

€: Oder man leitet vom SpinEdit ab und publiziert ein OnTextChange-Ereignis bzw. bastelt sich da ein Live-Update von Value rein, dann hat man wieder alles in einer Hand.

PS: Ich glaube der TS muss die ganzen Antworten übersetzen, weshalb wohl ein Teil der Antworten einfach untergeht.

Geändert von Satty67 (12. Apr 2011 um 08:16 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:20 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