So stellen Sie benutzerdefinierte Ticks auf einem TTrackBar in Delphi 2010?
-
23-09-2019 - |
Frage
Ich habe versucht, die Zecke Stil tsManual zu setzen, die Min- und Max-Position auf 1 bzw. 100 und fügen Sie Ticks bei 9, 19, 79 und 89 und keine Zecken werden bei allen mit Ausnahme des detault ersten und die letzten, die die Steuer gezeigt zeigt automatisch. Ich habe versucht, andere Werte und keiner jemals gezeigt. Mein Code ist:
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );
Irgendwelche Vorschläge? Ich bin sicher, ich bin fehlt ein wichtiges Detail, und die Dokumentation ist ziemlich spärlich. Dies ist auf eine neue leere VCL Forms-Projekt in Delphi 2010 mit Update 4.
Vielen Dank im Voraus.
Lösung
TTrackBar.SetTick () nicht die TBM_SETTIC Nachricht senden, wenn die Eigenschaft Handle momentan nicht zugewiesen ist:
procedure TTrackBar.SetTick(Value: Integer);
begin
if HandleAllocated then // <-- here
SendMessage(Handle, TBM_SETTIC, 0, Value);
end;
Der Fenstergriff nicht zugewiesen bekommt, bis die Eigenschaft Handle zum ersten Mal gelesen wird, nicht, wenn die Komponente ursprünglich erstellt. Als solche bezeichnen HandleNeeded () vor dem Aufruf SetTick ():
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.HandleNeeded; // <-- here
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );
Andere Tipps
Ich weiß nicht, warum das Verfahren TrackBar1.SetTick nicht funktioniert, aber wenn Sie die gleiche Art und Weise nachrichts die Prozedur tut, wird es funktionieren. Sie müssen das Gerät CommCtrl zu Ihrer uses-Klausel zu lösen TBM_SETTIC hinzufügen, wie ...
gezeigtimplementation
Uses CommCtrl;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 0;
TrackBar1.Max := 100;
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 9);
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 19);
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 79);
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 89);
end;
Hope, das hilft!
Neben dem handle
bereit sind und die TickStyle
= tsManual
, die frequency
Eigenschaft muss auf ein Vielfaches oder, noch einfacher eingestellt werden, bis 1.