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

Сайт Польоту
 

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

Блокнот - це набір сторінок із закладками, призначений для створення багатосторінкових діалогових вікон. Такі набори сторінок можна побачити у самому Майстрі програм, майже у всіх вікнах настройок, у діалогу вибору кольору (ColorDlg). Елемент керуванняце досить складний - він складається з набору закладок (використовуючи TabSet, про який я розкажу потім) та рамки навколо сторінки, а також уміє керувати видимістю розташованих на його сторінках елементів керування. Тобто коли юзер клікає одну із закладок, Блокнот сам ховає елементи керування поточної сторінки та показує елементи вибраної зараз сторінки.

Тільки для цього треба показати йому, які елементи керування мають бути на якій сторінці... Загальна технологія така. Це вказується при створенні елементів керування. Найпершим створюється блокнот. Далі створюються всі елементи керування, що мають бути на його першій сторінці. До блокнота додається перша сторінка. Створюються всі елементи керування для другої сторінки. Додається друга сторінка. Ця процедура повторюється для всіх сторінок блокнота. Після додавання до блокнота останньої сторінки створюються всі елементи керування, що не залежать від блокнота (наприклад, кнопки внизу вікна). Зараз я розкажу вам про процедури роботи з блокнотом, а потім зробимо приклад, що допоможе вам розібратися з використанням блокнота.




Створити блокнот
Function Notebook_Create(Prog:PProg;
  VGrayBack:Boolean): PControl;
VGrayBack - флажок: фон вікна навколо блокнота темний (True) або звичайний (False). Придивіться до політівських вікон настройки, що містять великий, на все вікно блокнот з різними елементами керування та пару кнопочок внизу. В них усіх фон вікна навколо блокнота трохи темніший, ніж фон сторінок блокнота. На темному фоні блокнот ніби виглядає краще (і дизайнери Windows XP так само вважають :), тому раджу в подібних випадках теж фон навколо блокнота робити темним. Як - розкажу потім :).



Додати сторінку до блокнота
Procedure Notebook_AddPage(Me:PControl; 
  VName,VHint:String; VIcon:Pointer);
  • VName - підпис сторінки.
  • VHint - хінт (натяк) для сторінки. Хінти у Польоті - це коротенькі текстові повідомлення, що спливають, якщо затримати курсор мишки над елементом керування. Зокрема, майже всі елементи керування можуть показувати хінти; але як це робиться, розкажу колись потім, бо ви ще не готові :).
  • VIcon - картинка за закладці. Nil - картинки немає.


Установити обробник зміни сторінок блокнота
Procedure Notebook_SetOnChange(Me:PControl; 
  VOnChange:TCtlHandler);
Не знаю, навіщо це може знадобитись :).
VOnChange - обробник.



Намалювати блокнот
Procedure Notebook_Paint(Me:PControl; 
  VX1, VY1, VX2, VY2:Integer);
VX1, VY1, VX2, VY2 - координати всієї області блокнота (не лише закладок!)



Установити активну сторінку блокнота
Procedure Notebook_SetActivePage(Me:PControl; 
  VActivePage:Integer);
VActivePage - номер нової активної сторінки. Сторінки нумеруються, починаючи з 1. Після створення блокнота за умовчанням вибрана сторінка 1.



Отримати активну сторінку блокнота
Function Notebook_GetActivePage(Me:PControl): Integer;


Приклад у нас буде такий. Зробимо блокнот із трьома сторінками. На першій у нас буде напис (Label), на другій - флажок (Check), а на третій - змійка, та ще й у невизначеному стані (ви такої ще не бачили). Ну і внизу вікна, під блокнотом буде кнопка "Закрити", яка дійсно закриватиме вікно.

Отже, поїхали. Робимо заготовку TestNbk без ніяких зайвих обробників подій. Описуємо змінні:
NbkPages: PControl;
LabWelcome: PControl;
ChkTruth: PControl;
ProIndet: PControl;
BtnClose: PControl;
Створюємо їх та розкладаємо по сторінках блокнота:
NbkPages:=Ctl.Notebook_Create(Me, False);
LabWelcome:=Ctl.Label_Create(Me, 
  'Welcome to the real world!', Nil, 
  lsComment, alCenter);
Ctl.Notebook_AddPage(NbkPages, 'Нео', 'Neo', Nil);
ChkTruth:=Ctl.Check_Create(Me, 
  'Хочеш знати правду?', True);
Ctl.Notebook_AddPage(NbkPages, 'Морфей', 'Morpheus', Nil);
ProIndet:=Ctl.Progress_Create(Me, 1, 5, 1, pkIndeterm);
Ctl.Notebook_AddPage(NbkPages, 'Трініті', 'Trinity', Nil);
BtnClose:=Ctl.Button_Create(Me, 'Закрити', Kernel.PicClose,
  ppLeft, OnCloseClick);
Тепер малюємо все це. Зверніть увагу - спочатку треба малювати блокнот, а після нього всі елементи керування, розташовані на його сторінках.
Ctl.Notebook_Paint(NbkPages, 5, 5, X2-X1-5, Y2-Y1-30);
Ctl.Label_Paint(LabWelcome, 15, 35, X2-X1-15);
Ctl.Check_Paint(ChkTruth, 15, 35);
Ctl.Progress_Paint(ProIndet, 15, 35, X2-X1-15);
Ctl.Button_Paint(BtnClose, X2-X1-90, Y2-Y1-25, X2-X1-5);
Пишемо простенький обробник для кнопки "Закрити":
Procedure OnCloseClick(Me:PProg; Control:PControl);
Begin
  Kernel.CloseProg(Me)
End;
Ось і все. Можете запустити і подивитись, як працює наш блокнот.