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/)
-   -   Delphi (erledigt) dynamisch erstellte TrackBar hält nicht das "Min" ein, warum? (https://www.delphipraxis.net/211531-erledigt-dynamisch-erstellte-trackbar-haelt-nicht-das-min-ein-warum.html)

KodeZwerg 28. Sep 2022 18:51


(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:
     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;
und reagiere beim OnChange so:
Delphi-Quellcode:
procedure TfrmMain.TrackBarAChange(Sender: TObject);
begin
  FFormA.AlphaBlendValue := (Sender As TTrackBar).Position
end;
Aber obwohl ich ein unteres Limit angebe, pfeift die Vcl drauf und lässt es bis 0 runtergehen.

Warum ist das so bzw wie geht es korrekt, bitte um Hilfe :angel:

Keldorn 28. Sep 2022 19:04

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?

himitsu 28. Sep 2022 19:06

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;

himitsu 28. Sep 2022 19:08

AW: dynamisch erstellte TrackBar hält nicht das "Min" ein, warum?
 
[ADD]
https://quality.embarcadero.com/browse/RSP-39564
[/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;

KodeZwerg 28. Sep 2022 21:20

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