Haiku os: редагування відкомпільованих файлів ресурсів
Відео: Як редагувати PDF файл
Робота з ресурсами в Paladin IDE Для компіляції програми в IDE Paladin з подальшим її зв`язуванням з файлом ресурсів досить включити останній в проект так, як ми це робили з файлами вихідних текстів програми. При цьому в проект може бути включений як заздалегідь відкомпільований файл ресурсів (* .rsrc), так і rdef-скрипт. В останньому випадку Paladin сам здійснить компіляцію і зв`язування ресурсів з програмою.
Редагування відкомпільованих файлів ресурсів
Включати джерельний код зображень в rdef-скрипти вручну, як було показано вище, не дуже зручно. Для операційної системи Haiku є кілька програм, що дозволяють редагувати відкомпілювалися файли ресурсів безпосередньо. Найбільш відомими з них є QuickRes і Resourcer. Я розгляну останню - на мій погляд, працювати з цією програмою зручніше. Втім, QuickRes варто також встановити в системі, оскільки в поставку цієї програми входить довідка, що описує мову rdef набагато докладніше, ніж це зроблено тут.
Отже, програму Resourcer можна завантажити на BeBits за наступним посиланням: https://bebits.com/bob/4874/Resourcer-x86.zip. QuickRes доступна на Haikuware: https://haikuware.com/directory/ start-download / utilities / system-system-information / quickres.
Встановимо Resourcer звичайним способом, розпакувати завантажений архів у каталог / boot. Тепер зробимо Resourcer програмою за замовчуванням для редагування бінарних файлів ресурсів (* .rsrc). Для цього клацнемо правою кнопкою миші по файлу Lucas.rsrc нашої програми і в контекстному меню виберемо Open with ... - FileTypes. У вікні FileTypes в групі «Бажаний додаток» натисніть кнопку «Вибрати ...», після чого в діалоговому вікні вибору файлу відзначте Resourcer і в діалоговому вікні натисніть кнопку «Встановити переважне додаток» (див. Рис. Нижче). Тепер при натисканні на бінарним файлу ресурсів останній буде відкриватися саме в програмі Resourcer.
Вибираємо програму за замовчуванням для редагування файлів ресурсів
Покажемо роботу з редактором ресурсів на прикладі нашої головоломки, трохи змінивши її код. Успадкуємо клас TChip немає від класу звичайної кнопки (BButton), а від класу BPictureButton. Як видно з назви, цей клас призначений для створення кнопок з картинками. Як параметри конструктор класу приймають два покажчика на об`єкт типу BPicture (див. Лістинг 2).
лістинг 2 BPictureButton (BRect frame, const char * name, BPicture * off, BPicture * on, BMessage * message, uint32 behavior = B _ ONE _ STATE _ BUTTON, uint32 resizingMode = B _ FOLLOW _ LEFT | B _ FOLLOW _ TOP, uint32 flags = B _ WILL _ DRAW | B _ NAVIGABLE) -
Перепишемо клас TChip. Оголошення і реалізація класу наведені в лістингу 3.
лістинг 3 #ifndef _ TChip _ h _ #define _ TChip _ h _ #include #include #include enum TChipColour {WhiteChip = 0, BlackChip = 1} - class TChip: public BPictureButton { public: TChip (BRect ChipFrame, const char * psName, BPicture * pOffPicture, BPicture * pOnPicture, BMessage * pMessage); int iCell- TChipColour Colour- int iMove; }; #endif #include "TChip.h" TChip :: TChip (BRect ChipFrame, const char * psName, BPicture * pOffPicture, BPicture * pOnPicture, BMessage * pMessage) : BPictureButton (ChipFrame, psName, pOffPicture, pOnPicture, pMessage, B _ ONE _ STATE _ BUTTON, B _ FOLLOW _ LEFT, B _ WILL _ DRAW) {
this-gt; Colour = WhiteChip; }
Клас BPicture зберігає дані, скопійовані з будь-якого зображення, і відображає їх на кнопці. При цьому об`єкт off зберігає зображення кнопки, яка неактивна (не було натиснуто), а об`єкт on - тієї, яка активна (натиснута користувачем). Таким чином, якщо потрібно щось побачити на кнопці, треба або щось намалювати в об`єкті BPicture, або «намалювати» дані, скопійовані з зображення (BMP, PNG і т.п.), для чого в Haiku API існує інший клас - BBitmap. Останній може лише зберігати дані зображення, але не ма-ет методів його відображення. Зображення отрісовиваєт об`єкт класу BView (або об`єкт класу, від нього успадкованого) методом DrawBitmap.
На жаль, клас BBitmap не надає жодних методів для завантаження даних з файлу BMP. Для цього необхідно використовувати метод GetBitmapFile класу BTranslationUtils з набору TranslationKit. Для роботи з класом необхідно підключити бібліотеку libtranslation.so. Отже, завантаження зображення з файлу може виглядати наступним чином (див. Лістинг 4).
Після цього об`єкт класу BView повинен «намалювати» дані з об`єкта класу BBitmap в об`єкті класу BPicture.
Однак зручніше, коли зображення зберігаються не в зовнішніх файлах, а в самому додатку. Для цього запишемо картинки кнопок в файл ресурсів, після чого вони будуть завантажені в об`єкт класу BBitmap методом GetBitmap класу BTranslationUtils.
За допомогою GIMP я підготував 4 зображення кнопок: - white-up.jpg - біла кнопка, не було натиснуто; - white-down.jpg - біла кнопка, натиснута;
- black-up.jpg - чорна кнопка, не було натиснуто; - black-down.jpg - чорна кнопка, натиснута.
Після цього відкрив відкомпільований файл ресурсу Lucas.rsrc в програмі Resourcer і відредагував його. Як додати об`єкт ресурсів в файл потрібно вибрати в меню Resource - Add Resource ... Для видалення ресурсу з файлу необхідно виділити його у вікні Resourcer і вибрати в меню Resource - Delete Resource. При виборі пункту меню Add Resource ... з`являється діалогове вікно New Resource Properties, в якому в випадаючому списку потрібно вибрати тип додається ресурсу. У нашому випадку це Translator Bitmap. Потім вказуємо номер - id ресурсу і рядок - його назва (див. Рис. Нижче). Назвемо об`єкти ресурсів відповідно файлам: white-up, white-down, black-up і black-down. Після натискання кнопки OK з`явиться діалогове вікно перегляду додається зображення. Натисніть кнопку Open ..., щоб вибрати файл картинки. Додавши всі зображення, виберіть у меню File - Save, щоб зберегти зміни у файлі ресурсів.
Додавання зображення в файл ресурсів
Тепер додамо в конструктор класу головної форми код завантаження зображень з ресурсів в об`єкт класу BBitmap (див. Лістинг 5).
Центральний віджет програми (TCentralWidget), успадкований від класу BView, повинен «намалювати» дані з об`єкта класу BBitmap в об`єкті класу BPicture (див. Лістинг 6).
Тепер ми можемо переробити головоломку так, щоб на кнопках відображались картинки BPicture (див. Лістинг 7).
лістинг 7 fChipTop = MenuFrame.Height () - // Координати 1-й кнопки BRect ButtonFrame = BRect (5, fChipTop, 80, 80) - pChip [0] = new TChip (ButtonFrame, "Button", pWhiteUpPicture, pWhiteDownPicture, pChipMessage [0]); pChip [0] -gt; iCell = 1; int iX = 5; int iY = 80; for (int i = 1 i 3) { j-- // Середня осередок вільна Colour = BlackChip; pChip [j] = new TChip (ButtonFrame, "Button", pBlackUpPicture, pBlackDownPicture, pChipMessage [j]); } else { pChip [j] = new TChip (ButtonFrame, "Button", pWhiteUpPicture, pWhiteDownPicture, pChipMessage [j]); } pChip [j] -gt; iCell = i + 1; pChip [j] -gt; Colour = Colour; } }
Підключаємо бібліотеку libtranslation до проекту Paladin
Зберемо проект головоломкі- при цьому необхідно у вікні системних бібліотек проекту підключити бібліотеку libtranslation.so (див. Рис. Вище). Запустимо програму і переконаємося, що кнопки обзавелися створеними нами зображеннями (див. Рис. Нижче).
Зовнішній вигляд головоломки, що використовує кнопки із зображеннями
Не можна не помітити, що програмування на Haiku API не дуже зручно, і багато розробників віддадуть перевагу більш звичні інструменти. Тому в заключній частині (наступний випуск «Open Source») ми розглянемо роботу з портований на Haiku бібліотекою Qt 4.7.
Ви не програміст, а будівельник і Вас набагато більше, ніж Haiku OS цікавить, де можна придбати пази лдсп (https://zveno-web.ru/raspil-ldsp/ugly-pazy-radiusy.html) хорошої якості і за невисокою ціною ? В такому випадку я настійно раджу Вам завітати на zveno-web.ru. Тут Ви зможете придбати такі вироби на максимально вигідних для себе умовах!