SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
gladio
Beiträge: 167
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Beitrag von gladio »

Im SpinEdit kann man mit MaxValue und MinValue den Wertebereich festlegen um die Auswahl auf diesen Bereich zu beschränken.
Das kann zur Designzeit im Objektinspektor geschehen oder durch Zuweisen zur Laufzeit.

Ich habe erstmalig mit der Komponente in einem Programm gearbeitet und festgestellt, wenn MinValue und MaxValue den gleichen Wert haben,
also SpinEdit enthält nur einen Wert zur Auswahl, wird die Begrenzug des Wertebereiches nur auf diesen Wert ignoriert.
Der Anwender kann also beliebige Werte einstellen.
Dabei ist es egal, ob Min-/MaxValue im Objektinspektor oder zur Laufzeit gesetzt werden.
Ist natürlich eine Ausnahme, wenn die Werte gleich sind. Sollte aber trotzdem korrekt funktionieren.
Bei FloatSpinEdit gleiches Verhalten.

Abgefangen habe ich jetzt diese Ausnahmesituation mit

Code: Alles auswählen

  
  if SpinEdit1.MinValue = SpinEdit1.MaxValue then
    SpinEdit1.ReadOnly:=true
    else
    SpinEdit1.ReadOnly:=false;
Win10/64 und Lazarus 2.0.10
Win11/64 und Lazarus 2.2
Zuletzt geändert von gladio am Fr 18. Feb 2022, 18:00, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4323
Registriert: Fr 8. Apr 2011, 09:01

Re: SpinEdit, Fehler bei MinValue=MaxValue

Beitrag von wp_xyz »

Dass die Grenzen aufgehoben sind, wenn MinValue=MaxValue ist, das ist so beabsichtigt. Denn in vielen Fällen will man die SpinEdits nur als Eingabemöglichkeit für beliebig große Zahlen verwenden. Im TFloatSpinEditEx/TSpinEditEx auf der LazControls-Lasche kann man sogar die SpinButtons ausblenden, so dass sie sich nicht mehr von einem normalen TEdit unterscheiden, das aber nur Zahleneingabe zulässt.

Benutzeravatar
Winni
Beiträge: 1320
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: SpinEdit, Fehler bei MinValue=MaxValue

Beitrag von Winni »

Hi!

Bitte nicht schon wieder diese Debatte.

Das wurde rauf- und runter-diskutiert im Internationalen Forum inkl. Bug-Report und philosophischen Betrachtungen:
https://forum.lazarus.freepascal.org/i ... #msg429506

Ich schließe mich den Ausführungen von wp_xyz an und ansonsten:

Wer keine Sorgen hat, der macht sich welche.

Winni

Benutzeravatar
gladio
Beiträge: 167
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: SpinEdit, Fehler bei MinValue=MaxValue

Beitrag von gladio »

hmm. wenn die Mehrheit und Winni das so hinnimt, will ich mich da auch nicht gegen sperren.
Weiß jetzt was da los ist und wie es abzufangen ist.
Übrigens SpinEditEx vom Reiter LazControl pfeift komplett auf die Einstellungen Min-/MaxValue.

Benutzeravatar
Winni
Beiträge: 1320
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: SpinEdit, Fehler bei MinValue=MaxValue

Beitrag von Winni »

gladio hat geschrieben:
Fr 18. Feb 2022, 17:59
Übrigens SpinEditEx vom Reiter LazControl pfeift komplett auf die Einstellungen Min-/MaxValue.
Nein!

Oder was für einen merkwürdigen Test-Code hast Du geschrieben?

wp_xyz
Beiträge: 4323
Registriert: Fr 8. Apr 2011, 09:01

Re: SpinEdit, Fehler bei MinValue=MaxValue

Beitrag von wp_xyz »

gladio hat geschrieben:
Fr 18. Feb 2022, 17:59
hmm. wenn die Mehrheit und Winni das so hinnimt, will ich mich da auch nicht gegen sperren.
Was willst du mit MinValue=MaxValue erreichen? Dass keine Eingabe möglich ist? Wozu hätte man dann "ReadOnly"?
gladio hat geschrieben:
Fr 18. Feb 2022, 17:59
Übrigens SpinEditEx vom Reiter LazControl pfeift komplett auf die Einstellungen Min-/MaxValue.
Das stimmt nicht: Klicke ein TSpinEditEx aufs Formular. Setze MaxValue=10. Kompilieren. Versuch einen Wert größer als 10 einzugeben - nicht möglich. Versuch, einen Wert kleiner als 0 einzugeben - nicht möglich (weil MinValue = 0). Auch das Scrollen mit den Pfeilsymbolen oder mit den Auf/Ab-Tasten endet bei 10 bzw. 0. Genauso soll es sein.

Oder meinst du etwas anderes? Dann schreibe es so, dass man es versteht.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1095
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Beitrag von fliegermichl »

Das ignorieren von MinValue und MaxValue hätte ich so implementiert, daß es greift falls MinValue > MaxValue ist. Wenn beide gleich sind sollte Value eben genau diesem Wert entsprechen.

Benutzeravatar
gladio
Beiträge: 167
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Beitrag von gladio »

In der Tat muss ich diese Behauptung zurücknehmen:
Übrigens SpinEditEx vom Reiter LazControl pfeift komplett auf die Einstellungen Min-/MaxValue.
Ich hatte beim kurzen Antesten von SpinEditEx MinValue mit 15 und MaxValue mit 10 eingestellt. Sollte natürlich andersrum sein.
Was willst du mit MinValue=MaxValue erreichen? Dass keine Eingabe möglich ist? Wozu hätte man dann "ReadOnly"?
Ich will damit nichts erreichen. Ich will verhindern (mit dem ReadOnly) daß in dem speziellen Fall (Min=Max) irgendwelche unsinnigen Werte eingestellt werden können.

Hintergrund zu dem Ganzen:
Der Anwender soll die Möglichkeit haben, eine Datenmenge zu filtern.
Eine Tabelle hat ein Feld "Jahr". In der Tabell gibt es Einträge für ein oder mehrere Jahre.
Das SpinEdit wird mit den vorher ermittelten enthaltenen möglichen Jahreswerten vorbelegt. (Es gibt 2 für von Jahr ... bis Jahr)
Sind nur Daten für ein Jahr enthalten, ist Min-/MaxValue gleich und es besteht damit die Möglichkeit Werte auszuwählen, die nicht in der Tabelle vorhanden sind.
Der an die SQL übergebene Parameter ist damit sinnlos. Das soll damit verhindert werden.
Natürlich ginge das auch mit einer Combobox oder Listbox oder sonstwas.
Toll wäre ein Doppelslider, gibt es wohl nicht in den Standardkomponenten.

wp_xyz
Beiträge: 4323
Registriert: Fr 8. Apr 2011, 09:01

Re: SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Beitrag von wp_xyz »

gladio hat geschrieben:
Sa 19. Feb 2022, 10:11
Hintergrund zu dem Ganzen:
Der Anwender soll die Möglichkeit haben, eine Datenmenge zu filtern.
Eine Tabelle hat ein Feld "Jahr". In der Tabell gibt es Einträge für ein oder mehrere Jahre.
Das SpinEdit wird mit den vorher ermittelten enthaltenen möglichen Jahreswerten vorbelegt. (Es gibt 2 für von Jahr ... bis Jahr)
Sind nur Daten für ein Jahr enthalten, ist Min-/MaxValue gleich und es besteht damit die Möglichkeit Werte auszuwählen, die nicht in der Tabelle vorhanden sind.
Der an die SQL übergebene Parameter ist damit sinnlos. Das soll damit verhindert werden.
Natürlich ginge das auch mit einer Combobox oder Listbox oder sonstwas.
OK, damit verstehe ich, warum dich das stört. Im Anbetracht dieser Anwendung wäre es vielleicht logischer gewesen, für MinValue=MaxValue keine Änderung zuzulassen und erst für MinValue > MaxValue den Wertebereich freizugeben. Aber das hätte das Control diesbezüglich zu Delphi inkompatibel gemacht. Und jetzt kann man es schon gar nicht mehr ändern, ohne zahllose Benutzer zu verärgern, die die Komponente genau im jetzigen Sinn einsetzen.

Ich denke, der Code im 1.Post ist für das von dir gewünschte Verhalten genau richtig. Allerdings würde mich als imaginären Benutzer deines Programms stören, warum da Spinbuttons sind, wenn ich nichts eintragen kann. Vielleicht solltest du das Control im Fall MinValue=MaxValue gleich auf Enabled=false setzen, damit ein visuelles Feedback da ist.

Benutzeravatar
h-elsner
Beiträge: 191
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint18.3, Win10, Lazarus 2.0.12, FPC3.2.0
CPU-Target: 64Bit
Wohnort: Illertissen
Kontaktdaten:

Re: SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Beitrag von h-elsner »

Vielleicht solltest du das Control im Fall MinValue=MaxValue gleich auf Enabled=false setzen, damit ein visuelles Feedback da ist.
Ich als unbedarfter Nutzer eines Programmes würde genau das erwarten, nämlich eine Rückmeldung, dass ich hier nichts machen brauche. Nicht da herumklicken zu müssen, bloß um herauszufinden, dass es nicht geht. Enabled (true/false) ist ein mächtiges Mittel, eine gute Benutzueroberfläche zu bauen. Macht natürlich Arbeit, aber das macht eine gute benutzerführung immer.

Gruß HE

Benutzeravatar
gladio
Beiträge: 167
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: SpinEdit, Fehler bei MinValue=MaxValue [erledigt]

Beitrag von gladio »

Enabled war mir jetzt gar nicht in den Sinn gekommen aber
habe das gleich mal umgesetzt und auch den dazugehörigen Schalter mit einbezogen.
Danke für diesen Hinweis.

Antworten