Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Progressbar Min Max richtig setzen


Knulli - Mo 26.05.08 15:26
Titel: Progressbar Min Max richtig setzen
Hi Leute,
die Progressbar macht mich fertig...

Ich will zur Laufzeit Min und Max setzen und Position dazwischen hochlaufen lassen.

Es kann 1..10, aber auch 25..37 oder auch 200..200 vorkommen, je nachdem was der Benutzer gerade macht.

Ich bekomme es immer wieder hin, daß ich eine Exception um die Ohren gehauen bekomme, wenn ich entweder Min oder Max setze.

z.B. Min steht vom letzten Mal noch auf 1, Max auf 10. Wenn ich Min=200 setzen will krachts
in diesem Fall wäre es bestimmt besser gewesen erst Max zu setzen.
Aber wenn ich Min/Max auf 200/200 zu stehen habe und wieder 1/10 draus machen will krachts bei Max=10
hier wäre es besser erst Min zu setzen.

Gibts nicht eine Möglichkeit die immer klappt OHNE, daß ich mir vorher X-UND-NEUNZIG mögliche Sonderfälle überlegen muß?

Knulli


ZeitGeist87 - Mo 26.05.08 15:29


Delphi-Quelltext
1:
2:
3:
Progressbar1.Progress/Position:= 0;
Progressbar1.Min:= Min;
Progressbar1.Max:= Max;


Min und Max sind Varibalen vom Typ Integer mit den entsprechenden Werten..


Knulli - Mo 26.05.08 15:46

Nee, das wars nicht. Knallt trotzdem:

Min/Max von 0/100 --> 1/10 geht noch

dann

Min/Max von 1/10 --> 200/200 Exception

Knulli


ZeitGeist87 - Mo 26.05.08 15:48

Zeig mal den Quelltext..


Knulli - Mo 26.05.08 16:37

Hab selber ne Lösung gefunden:
Hab mal in die Komponente reindebuggt, was da los ist:

Delphi-Quelltext
1:
2:
  if AMax < AMin then
    raise EInvalidOperation.CreateFmt(SPropertyOutOfRange, [Self.Classname]);

ich muß also nur verhindern, daß Min größer Max wird:

das mache ich jetzt so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
    if (aFrom > aProgressBar.Max) then
    begin
      aProgressBar.Max := aTo;
      aProgressBar.Min := aFrom;
    end
    else
    begin
      aProgressBar.Min := aFrom;
      aProgressBar.Max := aTo;
    end;

Danke für die Mithilfe.
Knulli