Как установить собственные галочки на TTrackBar в Delphi 2010?

StackOverflow https://stackoverflow.com/questions/2344699

Вопрос

Я попытался установить стиль галочки на 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.

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

Это было полезно?

Решение

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 );

Другие советы

Я не знаю, почему процедура 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;

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top