Comment définir les tiques personnalisées sur un TTrackBar en Delphi 2010?
-
23-09-2019 - |
Question
I essayé de définir le style de la tique à tsManual, la minute et la position max à 1 et 100, respectivement, et ajouter les tiques à 9, 19, 79 et 89 et aucun tiques sont représentées en tout sauf le detault premier et dernier qui le contrôle montre automatiquement. J'ai essayé d'autres valeurs et ne sont jamais affichés. Mon code est:
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );
Toutes les suggestions? Je suis sûr que je manque un détail important, et la documentation est assez rare. Ceci est un nouveau vide VCL projet Forms dans Delphi 2010 avec la mise à jour 4.
Je vous remercie à l'avance.
La solution
TTrackBar.SetTick () ne transmet pas le message TBM_SETTIC si la propriété Handle est actuellement désaffecter:
procedure TTrackBar.SetTick(Value: Integer);
begin
if HandleAllocated then // <-- here
SendMessage(Handle, TBM_SETTIC, 0, Value);
end;
La poignée de fenêtre ne soit pas affecté tant que la propriété poignée est lu pour la première fois, et non pas lorsque le composant est initialement créé. En tant que tel, appelez HandleNeeded () avant d'appeler 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 );
Autres conseils
Je ne sais pas pourquoi la procédure TrackBar1.SetTick ne fonctionne pas, mais si vous sendMessage de la même manière la procédure fonctionnera-t-il. Vous devrez ajouter l'unité CommCtrl à votre clause uses pour résoudre TBM_SETTIC comme indiqué ...
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 this helps!
En plus de la handle
être prêt et TickStyle
= tsManual
, la propriété frequency
doit être réglé à un multiple ou, plus facilement, à 1.