| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > TTrackBar & SetTick |
| Автор: gAlexKo 6.4.2015, 17:15 |
| Что-то странное. Может глюк 6 Билдера? Кладу TrackBar на форму. Хочу сделать метку на значении 5. Не выходит! __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TrackBar1->Max = 10; TrackBar1->Min = 0; TrackBar1->Position = 0; TrackBar1->TickStyle = tsManual; TrackBar1->SetTick(5); } //--------------------------------------------------------------------------- |
| Автор: Romikgy 6.4.2015, 20:46 | ||
|
| Автор: gAlexKo 7.4.2015, 08:14 | ||||
И что это дает? Postion это значение ползунка. А нужно сделать шкалу из меток вдоль TrackBar используя функцию SetTick. В твоем примере метка на значении 5 также не проставляется. Пробовал проставлять метки используя свойство Frequency (получилось), но это немного не то, что мне надо. А вот с использованием функции SetTick прямо засада какая-то. |
| Автор: 586 7.4.2015, 10:12 | ||
Вроде нормально работает SetTick. Для наглядности изменяю другие свойства:
|
| Автор: gAlexKo 7.4.2015, 10:13 |
| Мне удалось найти решение - это действительно недоработка Борланда, по крайней мере в части документации. Итак, если нужно ставить метки в TTrackBar при помощи SetTick нужно делать одним из следующих вариантов: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TrackBar1->Max = 10; TrackBar1->Min = 0; TrackBar1->Position = 0; TrackBar1->TickStyle = tsManual; //Первый вариант решения: TrackBar1->HandleNeeded(); TrackBar1->SetTick(5); //метка на по значению 5 // или второй вариант: //SendMessage(TrackBar1->Handle, TBM_SETTIC, 0, 5); //метка на по значению 5 } |
| Автор: 586 7.4.2015, 10:13 |
| С++Builder6. В компоненте ничего дополнительно не менял. |
| Автор: gAlexKo 7.4.2015, 10:19 | ||||
Frequency и SetTick не используются вместе. Frequency - это делать метки каждые N значений. Работает только когда TickStyle == tsAuto (что по умолчанию). SetTick(N) - это устанавливать метки на НУЖНОМ значении. Для этого нужно TickStyle == tsManual. PS: Кстати то же самое в Delphi 2010. |
| Автор: gAlexKo 7.4.2015, 12:53 | ||||||
Я откомпилоировал твои два варианта - ни на одном из них у меня МЕТКИ (2 и 3) не появились (появились только две метки по краям бара). Даже не знаю как ты обошелся без функции NeedHandle() и почему у тебя их видно. (CBuilder 6.0) Как я понял проблема известная в делфийских кругах: http://sohu.io/questions/927922/how-to-set-custom-ticks-on-a-ttrackbar-in-delphi-2010 |
| Автор: 586 8.4.2015, 02:36 |
| Сейчас я эту проблему обнаружил, когда скопировал свой код в конструктор формы. SetTick действительно не работает. Решение использовать HandleNeeded хорошее. Очень похоже на баг в SetTick - по-хорошему, HandleNeeded должен вызываться автоматически. |