Как установить пользовательские галочки на TTrackBar в Delphi 2010? - PullRequest
3 голосов
/ 26 февраля 2010

Я попытался установить стиль тика в tsManual, минимальное и максимальное положения равны 1 и 100 соответственно и добавить тики в 9, 19, 79 и 89, и никакие тики не отображаются вообще, за исключением первого и последнего отключений, которые контролируетавтоматически показывает.Я пробовал другие значения, и они никогда не показывались.Мой код:

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

Есть предложения?Я уверен, что упускаю важную деталь, а документация довольно скудная.Это новый пустой проект VCL Forms в Delphi 2010 с обновлением 4.

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 05 марта 2010

TTrackBar.SetTick () не отправляет сообщение TBM_SETTIC, если свойство Handle в настоящее время не назначено:

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

Дескриптор окна не выделяется до тех пор, пока свойство Handle не будет прочитано в первый раз, а не при первоначальном создании компонента. Таким образом, вызовите HandleNeeded () перед вызовом 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 );
2 голосов
/ 27 февраля 2010

Я не знаю, почему процедура TrackBar1.SetTick не работает, но если вы отправите сообщение таким же образом, как и процедура, она будет работать. Вам потребуется добавить модуль CommCtrl в ваше предложение для использования TBM_SETTIC, как показано ...

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;

Надеюсь, это поможет!

0 голосов
/ 23 августа 2014

Помимо готовности handle и TickStyle = tsManual, свойство frequency должно быть установлено в кратное значение или, что проще, в 1.

...