Как установить собственные галочки на TTrackBar в Delphi 2010?
-
23-09-2019 - |
Вопрос
Я попытался установить стиль галочки на 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.