Політ: книга програмера  
0. Вступ
1. Особливості політівських програм
2. Події та їх обробники
3. Елементи керування: принципи, Button, Label, Check, Radio,
InpLine, PicCtl, Header, Progress, Track, TimerCtl, Notebook,
SpinEdit, PopupBtn, Switcher, MainMenu, Splitter, Memo, ListBox

Сайт Польоту
 

Елементи керування
Бігунок - Track (модуль Ctl)

Бігунок використовується для зручного вибору одного з кількох послідовних значень. Особливо тоді, коли можливих значень цих небагато (до десятка) або вибір робиться не точно, а "на глаз". Наприклад, для вибору гучності музики.



Створити бігунок
Function Track_Create(Prog:PProg; 
  VMin, VMax, VValue:Integer;
  VKind:TTrackKind; VTicks:Boolean; 
  VOnUpdate:TCtlHandler): PControl;
  • VMin, VMax, VValue - мінімальне, максимальне та поточне значення.
  • VKind - тип бігунка: tkMonowidth - з прямокутною лінійкою, tkGrowRight - лінійка вузька зліва та широка справа.
  • VOnUpdate - обробник зміни позиції бігунка. Зверніть увагу - під час пересування бігунка мишкою ця подія викликатиметься не лише в кінці операції, а для кожного пройденого бігунком положення. Хороша ілюстрація цієї особливості - бігунок чутливості мишки у панелі її настройок. Спробуйте потягати його мишкою туди-сюди. Чутливість мінятиметься прямо під час руху бігунка!


Намалювати бігунок
Procedure Track_Paint(Me:PControl; 
  VX1, VY1, VX2:Integer);
Висота бігунка - 20 пікселів.



Встановити положення бігунка
Procedure Track_SetPos(Me:PControl; VPos:Integer);
VPos - нове положення



Отримати положення бігунка
Function Track_GetPos(Me:PControl): Integer;
Основний прийом роботи з бігунками.



Наша попередня програмка-приклад вийшла досить корисною. А ця хай буде зовсім не корисною - вона гальмуватиме роботу Польоту. Хай вона в своєму OnIdle робить якісь важкі обчислення, та ще й у циклі кілька тисяч разів. А скільки саме - залежатиме від положення бігунка. Робимо заготовку TestTrk, ставимо флажок обробника OnIdle. Описуємо, створюємо та малюємо бігунок (певен, ви уже самі не гірше за мене знаєте, що в яких місцях програми робиться):
TrkLoad: PControl;
TrkLoad:=Ctl.Track_Create(Me, 0, 20, 0, tkGrowRight,
  False, Kernel.CtlDummyProc);
Ctl.Track_Paint(TrkLoad, 10, 10, X2-X1-10);
Робимо такий обробник OnIdle:
Procedure OnIdle(Me:PProg);
Var
  I, Times: Integer;
  R: Real;
Begin
  With Me^, TTestTrkData(Me^) Do
  Begin
    Times:=Ctl.Track_GetPos(TrkLoad);
    For I:=1 To Times*10000 Do
      R:=Sin(R)*Cos(R)
  End
End;
Програмка готова, можна запускати і гратися. Чим правіше положення бігунка, тим повільніше працюватиме Політ. Щоб бачити швидкість роботи краще, можна паралельно запустити Тестову програму (з лініями та м'ячиком). Якщо на вашому компі ця програма гальмує непомітно або надто сильно, можете у заголовку цикла значення 10000 відповідно збільшити (до 15000) або зменшити. І останнє, якщо все гальмує настільки, що важко закрити вікно TestTrk, не забувайте про Alt+F5 - політівську гарячу клавішу для закриття активного вікна.