
Розміщуємо власні ікони в динамічній бібліотеці
Перш за все необхідно навчитися створювати самі значки (хоча, якщо вам лінь, то в інтернеті можна знайти сотні готових значків). У Delphi для цього служить Редактор зображень (Image Editor). Для цього:
1. У рядку меню Delphi виберіть команду Tools — Image Editor Запуститься Редактор зображень. Його можливості досить обмежені, зате він доступний у всіх версіях і редакціях Delphi.
2. З меню Редактора зображень виберіть команду File — New — Resource File. Відкриється вікно редагування ресурсів.
3. З меню Редактора зображень виберіть команду Resource — New — Icon. У діалоговому вікні властивостей значка (рис 12 3), що з'явилося, залиште запропоновані значення і натисніть ОК.
У вікні ресурсів з'явиться ім'я нового значка (Icon1). Значок можна перейменувати, клацнувши по його імені. Для прикладу в наступному параграфі нам потрібно, щоб ім'я значка складалося із заголовних букв, тому перейменуйте його в ICON1. Подвійне клацання по цьому імені відкриє вікно редагування значка. Закінчивши малювання значка, закрийте вікно редагування.
5. Таким же чином можете додати в поточний файл ресурсів ще не скільки значків. Коли всі значки будуть готові, виберіть в меню Редактора зображень команду File - Save і збережете файл під ім'ям, наприклад, MYICON.RES.
Створення файлу ресурсів, що містить значки, на цьому закінчене. Залишилося розмістити ці ресурси в динамічній бібліотеці.
1. У рядку меню Delphi виберіть команду File — New — Other. У діалоговому вікні, що з'явилося, перейдіть на вкладку New і виберіть DLL Wizard. Delphi автоматично створить заготівку початкової коди нової бібліотеки.
2. Додайте у відведене для вказівки ресурсів місце початкової коди ім'я тільки що створеного файлу ресурсів:
{$R myicon.res }
3. Збережіть проект бібліотеки в якій-небудь теці і скопіюйте файл MYICON.RES у цю ж теку.
4. Скомпілюйте бібліотеку командою Project — Compile.
Бібліотека створена. Можна переписати програма, створене в попередньому пункті, так, щоб замість системної бібліотеки Shell32.dll воно читало значки з вашої бібліотеки (мал. 4.).
мал.
4
Читаємо з бібліотеки іменовану ікону
Програма, код якого приведений в лістингу 3, завантажувало з бібліотеки всі значки, які в ній зберігаються. Тепер ми дізналися, що у файлі ресурсів, який ми «перетворили» в динамічну бібліотеку, значки зберігаються під іменами. Чи можна витягувати з бібліотеки конкретний значок, знаючи його ім'я? Продемонструємо, як це зробити, і заразом покажемо приклад явної компоновки — завантаження бібліотеки а на вимогу і вивантаження, коли вона більше не потрібна.
Створіть нову програму і помістіть на форму кнопку, після натиснення якої програма витягуватиме з бібліотеки, створеної в попередньому параграфі (Projectl.dll), значок на ім'я ICON1 і намалює його в лівому верхньому кутку вікна.
Наступний код припускає, що бібліотека Projectl.dll скопійована в теку проекту:
procedure Tform1.Button1Click(Sender: TObject);
var
Icon: TIcon, -HandleDLL: THandle;
begin
// створюємо об'єкт для маніпуляцій із значком
Icon := TIcon.Create;
// завантажуємо бібліотеку
HANDLEDLL := LoadLibrary('Projectl.dll');
if HANDLEDLL = 0 then
MessageDlg('Помилка: бібліотека не знайдена', mtError, [mbOk], 0) else begin
// читаємо значок по імені
Icon.Handle := Loadlcon(HANDLEDLL, 'ICON1');
// малюємо значок
Canvas.Draw(10, 10, Icon);
// бібліотека більше не потрібна: вивантажуємо її
FreeLibrary(HANDLEDLL);
// об'єкт значка теж не потрібний
Icon.Free; end; end;
Для звернення до значка в бібліотеці по його імені служить функція Loadlcon, аргументами якої є дескриптор завантаженої бібліотеки, повернений функцією LoadLibrary, і ім'я значка.
Контрольні запитання:
Дати визначення бібліотекі DLL. Поясніть доцільність її приложення.***
Як створити динамічну бібліотеку.***
Наповнення бібліотеки вмістом***
Підключення бібліотеки до програми***
Завантаження бібліотеки в пам'ять***
Як зберегти ресурси в динамічній бібліотеці.****
Література:
Архангельский А.Я. Программирование в Delphi 7, М.,: ООО «Бином-Пресс», 2003 г. – 1152 с.
Дарахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7. — СПб.: БХВ-Петербург, 2003. — 784 с: ил.
Колосов С.В. Программирование в среде Delphi., - Мн.: БГУИР, 2005, - 164 с.
Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно-ориентированное программирование: Учеб. Для вузов / Под ред. Г.С.Ивановой. – М.: Изд-во МГТУ им. Н.Э.Баумана, 2001 – 320с.
Пестриков В.М., Маслобоев А.Н., Delphi на примерах. – СПб.: БХВ – Петербург, 2005. 496 с.