Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Тема: Елементи управління Win32. Бібліотека ComCtl32. Використання багатосторінкових блокнотів – компоненти TTabControl і TPageControp. Використання списків рисунків (TImageList). Панелі



Лекція 5 (4 год.):

Тема: Елементи управління Win32. Бібліотека ComCtl32. Використання багатосторінкових блокнотів – компоненти TTabControl і TPageControp. Використання списків рисунків (TImageList). Панелі інструментів і строка стану (TToolBar і TStatusBar)

 

План:

1. Визначення бібліотеки ComCtl32

2. Багатосторінковий блокнот — компоненти TTabControl і TPageControl

3. Компонент TToolBar

4. Компонент TlmageList

Елементи управління складають сенс призначеного для користувача інтерфейсу Windows. Всіма програмами потрібно управляти більш менш одноманітно, тому у складі ОС є набір типових кнопок, редагуючих елементів, списків вибору і т. п., якими ви можете "прикрасити" свої розробки. Перелік цей постійно поповнюється.

Елементам управління, що прийшли з складу Windows присвячується окрема сторінка в Палітрі компонентів під назвою Win32. Їх кількість постійно росте.

Що таке бібліотека ComCtl32

Змінивши зовнішній вигляд "вікон" в Windows 95, менеджери Microsoft задумалися про те, щоб дати незалежним засобу для. Наприклад, всі ці елементи автоматично підтримують встановлені в системі колірне оформлення, розмір, шрифт і тому подібне

Всі елементи, які дозволяють розробникам створювати програми, що зовні схожих на системні утиліти і використовують єдині типові елементи управління, об'єднуються в бібліотеці ComCtl32.dll. Всі компоненти сторінки Win32 в Палітрі інструментів Delphi узяті з бібліотеки ComCtl32.

Багатосторінковий блокнот — компоненти TTabControl і TPageControl

У Палітрі компонентів є два елементи управління, що забезпечують створення багатосторінкових блокнотів. Це компоненти TTabControl і TPageControl. Перемикання між сторінками здійснюється за допомогою закладок. Закладки можуть виглядати як звичайні в паперовому блокноті, а можуть бути схожі на стандартні кнопки Windows. До речі, сама Палітра компонентів Delphi є прикладом використання такого елементу управління.

Компонент TTabControl відрізняється тим, що є як би "віртуальним" блокнотом. Це — єдиний об'єкт з однією фактичною сторінкою. При перемиканні закладок здійснюється виклик методу-обробника події

property OnChange: TNotifyEvent;

відповідний код в якому може змінити набір видимих елементів управління і створити для користувача ілюзію "перемикання сторінок".

Компонент TPageControl є контейнером для об'єктів TTabSheet, відповідних окремим сторінкам блокнота. Сторінки в нім можуть нести кожна свій набір дочірніх компонентів; їх можна перемикати вже під час розробки.



Перший підхід зручний, якщо на різних сторінках у вас повинні розташовуватися одні і ті ж компоненти, "начинені" різними даними.

Другий підхід необхідний, якщо у вас дійсно різні сторінки з різними наборами компонентів на них. Компонент TPageControl використовують для створення редакторів властивостей і настройок програми.

Обидва компоненти в своїй основі мають загальний елемент управління з бібліотеки ComCtl32 (у документації Microsoft він називається Tab Control). Спочатку розглянемо загальні для двох компонентів властивості, а потім особливості використання сторінок. Перераховані властивості і методи в нащадках оголошуються як опубліковані (published).

Таблиця 1. Основні властивості, загальні для TTabControl і TPageControl

Оголошення

Опис

property Tablndex: Integer;

Задає номер поточної сторінки, починаючи з 0

property TabHeight: Smallint;

Задає висоту закладок в пікселах. При значенні 0 висота визначається автоматично так, щоб вміщати текст

property TabWidth: Smallint;

Задає ширину закладок. При значенні 0 ширина визначається автоматично так, щоб вміщати текст

type TTabStyle = (tsTabs, tsButtons, tsFlatButtons);

property Style: TtabStyle;

Визначає стиль закладок компоненту:

· tsTabs — стандартні закладки;

· tsButtons — об'ємні кнопки;

· tsFlatButtons — плоскі кнопки

type TTabPosition = (tpTop, tpBottom, tpLeft, tpRight);

property TabPosition: TTabPosition;

Визначає розташування закладок на компоненті. Розташування, відмінне від tpTop, можливо тільки для стилю tsTabs

property HotTrack: Boolean;

При значенні True назви сторінок виділяються кольором при переміщенні над ними покажчика миші

property Images: TCustomlmageList;

Указує на список картинок, що з'являються на закладках сторінок

property RaggedRight: Boolean;

При значенні True ширина закладок змінюється так, щоб вони не займали всю сторону блокнота

property MultiLine: Boolean;

При значенні True закладки сторінок можуть розташовуватися в декілька рядів (якщо вони не поміщаються в один). При значенні False у верхньому правому кутку з'являються кнопки, організуючі прокрутку невидимих заголовків

property ScrollOpposite: Boolean;

При значенні True, якщо закладки розташовані в декілька рядів, при переході до закладки наступного ряду решта всіх рядів переміщається на протилежну сторону блокнота. Дійсно тільки при MultiLine=True

Таблиця 2. Основні методи-обробники, загальні для TTabControl і TPageControl

Оголошення

Опис

type TTabChangingEvent = procedure (Sender: TObject; var AllowChange: Boolean) of object; property OnChanging: TTabChangingEvent;

Викликається безпосередньо перед відкриттям нової сторінки. Параметр AllowChange, встановлений в значення False, забороняє відкриття

property OnChange: TNotifyEvent;

Викликається при відкритті нової сторінки

property OnDrawTab: TDrawTabEvent;

Викликається при перемальовуванні сторінки, тільки якщо властивість

OwnerDraw = True

property OnGetlmagelndex: TTabGetlmageEvent;

Викликається при відображенні на закладці картинки

 

Як видно з таблиці, більшість властивостей забезпечують різні стилі представлення багатосторінкового блокнота. При настройці стилю звернете увагу, що властивість RaggedRight може не працювати, оскільки вступає в суперечність з властивістю TabWidth. При TabWidth = 0 компонент змінює ширину закладок відповідно до довжини тексту, інакше ширина закладок завжди рівна значенню властивості Tabwidth.

У списку перераховуються заголовки сторінок, для яких автоматично створюються закладки. Порядок проходження сторінок залежить від розташування текстів заголовків у властивості Tabs.

Компонент TPageControl, на відміну від TTabControl, для забезпечення роботи створює "справжню" сторінку — екземпляр класу TTabSheet. Список покажчиків на всі створені екземпляри сторінок зберігається у властивості Pages, доступній тільки для читання:

property Pages[Index: Integer]: TTabSheet;

Загальне число сторінок зберігається у властивості

property PageCount: Integer;

доступному тільки для читання. Поточну сторінку можна задати властивістю:

property ActivePage: TTabSheet;

Якщо під час розробки (цією можливістю компонент TPageControl відрізняється від свого побратима) або під час виконання перемкнутися на іншу сторінку, значення властивості ActivePage зміниться.

Також для переходу на сусідню сторінку програмними засобами можна використовувати метод

procedure SelectNextPage(GoForward: Boolean);

у якому параметр GoForward при значенні True задає перехід на наступну сторінку, інакше — на попередню.

Розглянувши властивості блокнота, звернемося до його сторінок і зупинимося докладніше на можливостях класу TTabSheet. На власника сторінки указує значення властивості

property PageControl: TPageControl;

Розташування сторінки в блокноті задає властивість Pageindex:

property Pageindex: Integer;

Якщо в блокноті одночасно виділено декілька сторінок, то положення даної сторінки серед виділених визначається властивістю тільки для читання

property Tablndex: Integer;

Сторінка може тимчасово "зникнути" з блокнота, а потім знову з'явитися. Для цього застосовується властивість

property TabVisible: Boolean;

Компонент TToolBar

Можливість створити панель інструментів з'явилася у розробника давно, починаючи з перших версій Delphi. Тоді вона була реалізована за допомогою поєднання компонентів TPanel і TSpeedButton. Зараз панель інструментів отримала розвиток з появою стандартного елементу управління TToolBar, який об'єднує розташовані на ній кнопки і інші елементи управління і централізовано управляє ними.

Всі кнопки (клас TToolButton) на панелі інструментів мають однаковий розмір, що задається властивостями:

property ButtonWidth: Integer;

property ButtonHeight: Integer;

Але ці властивості спрацьовують тільки тоді, коли властивість

property ShowCaptions: Boolean;

має значення False. Воно відповідає за видимість написів на кнопках компоненту. І якщо ці написи повинні бути видимі, то розмір кнопок автоматично підстроюється під розмір кнопки з щонайдовшим текстом.

На кожній кнопці можуть відображатися два її атрибуту — текст (заголовок кнопки, властивість Caption) і картинка. Показ тексту можна заборонити установкою властивості ShowCaptions в значення False.

Панель інструментів важко собі уявити без картинок, що прикрашають її. У компоненту TToolBar три властивості, картинок, що посилаються на списки:

property Images: TCustomlmageList;

property Disabledlmages: TCustomlmageList;

property Hotlmages: TCustomlmageList;

У звичайному перебуванні на кнопках відображаються картинки з набору, вказаного властивістю images. Якщо кнопка неактивна (властивість Enabled обернена в False), напис на кнопці відображається сірим кольором і на ній показується картинка З властивості Disabledlmages.

Текст і картинка на кнопці можуть розташовуватися один щодо одного двома способами, залежно від значення властивості List. Якщо властивість List рівна значенню False (установка за умовчанням), то картинка розташовується зверху, текст — знизу. Інакше ви побачите текст праворуч від картинки.

Панелі інструментів — це контейнери, але і вони часто розташовуються на контейнерах — компонентах TCoolBar і TControlBar. Ті, як правило, мають свою фонову картинку, і розташований зверху компонент TToolBar можна зробити прозорим. За це відповідає властивість:

property Transparent: Boolean;

Особливо зручно використовувати його, якщо встановлений режим плоскої панелі — в цьому випадку прозорий не тільки фон самої панелі, але і всіх кнопок на ній.

Перейдемо до розгляду функціональних можливостей кнопок. Головна подія і для кнопки TToolButton, і для панелі TToolBar — подія onclick. Окрім нього вони можуть відреагувати тільки на переміщення миші і на процеси перетягання/приєднання (Drag-and-Drop, Drag-and-Dock;).

З іншого боку, кнопки можна натискати в різноманітних варіантах і поєднаннях: властивість style об'єкту TToolButton:

type TToolButtonStyle = (tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider);

property Style: TToolButtonStyle;

Стилі tbsSeparator і tbsDivider призначені для оформлення панелі і є порожнім місцем і вертикальним роздільником відповідно. Звичайна кнопка — це, ясна річ, стиль tbsButton.

Якщо ви хочете створити одну або декілька кнопок, що "залипають" після натиснення, виберіть стиль tbsCheck. Після клацання така кнопка залишається в натиснутому стані до наступного натиснення. Про її стан говорить властивість:

property Down: Boolean;

Якщо потрібна група кнопок, з яких тільки одна може перебувати в натиснутому стані, слід скористатися властивістю:

property Grouped: Boolean;

Така група називається групою із залежним натисненням. Якщо на панелі інструментів є ряд розташованих підряд кнопок з style=tbscheck і Grouped=True, то цей ряд володітиме властивостями групи із залежним натисненням. Якщо груп залежних кнопок повинно бути дві і більш, розділити ЇХ Між собою можна кнопкою іншого стилю (наприклад, tbsSeparator або tbsDivider) або будь-яким іншим елементом управління (мал. 5.1).

У такій групі завжди повинна бути натиснута хоч би одна кнопка; на етапі розробки встановите її властивість Down в значення True. Але якщо це вам не підходить, можна встановити властивість

property AllowAllUp: Boolean;

у значення True — і можна віджимати всі кнопки. Значення цієї властивості завжди однаково для всіх кнопок в групі.

Якщо в якійсь ситуації одна або декілька кнопок повинні стати недоступними, для цього можна встановити властивість Enabled в значення False. Але у кнопок в групі є ще і третій стан — невизначене:

property Indeterminate: Boolean;

Такі кнопки виділяються сірим кольором, щоб показати користувачеві, що їх вибирати не слід. Перехід в стан indeterminate=True все ще дозволяє кнопці обробляти подію onclick, але при цьому вона переходить у віджатий стан (Down=False). Але — тільки до наступного натиснення. Після нього кнопка виходить із стану Indeterminate.

Властивість

property Marked: Boolean;

відображає поверхню кнопки синім кольором (точніше, кольором clHighlight), як у виділених об'єктів. На відміну від попереднього випадку з indeterminate кнопка залишається в стані Marked незалежно від натиснень аж до привласнення цій властивості значення False.

Наявність обробників подій onMouseDown/onMouseUp не заважає натисненню кнопок — натиснення все одно викликає подію onclick.

Компонент TToolBar може стати повноцінною заміною головного меню (погляньте хоч би на застосування з складу MS Office 97 або 2000). До кожної з кнопок можна приєднати меню — і не одне, а цілих два:

property DropdownMenu: TPopupMenu;

property PopupMenu: TPopupMenu;

Для того, щоб після натиснення лівої кнопки миші випадало меню DropdownMenu, потрібно встановити один із стилів кнопок — tbsButton або tbsDropdown. У першому випадку меню з'явиться при натисненні в будь-якій частині кнопки. При цьому подія onclick не виникає; кнопка через це стає "неповноцінною" — вона придатна тільки для показу меню. Другий випадок — стиль tbsDropdown — спеціально призначений для зручності роботи з випадними меню. Меню з'являється при клацанні на спеціальній області із зображенням трикутника в правій частині кнопки. А ось клацання на решті частини кнопки, як завжди, викличе подію onclick.

Компонент TlmageList

Для централізованого управління картинками з'явився елемент управління TImageList. Він є оболонкою для створення і використання колекції однакових за розміром і властивостями зображень. На етапі розробки її "начиняють" картинками. Компонент TImageList володіє двома властивостями — Images І Imagelndex. Перше указує на список (компонент TlmageList), друге — на конкретну картинку в цьому списку.

Найпростіше заповнити список за допомогою вбудованого редактора, виконавши подвійне клацання на компоненті або вибравши пункт Image List Editor в його контекстному меню.

З будь-якої точки зору правильніше явно читати картинки з ресурсів. Послідовність дій для цього наступна:

1. Створити початковий файл ресурсів, куди потрібно включити і пойменувати необхідні файли з розширенням bmp, наприклад:

inout BITMAP "inout.bmp"

tools BITMAP "tools.bmp"

Зберегти цей файл з розширенням rс, скажімо, bitmap.rс.

2. Скомпілювати ресурси за допомогою утиліти brcc32.exe, що поставляється з Delphi:

C:\Program Files\Borland\Delphi7\bin\brcc32 bitmap.rc

3. Файл bitmap, що з'явився.res потрібно включити до складу проекту. Для цього використовується директива $R:

{$R bitmap.res}

4. Тепер картинка міститься в ресурсах і буде включена до складу виконуваного файлу. Залишилося завантажити її в компонент TimageList. Для цього використовується метод ResourceLoad:

ImageListl.ResourceLoad(rtBitmap, 'bitmaps',TColor(0));

При цьому відбудеться автоматична "нарізка" картинок відповідно до властивостей width і Height. Якщо розмір великої картинки, наприклад, 256x16 пікселів, а ширина, задана властивістю TimageList, рівна 16 пікселам, то в список будуть включено 16 елементів розміром 16x16. Тому ще в час розробки потрібно правильно набудувати розміри в компоненті TimageList, інакше після завантаження ресурсу картинки розрізатимуть абияк.

Є і інший метод завантаження — FileLoad:

function FileLoad(ResType: TResType; Name: string; MaskColor: TColor): Boolean;

Аналогічним шляхом він дозволяє завантажувати картинки з будь-якого придатного файлу. Але завантаження з файлу менш надійне — немає гарантії, що у користувача вашого застосування потрібний файл завжди знаходиться на місці і він не змінений.

Панель стану TStatusBar

Цей вид елементів управління застосовується вже достатньо давно. Його роль полягає у відображенні різного роду довідкової інформації. Панель стану інкапсульована в компоненті TStatusBar.

Зазвичай панель стану розміщується в нижній частині вікна. Тому при перенесенні на форму властивість Align завжди має значення alBottom. Панель стану можна розділити на довільне число самостійних частин. Кожна частина описується об'єктом TStatusPanel. Колекція всіх таких об'єктів знаходиться у властивості

property Panels: TStatusPanels;

Наприклад, для того, щоб показати на панелі стану поточну дату і час, в методі-обробнику OnTimer компоненту TTimer досить передбачити наступний код:

procedure TForml.TimerITimer(Sender: TObject);

begin

StatusBar1.Panels[0].Text:= DateToStr(Now);

StatusBarl.Panels[1].Text:= TimeToStr(Now);

end;

Контрольні запитання:

1. Дати визначення бібліотеки ComCtl32.**

2. Компоненти TTabControl і TPageControl ***

3. Елемент управління TimageList***

4. Панель стану TstatusBar***

Література:

 

  1. Архангельский А.Я. Программирование в Delphi 7, М.,: ООО «Бином-Пресс», 2003 г. – 1152 с.
  2. Дарахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7. — СПб.: БХВ-Петербург, 2003. — 784 с: ил.
  3. Колосов С.В. Программирование в среде Delphi., - Мн.: БГУИР, 2005, - 164 с.
  4. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Об'ектно-ориентированное программирование: Учеб. Для вузов / Под ред. Г.С.Ивановой. – М.: Изд-во МГТУ им. Н.Э.Баумана, 2001 – 320с.
  5. Пестриков В.М., Маслобоев А.Н., Delphi на примерах. – СПб.: БХВ – Петербург, 2005. 496 с.

 


Дата добавления: 2015-08-29; просмотров: 31 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Омская Государственная Медицинская Академия | ОП5 - Метрология, стандартизация и квалиметрия

mybiblioteka.su - 2015-2024 год. (0.025 сек.)