Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab8 ООП.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
7.05 Mб
Скачать

Компонент роботи з графічними файлами (tImage)

Компонент TImage досить універсальний і може відображати картинки різного формату. Але в початковій установці він може завантажувати тільки BMP, JPG, JPEG чи WMF файли. Давай подивимося, як це робиться.

  1. Створіть новий додаток і установите на форму одну кнопку і компонент TImage із закладки Additional.

  1. По натисканню кнопки «Відкрити картинку» пишемо наступний код:

  1. Спробуйте тепер запустити програму і подивитися на результат її роботи. У вікні відкриття файлу подивися, які типи файлів ми можемо відкривати.

Давай навчимо нашу програму працювати з jpeg форматом файлів.

  1. Для початку перемістимося в розділ uses проекту і підключимо туди модуль jpeg. У цьому модулі описане все необхідне для роботи з jpeg форматом зображень.

  2. Залишилося тільки змусити вікно відкриття файлів показувати фільтр на даний тип файлів. Для цього виділите компонент OpenPictureDialog1 і двічі клацніть по властивості Filter.

  1. У четвертому рядку (першому порожньому рядку) напишіть у першому стовпчику «JPEG Files», а в другому стовпчику напишіть «*.jpg».

  2. Можете натискати ОК і запускати програму. Тепер у вікні відкриття графічного файлу можна вибрати тип JPEG і відкрити потрібний файл. Він так само буде завантажений у компонент Image1, навіть не дивлячись на свій складний алгоритм стиску й інший вид збереження даних.

Малювання на стандартних компонентах

Часто, для кращого представлення даних, буде потрібно малювати усередині компонента TListBox.

Секрет малювання полягає в тім, що в компонента TListBox1 властивість Style повинна бути lbOwnerDrawFixed чи lbOwnerDrawVariable .

  1. Створіть обработчик події OnDrawItem для цього компонента й у ньому пишемо:

Оператор "With" говорить, що всі наступні операції будуть виробляється з компонентом (об'єктом) ListBox1.Canvas. Без оператора "With" код виглядав би в такий спосіб:

Тому ми і використовували оператор With

Конструкція Brush.Style:=TBrushStyle(Index) вибирає кисть у залежності від елемента, що малюється в даний момент. Усього існує вісім стилів кисті. Коли з'являється повідомлення OnDrawItem для першого елемента (про це говорить параметр index переданий у процедуру ListBox1DrawItem), ми малюємо елемент із кистю першого стилю. Для другого елемента буде використовуватися другий стиль кисті і т.д.

Олівець ми вибрали прозорим Pen.Style:=psClear, це для того, щоб не було ніяких оборок. Спробуйте забрати цей рядок і подивитися на результат.

Функція Rectangle(х1,у2,х2,у2) малює прямокутник з відповідними координатами. Далі ми зробили прозорої кисть і задали колір тла. Після цього просто виводимо текст рядка за допомогою функції TextOut(х, у, текст).

  1. Спробуйте зробити теж саме з компонентом TComboBox. Не забудь про властивість Style у цього компонента. А в іншому, весь код буде таким же.

Робота з екраном.

  1. Створіть новий проект і встановіть на нього дві кнопки TButton і один TImage. Для першої кнопки напишемо в події OnClick:

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

Тепер про вміст. Ми повідомляємо перемінну ScreenDC типу HDC. HDC - це тип контексту малювання в windows, і працює майже так само, як і TCanvas. За допомогою функції GetDC(0) ми повертаємо уміст вікна зазначеного в дужках. Але в цих дужках стоїть 0 (нуль), а не покажчик на реальний пристрій чи вікно. Це значить, що нам потрібний глобальний контекст, тобто самого екрана.

Далі, викликаємо функцію Rectangle, вона схожа на ту, що ми використовували раніш TCanvas.Rectangle. Є тільки одна відмінність - перший параметр тепер, це контекст пристрою, а потім йдуть координати прямокутника. Це зв'язано з тим, що раніш ми малювали через об'єкт TCanvas, а зараз будемо малювати засобами GDI Windows. Якщо чесно, то процедура TCanvas.Rectangle усього лише викликає Rectangle з Windows API і підставляє потрібний контекст пристрою і розміри, тому в ній на один параметр менше. Зараз ми самі зробимо це, без допомога TCanvas. Після малювання, звільняємо більше не потрібний контекст через функцію ReleaseDC. Такі речі обов'язково треба звільняти, щоб не засмічувати пам'ять.

  1. Зараз можна запустити програму і подивитися на результат.

  2. Для другої кнопки ми напишемо наступний текст по події OnClick:

  1. Тут ми одержуємо копію екрана і зберігаємо її в компоненті Image1.

Кінець роботи

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]