Einzelnen Beitrag anzeigen

Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#6

Re: Komponentenentwicklung Problem mit Run- und DesignTime

  Alt 23. Okt 2009, 15:30
Im Setter führe ich Aktioneneigentlich immer nur dann aus, wenn der Wert sich auch verändert hat. Dadurch läßt sich hier z.B. ein zirkulärer Aufruf von SetValue und TrckChange stoppen.

Delphi-Quellcode:
procedure TLabTrackBar.TrckBarAnpassung(TrackBar: TMouseTrackBar);
begin
  TrackBar.Width := Width - 20;
  TrackBar.Height := Height - 15;
  TrackBar.Left := 10;
  TrackBar.Top := 12;
  if Assigned(FLblTrckBar) and Assigned(FTrckBar) then
  begin
    FLblTrckBar.Caption := floattostr(FTrckBar.Position * FScaleFactor) + FsLabelAdd;
    LblAnpassung(FLblTrckBar);
  end;
end;

procedure TLabTrackBar.LblAnpassung(FLabel: TLabel);
begin
  if Assigned(FLblTrckBar) and Assigned(FTrckBar) then
    FLblTrckBar.Left := Round((FTrckBar.Left + 11 - FLblTrckBar.Width / 2) +
      (FTrckBar.Position / (FTrckBar.Max - FTrckBar.Min) * (FTrckBar.Width - 22)));
end;

procedure TLabTrackBar.Resize;
begin
  inherited Resize;
  TrckBarAnpassung(FTrckBar);
  // LblAnpassung(FLblTrckBar); unnötig, geschieht in TrckBarAnpassung.
  // warum werden überhaupt die eigenen Felder übergeben?
end;

procedure TLabTrackBar.SetValue(dValue: Double);
begin
  if dValue <> FdValue then
  begin
    FdValue := dValue;
    if Assigned(FTrckBar) then
      FTrckBar.Position := Round(FdValue / FScaleFactor);
    LblAnpassung(FLblTrckBar);
  end;
end;

procedure TLabTrackBar.TrckChange(Sender: TObject);
begin
  SetValue(FTrckBar.Position * FScaleFactor);
end;
Grüsse, Dirk
  Mit Zitat antworten Zitat