Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   UpDown nur nullbasiert? (https://www.delphipraxis.net/170020-updown-nur-nullbasiert.html)

Kalakmul 26. Aug 2012 11:03

UpDown nur nullbasiert?
 
Hallo liebe Delphianer,

für eine Graphik, die in x- und y-Richtung nur bestimmte Abmessungen zulässt, versuche ich gerade, diese Abmessungen über ein UpDown in einem Editfeld darzustellen.

Die Graphik muss mindestens die Länge oder Breite von 12 Einheiten besitzen, von dort ausgehend kann sie jeweils um 8 Einheiten erweitert werden.

Dazu habe ich ein UpDown mit einem Editfeld assoziiert, dessen Position und Min-Wert auf 12 gesetzt, sowie das Increment auf 8.

Wenn ich jetzt den angezeigten Wert 12 durch Klick auf das UpDown um 8 inkrementieren will, erhöht sich dieser nicht wie beabsichtigt auf 20 sondern auf 24 :cyclops:, also so, als ob er von 0 ausgehend über 8 und 16 auf diesen Wert inkrementiert worden wäre.

Wie ist das zu erklären und kann ich dem UpDown doch noch das gewünchte Verhalten beibringen?

PS:
Natürlich könnte ich im Editfeld einfach die Anzahl der "Erweiterungsschritte" anzeigen lassen - also bei meinetwegen 0 angefangen jeweils um 1 inkrementieren, aber warum hat man beim UpDown die verschiedenen Einstellungsmöglichkeiten, wenn sie dann doch einen Workaround erfordern.

Wenn ich versuche, das ganze im OnClick-Ereignis des UpDown zu erledigen ...
Delphi-Quellcode:
  case Button of
    btNext: ud1.Position := ud1.Position + ud1.Increment;
    btPrev: ud1.Position := ud1.Position - ud1.Increment;
  end;
... sehe ich im Debugger, dass bei ud1.Position immer schon der falsch incrementierte Wert 24 ankommt und somit gar auf 32 inkrementiert wird. Stellt man Increment auf 0, wird offenbar das OnClick-Ereignis garnicht ausgelöst, sodass man dort auch keinen eigenen Wert setzen kann.

Vielen Dank für jeden Hinweis! :thumb:

Kalakmul 26. Aug 2012 11:23

AW: UpDown nur nullbasiert?
 
Hallo,

ich habe das Problem jetzt so gelöst, dass ich die anzuzeigende Position in der Tag-Eigenschaft des UpDown speichere und dann das Weitere im OnClick-Ereignis folgendermaßen regele ...

Delphi-Quellcode:
procedure TForm1.ud1Click(Sender: TObject; Button: TUDBtnType);
var
  AUpDown: TUpDown;
  Wert: Integer;
begin
  AUpDown := Sender as TUpDown;
  Wert := AUpDown.Tag;
  case Button of
    btNext: Wert := Wert + AUpDown.Increment;
    btPrev: Wert := Wert - AUpDown.Increment;
  end;
  AUpDown.Tag := Wert;
  AUpDown.Position := Wert;
end;
Gibt es noch eine bessere/elegantere Lösung?

Amateurprofi 26. Aug 2012 15:05

AW: UpDown nur nullbasiert?
 
Ich sehe folgende Möglichkeiten
Erstens mit dem UpDown
Setze Minimum= 0 und Increment=8 und addiere 12, wenn du den Wert abfragst.
Zweitens
Benutze eine ScrollBar
Setze Minimum=12, SmallChange=8 und LargeChange=8 und nutze eine Prozedur wie zum Beispiel nachstehende um Position in ein Edit zu stellen.
Delphi-Quellcode:
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   Edit1.Text:=intTostr(TScrollBar(sender).Position);
end;
Zitat:

PS:
Natürlich könnte ich im Editfeld einfach die Anzahl der "Erweiterungsschritte" anzeigen lassen - also bei meinetwegen 0 angefangen jeweils um 1 inkrementieren, aber warum hat man beim UpDown die verschiedenen Einstellungsmöglichkeiten, wenn sie dann doch einen Workaround erfordern.
Weil deine Vorstellung, wie ein UpDown funktionieren sollte nicht allgemeingültig sind.
Ein Anderer mag andere Vorstellungen haben.
Die Entwickler des TUpDown, können kaum voraussehen welche Ideen die Nutzer des TUpDown irgendwann einmal entwickeln könnten (womit ich nicht sagen will, dass deine Vorstellungen unlogisch sind).


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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