Pregunta

I tratado de establecer el estilo de garrapata a tsManual, el min y la posición max de 1 y 100, respectivamente, y añadir las garrapatas a las 9, 19, 79 y 89 y no hay garrapatas se muestran en absoluto, excepto la detault primera y última que el control muestra automáticamente. Probé otros valores y ninguno jamás se muestran. Mi código es:

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

¿Alguna sugerencia? Estoy seguro de que estoy perdiendo un detalle importante, y la documentación es bastante escasa. Esto es en la forma una nueva VCL vacías proyectan en Delphi 2010 con la actualización 4.

Gracias de antemano.

¿Fue útil?

Solución

TTrackBar.SetTick () no envía el mensaje TBM_SETTIC si la propiedad Handle es actualmente sin asignar:

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

El identificador de ventana no recibe asignado hasta que la propiedad Handle se lee por primera vez, no cuando se crea inicialmente el componente. Como tal, llame HandleNeeded () antes de llamar 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 );

Otros consejos

No sé por qué el TrackBar1.SetTick procedimiento no funciona, pero si sendmessage la misma forma en que el procedimiento no funcionará. Usted tendrá que añadir la unidad CommCtrl a su cláusula de usos a TBM_SETTIC determinación como se muestra ...

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;

Espero que esto ayude!

Además de la handle siendo listo y el TickStyle = tsManual, la propiedad frequency debe ajustarse a un múltiplo o, más fácilmente, a 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top