Domanda

Ho cercato di impostare lo stile di spunta per tsManual, il min e posizione massima rispettivamente 1 e 100 e aggiungere zecche a 9, 19, 79 e 89 e non zecche sono mostrate a tutti tranne il detault primo e l'ultimo che il controllo mostra automaticamente. Ho provato altri valori e nessuna è mai mostrato. Il mio codice è:

TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );

Qualche suggerimento? Sono sicuro che mi manca un dettaglio importante, e la documentazione è piuttosto scarsa. Si tratta di un nuovo progetto vuoto VCL form in Delphi 2010 con aggiornamento 4.

Grazie in anticipo.

È stato utile?

Soluzione

TTrackBar.SetTick () non invia il messaggio TBM_SETTIC se la proprietà Handle è attualmente assegnato:

procedure TTrackBar.SetTick(Value: Integer);
begin
  if HandleAllocated then // <-- here
    SendMessage(Handle, TBM_SETTIC, 0, Value);
end;

L'handle della finestra non viene allocato fino a quando la proprietà Handle viene letta per la prima volta, non quando il componente viene inizialmente creato. Come tale, chiamare HandleNeeded () prima di chiamare 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 );

Altri suggerimenti

Non so il motivo per cui la procedura TrackBar1.SetTick non funziona, ma se si SendMessage allo stesso modo la procedura non funzionerà. Sarà necessario aggiungere il CommCtrl unità al proprio clausola uses per risolvere TBM_SETTIC come mostrato ...

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;

Spero che questo aiuti!

Oltre alla handle essere pronto e il TickStyle = tsManual, la proprietà frequency deve essere impostato ad un multiplo o, più facilmente, a 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top