Малюємо елементи C + + Builder

Нарешті настав час зайнятися самої промальовуванням елементів на екрані Як ви памятаєте, ми додавали метод DrawItem як обробник події DrawItem в списку для цієї роботи Сам список не хвилює, що ви малюєте і як ви це робите Замість цього список займається управлінням вибіркою елементів, звязком певних користувачем (програмістом) обєктів з елементами списку та обробкою вибору з допомогою клавіатури від кінцевого користувача З точки зору програмування під Windows список є чудовим прикладом обєктно-орієнтованого дизайну системи

Ось повний код обробник події DrawItem Додайте його в обкладинку методу DrawItem,

яку CBuilder згенерував у вихідному файлі Unit1cpp:

void __fastcall TForm1::DrawItem(TWinControl *Control, int Index, TRect &ampRect, TOwnerDrawState State)

{

Graphics::TBitmap *pic = (Graphics::TBitmap *) ListBox1-&gtItems-&gtObjects[Index]

if ( pic )

{

ListBox1-&gtCanvas-&gtDraw(RectLeft,  RectTop, pic) RectLeft += pic-&gtWidth + 5

}

/ / Якщо користувач вибрав шрифт, використовувати його

if ( FpFont = NULL )

ListBox1-&gtCanvas-&gtFont = FpFont

/ / Встановити обраний користувачем колір

ListBox1-&gtCanvas-&gtBrush-&gtColor = FcColor

ListBox1-&gtCanvas-&gtTextRect(Rect, RectLeft,  RectTop,

ListBox1-&gtItems-&gtStrings[ Index ]c_str() )

}

Перший крок – намалювати растрове зображення в лівій частині області, відведеної для елемента списку Областю управляє список, а нам вона передається у вигляді параметра функції Rect Параметр функції Control – Керуючий елемент, для якого ми малюємо Ми вже й так знаємо, що це за обєкт (у нас у формі тільки один список), так що ми можемо використовувати властивість Canvas нашого обєкта Клас TControl НЕ містить властивості Canvas, так що нам довелося б приводити обєкт Control до обєкта типу TListBox, яким він, власне, і є, перед тим, як ми змогли б його використовувати Так що цей крок просто опустили

Як завжди, промальовування зображення – це задача грамотного розташування його у внутрішній області (canvas) У нас вже є прямокутник (rectangle), що представляє позицію області для цього елемента списку, так що завдання зводиться до використання координат верхнього лівого кута цього прямокутника Потім ми додаємо до горизонтальної координаті ширину зображення і ще пять пікселів для зазору, щоб текст не стояло впритул до зображення

Якщо користувач вибрав шрифт у формі для використання в списку, то ми передаємо його в властивість Canvas Точно також і колір елемента встановлюється у внутрішнє значення FcColor І, нарешті, викликається метод TextRect, який промальовує текст у внутрішній області списку Зауважте використання властивості Strings для отримання тексту елемента перед його промальовуванням Обєкт Canvas автоматично буде використовувати потрібні шрифт і колір, які ми встановили, в методі TextRect, так що це все, що необхідно для промальовування елемента

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

SetListBoxItems()

}

І, нарешті, додайте деструктор для класу форми Тут ми робимо останню підчистку в класі, після чого форма зникає Нам потрібно звільнити память, виділену під растрові малюнки (bitmaps) в конструкторі класу Ось повна реалізація деструктора класу, яку вам потрібно внести в вихідний файл Unit1cpp:

__fastcall  TForm1::~TForm1(void)

{

/ / Видалити з памяті растрові малюнки

delete Fbmp1 delete Fbmp2

}

Скомпілюйте і запустіть додаток Ви побачите те, що зазначено на рис 411 Виберіть новий шрифт, вибравши команду Change & Font з меню і зробіть його більше, ніж попередній Натисніть на OK у вікні діалогу вибору шрифту і простежте зміни в зображенні Повторіть тест, використовуючи новий колір з вікна діалогу вибору кольору (вибравши команду меню Change & Color) Коли ви закінчите тестування, сядьте спокійно і здивуєтеся простоті річний промальовування списків в CBuilder

Рис 411 Новий список з ручною промальовуванням в дії

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*