Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objekt an Trackbar Position ausrichten (https://www.delphipraxis.net/179728-objekt-trackbar-position-ausrichten.html)

Luki206 2. Apr 2014 18:32

AW: Objekt an Trackbar Position ausrichten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe, damit ich das Projekt wiedererkennen kann, ihm den Namen TestTrackbar gegeben also nicht wundern ;)

stahli 2. Apr 2014 19:02

AW: Objekt an Trackbar Position ausrichten
 
Hmm, ich weiß nicht recht, was Du da erreichen willst.
Auf jeden Fall solltest Du Dein Ziel etwas einfacher angehen.
Je einfacher, desto besser nachvollziehbar und wartbar.

Ich denke, Dein Problem liegt in dem
Delphi-Quellcode:
max div 60)div max
.
Wenn max > 60 ist dann hat das natürlich deutliche Auswirkungen.

Aber für eine bessere Lösung müsste man wissen, was Du erreichen willst.

Sind die Timer aktuell nur für Tests da? Willst Du die Trackbar später mit der Maus einstellen oder brauchst Du eher eine ProgressBar, die einen Fortschritt anzeigt?

Luki206 2. Apr 2014 19:11

AW: Objekt an Trackbar Position ausrichten
 
Ich möchte das sie als Fortschrittsanzeige dient aber auch später verschoben werden kann

stahli 2. Apr 2014 19:44

AW: Objekt an Trackbar Position ausrichten
 
Ok, dann mach einfach etwas Ordnung.

Folgende Eigenschaften brauchst Du:
MinValue, MaxValue für Minimal- und Maximalwert.
Position für den aktuellen Wert.
Width für die Breite der Trackbar.
XPosition für den Mittelwert des Schiebers in der Horizontalen.

XPosition errechnest Du prozentual zu Width wie Position zu (MaxValue - MinValue) und zwar immer dann wenn eine der anderen Eigenschaften geändert wird (also in einer Prozedur CalcXPosition, die Du von unterschiedlichen Stellen aus aufrufen kannst).

Wenn Du das Ganze funktionsfähig hast, dann kannst Du Dich auch mit der Komponentenentwicklung befassen.
Dann wird so etwas nicht im Formularcode umgesetzt sondern in einer Komponente gekapselt (wie eben der TTrackBar), die dann überall einsetzbar ist.

Luki206 2. Apr 2014 19:51

AW: Objekt an Trackbar Position ausrichten
 
Irgendwie stehe ich gerade auf dem Schlauch... Ich werde einmal eine Nacht drüber schlafen, mal sehen ob ich's morgen hin bekomme ;)

Sir Rufo 2. Apr 2014 19:56

AW: Objekt an Trackbar Position ausrichten
 
Zitat:

Zitat von Luki206 (Beitrag 1254462)
Irgendwie stehe ich gerade auf dem Schlauch... Ich werde einmal eine Nacht drüber schlafen, mal sehen ob ich's morgen hin bekomme ;)

Schlafen ist auch eine Alternative - besser ist aber allemal, wenn du das zunächst analog mit Papier und Bleistift durchspielst

stahli 2. Apr 2014 20:07

AW: Objekt an Trackbar Position ausrichten
 
... und dazu mal für alle Eigenschaften "Setter" vorsehen in folgender Form:

Delphi-Quellcode:
procedure Form1.SetMaxValue(aValue: Integer);
begin
  if MaxValue <> aValue then
  begin
    CalcXPosition;
    PaintTrackbar;
  end;
end;
Natürlich musst Du die beiden Methoden dann auch noch deklarieren.

Das ist etwas mehr Schreibarbeit aber so ist das gut nachvollziehbar und Du weist auch später noch, was Du da programmiert hast.

Die Werte änderst Du dann durch SetMaxValue(100), SetPosition(50) usw.

Im Grunde hast Du dann schon fast die Funktionsweise einer echten Komponente. ;-)

Sir Rufo 2. Apr 2014 20:25

AW: Objekt an Trackbar Position ausrichten
 
Hier mal eine Methode um ein Control an der Position der TrackBar auszurichten
Delphi-Quellcode:
procedure TForm1.ControlOnTrackBarPosition( AControl : TControl; ATrackBar : TTrackBar );
const
  C_TRACKBAR_BORDER_LEFT = 12;
  C_TRACKBAR_BORDER_RIGHT = 12;
var
  LLeft : Integer;
begin
  LLeft := ATrackBar.Left + C_TRACKBAR_BORDER_LEFT + Round( ( ATrackBar.Width - C_TRACKBAR_BORDER_LEFT - C_TRACKBAR_BORDER_RIGHT ) * ATrackBar.Position /
      ( ATrackBar.Max - ATrackBar.Min ) );
  AControl.Top := ATrackBar.Top - AControl.Height;
  AControl.Left := LLeft - AControl.Width div 2;
end;
Du willst ein Image daran ausrichten, dann einfach
Delphi-Quellcode:
procedure TForm1.TrackBar1Change( Sender : TObject );
begin
  ControlOnTrackBarPosition( Image1, Sender as TTrackBar );
end;
und schon wandert das Image ganz brav an der TrackBar entlang, zentriert über dem Pinörpel ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.
Seite 3 von 3     123   

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