![]() |
(erledigt) dynamisch erstellte TrackBar hält nicht das "Min" ein, warum?
Delphi 11.2
Ich erstelle eine TrackBar so: (FTrackBarA ist in der Form als Variable abgelegt und FFormA ist eine generierte TForm auf der es draufliegt.)
Delphi-Quellcode:
und reagiere beim OnChange so:
FTrackBarA := TTrackBar.Create(FFormA);
try FTrackBarA.Parent := FFormA; FTrackBarA.Align := alBottom; FTrackBarA.Min := 15; FTrackBarA.Max := 255; FTrackBarA.Position := 255; FTrackBarA.Frequency := 25; FTrackBarA.OnChange := TrackBarAChange; finally end;
Delphi-Quellcode:
Aber obwohl ich ein unteres Limit angebe, pfeift die Vcl drauf und lässt es bis 0 runtergehen.
procedure TfrmMain.TrackBarAChange(Sender: TObject);
begin FFormA.AlphaBlendValue := (Sender As TTrackBar).Position end; Warum ist das so bzw wie geht es korrekt, bitte um Hilfe :angel: |
AW: dynamisch erstellte TrackBar hält nicht das "Min" ein, warum?
hallo
würde zuerst max setzen und dann min. Max ist von Haus aus 10 und min kann nicht größer sein als max und wird wieder auf 0 gesetzt? |
AW: dynamisch erstellte TrackBar hält nicht das "Min" ein, warum?
Weil Min nicht gesetzt wird, und das auch noch ohne Fehlermeldung/Exception. :wall:
Probiere es selbst aus. TrackBar auf die Form und Min die 15 zuweisen. Min ist größer als das "aktuelle" Max und wird daher verworfen (alternativ hätte der Hersteller dabei aber auch einfach Max hochsetzen können) Lösung: zuerst Max zuweisen oder wenn Max kleiner als aktuelles Min, dann zuerst Min :freak:
Delphi-Quellcode:
if NewMin > FTrackBarA.Max then begin
FTrackBarA.Max := NewMax; FTrackBarA.Min := NewMin; end else begin FTrackBarA.Min := NewMin; FTrackBarA.Max := NewMax; end; // oder FTrackBarA.Min := Min(NewMin, NewMax); FTrackBarA.Max := Max(NewMin, NewMax); FTrackBarA.Min := NewMin; FTrackBarA.Max := NewMax; |
AW: dynamisch erstellte TrackBar hält nicht das "Min" ein, warum?
[ADD]
![]() [/ADD] @Keldorn, zum Glück nicht auf 0 ... es wird einfach ignorert/verworfen und der alte Wert bleibt ... wäre auch blöd, denn wäre MAX kleiner 0 würde es dann ja auch knallen :lol:
Delphi-Quellcode:
procedure TTrackBar.SetMin(Value: Integer);
begin if Value <= FMax then SetParams(FPosition, Value, FMax); end; procedure TTrackBar.SetMax(Value: Integer); begin if Value >= FMin then SetParams(FPosition, FMin, Value); end; |
AW: dynamisch erstellte TrackBar hält nicht das "Min" ein, warum?
Vielen Dank für die Erklärungen! Ja so wie ihr es beschreibt klingt es logisch aber ich bin da nicht drauf gekommen, hätte ja mal ne MessageBox setzen können oder debuggen aber ne, ich probierte ewig nur in dem event was zu drehen, logischerweise ohne Erfolg.
Einen Hinweis hätte ich mir an dieser Stelle schon gewünscht das ich außerhalb des gültigen Bereichs was versuche. Nu klappts und es schnurrt, lieben dank euch beiden!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz