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.

War es hilfreich?

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 ...

gezeigt
implementation

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top