Cómo encargo conjunto de las garrapatas en un TTrackBar en Delphi 2010?
-
23-09-2019 - |
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.
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.