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

Сайт Польоту
 

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

Цей елемент керування, як неважко здогадатися, дозволяє розмістити у вікні програми картинку. Крім цього нічого корисного він не робить :).



Створити елемент керування-картинку
Function PicCtl_Create(Prog:PProg; VPicture:Pointer;
  VBeveled,VBig:Boolean):PControl;
  • VPicture - вказівник на картинку.
  • VBeveled - флажок, чи малювати рамку навколо картинки: True - малювати, False - не малювати.
  • VBig - флажок, чи треба збільшувати картинку в 8 разів (наприклад, як у вікні Майстра програм).


Намалювати елемент керування-картинку
Procedure PicCtl_Paint(Me:PControl; VX,VY:Integer);
Розміри залежать від розмірів картинки.



Установити картинку елемента керування-картинки
Procedure PicCtl_SetPicture(Me:PControl; 
  VPicture:Pointer);
VPicture - вказівник на нову картинку



Цей приклад буде неймовірно простим. Робимо заготовку нової програми TestPic.pas, заводимо змінну PctTest: PControl, створюємо картинку:
PctTest:=Ctl.PicCtl_Create(Me, Me.Icon, False, False);
Ну і малюємо її:
Ctl.PicCtl_Paint(PctTest, 10, 10);
Можна запускати. У вікні програми буде намальована її ж іконка. Можете поекспериментувати з булівськими флажками при створенні картинки і подивитись, як виглядатиме картинка.

А ось як показати у PicCtl будь-яку картинку, наприклад, з даного BMP-файла? Це трохи складніше, тут треба користуватись механізмом ресурсів та модулем Pic. Але це важлива техніка; тому я все ж таки покажу, як це робити, але без пояснень. Робиться це у три кроки.
  • Заводиться змінна - вказівник на нашу картинку (як і завжди, у записі TTestPicData):
    PicLogo: Pointer;
  • В OnInit перед створенням елементів керування вона завантажується як BMP-ресурс:
    PicLogo:=Kernel.LoadBMPRes('pic\biglogo.bmp');
    Тепер при створенні елементів керування-картинок можна використовувати PicLogo, наприклад:
    PctTest:=Ctl.PicCtl_Create(Me, PicLogo, False, False);
  • В обробнику OnClose ми маємо звільнити завантажений ресурс:
    Kernel.FreeRes('biglogo.bmp');
    Зверніть увагу, тут вказується ім'я файла без шляху до нього.