Будучи розширюється середовищем розробки програм, VB дозволяє створювати додатки, що використовуються в ньому самому. Для цього в ньому існує т.зв. інтегроване середовище розробки, або простіше IDE.
Ви, в своїх програмах, вже використовували такі надбудови (Add-In), наприклад Class Builder Utility або Rtsource Editor. Програми, які спрощують і полегшують роботу програміста, позбавляючи його від написання часто повторюваного однотипного коду. Коли Microsoft віддала "на відкуп", спочатку третім фірмам, а потім і самим програмістам створення надбудов, то в підсумку - лише виграла. Потрібно Вам специфічне додаток - створюйте його самі під себе. Що я, власне кажучи, і хочу продемонструвати в даній статті.
Однак, перш ніж ми почнемо, необхідно відзначити деякі складності в створенні надбудов:
- Add-In це, в своїй суті, динамічна бібліотека (DLL), написана на VB. Тому, що тестується надбудову треба запускати в одному додатку VB, а саме тестування проводити в іншому.
- За своєю структурою, Add-In - це модуль класу і все, що ми оголосимо як Public, буде доступно нам в будь-який інший частини програми.
- Напевно найголовніше, ми повинні будемо написати два вірних без помилок :) коду: один для самої надбудови, а другий для того додатка, куди ми будемо її інтегрувати.
Досить слів, решта скажу по ходу пояснення програми. А створювати ми будемо надбудову, яка створює вертикальне меню. Ну не зовсім меню (в істинному його розумінні), а тільки його емуляцію.
Створимо новий проект, вибравши в діалоговому вікні не Standard EXE, як це ми робимо зазвичай, а опцію Addin. Програма створить Вам шаблон додатки, дещо відмінний від того, до чого Ви звикли, створюючи стандартні програми. Так, тут є розділ Forms з "голою" формочкой, але, найголовніше, з'явився новий розділ - Designers, з включеним в нього об'єктом Connect.
Давайте для початку трохи докладніше розберемося з тим, що пропонує Microsoft в цьому шаблоні. Для тих, кому це нецікаво (адже код кожного разу формується один і той же) може пропустити цю частину.
- Отже, дві глобальні процедури, керівні відкриттям і приховуванням основної форми надбудови (Show і Hide). Нічого надординарного, за винятком того, що використовується приховування форми, а не її вивантаження, що створює певні труднощі. Вивантаження ж проводиться тільки при від'єднанні надбудови від проекту.
- У розділі декларацій необхідно відзначити кілька моментів:
- У разі перейменування відображається форми, не забудьте зробити відповідну поправку в рядку: Dim mfrmAddIn As New [НовоеІмяФорми]
- Звичайно ж глобальна змінна VBInstance. Дана змінна оголошена як тип VBIDE.VBE і представляє поточний екземпляр VB. Всі подальші звернення до до внутрішньої структурі поточного проекту здійснюються саме через цю змінну.
- Змінна (Dim mcbMenuCommandBar As Office.CommandBarControl) відкриває нам "доступ до тіла" меню, дозволяючи не тільки зчитувати значення, а й маніпулювати рядками меню, як в своєму додатку.
- Наступні внутрішні процедури і функції керують додаванням і видаленням з меню VB імені нашої надбудови.
У більшості випадків, того, що нам за замовчуванням дає шаблон, цілком достатньо для роботи. Однак це не означає, що ми не можемо виробляти в ньому зміни. Трохи пізніше ми повернемося до дизайнера Connect для додавання деяких своїх процедур і коригування існуючих.
Отже, перейменуємо проект Name = SideMenu. Відкриємо Connect і внесемо деякі поправки, згідно представленого нижче малюнка.
Тепер настав самий час навчитися проводити тестування нашої надбудови. Будьмо уважні, адже ми працюємо безпосередньо з середовищем VB!
- Запустіть ще один проект, тепер вже Standard Exe
- Поверніться у вікно з нашої надбудовою та запустіть її на виконання (F5)
- Знову перейдіть в тестіровочного проект і виберіть меню Add-Ins / Add-In Manager.
Для виходу з тестування:
- Виберемо меню Add-Ins / Add-In Manager. і відключимо опцію Loaded / Unloaded з нашої надбудови. ОК.
- Перейдемо в робоче вікно VB з нашим додатком (надбудовою) і зупинимо його.
NB! Якщо вимкнути основне додаток, заздалегідь не вивантаживши з тестіровочного проекту посилання на нього, то там (в тестіровочного проект) залишиться меню нашого застосування (непрацюючі!). І при наступному тестуванні нижче додасться ідентичне меню (працює).
Продовжимо роботу. Повернемося до форми frmAddIn. Розташуємо на ній елементи управління, приблизно як на запропонованому тут малюнку.
За замовчуванням в ній створюється зовсім небагато коду: тільки для обробки натискання клавіш. Займемося додаванням коду для додавання і видалення назв меню в лістбокс (Name = lstMenu). Нічого принципово складного або нового в цих кодах немає. Після перевірки на допустимість додається або видаляється запис з лістбокса. У події Form_Load додамо інформаційний текст, що виводиться на лейблі (Name = lblInfo).
Повернемося в Connect і додамо коди для поновлення комбобокса (Name = cboForm) з переліком форм. Вся справа в тому, що закривши (але не вивантаживши) наш плагін, ми тільки приховуємо його (метод Hide). Тому, якщо була додана нова форма, то вона в комбобоксе не відображається. Виправимо це. Напишемо процедуру AddInCombo, а потім викличемо її в процедурі Show. Спочатку оголосимо об'єктну змінну активного проекту і змінну кількості компонентів (форм, модулів, модулів класів і т.п.) в цьому проекті. Очистимо комбобокс, а потім в циклі For. Next перевіримо ці компоненти. Якщо це форма - додаємо в комбобокс. В кінці не забудьте звільнити пам'ять, видаливши тимчасово створені об'єкти.
Ну що ж, пора зайнятися основним кодом (то, що виходить при натисканні кнопки ОК на формі frmAddIn).
Спочатку, природно, перевірка на помилки: наявність в проекті хоча б однієї форми, наявність хоча б одного створюваного меню і функція ErrName, що перевіряє: чи немає випадково вже об'єктів на даній формі з такими ж іменами (для уникнення аварійного виходу з програми).
Далі инициализируем об'єкти поточного екземпляра VB: Проект і Поточну Форму (ім'я береться з комбобокса).
Подальші дії представлені двома блоками: додавання елементів управління на форму і додавання коду.
Для того щоб додати елемент на форму необхідно використовувати метод (нізащо не здогадаєтеся про його імені :)) Add. Після того як елемент доданий, можна зайнятися установкою його властивостей. Першим встановлюються елементом у нас буде PictureBox, який зобразить з себе панель меню, і з'явиться контейнером для інших ЕУ.
Для інших елементів управління - принцип той же самий. Єдине, що у нас додасться - це цикл For. Next, який повторює цю операцію стільки разів, скільки меню ми створюємо.
Отримання доступу до кодів здійснюється ідентично, тому що модуль коду так само є об'єктом VB. Спочатку необхідно знайти "Option Explicit" (він може знаходитися не на першому рядку) і після нього вставити сформований нами код. Виділимо на пошук. думаю 20 рядків коду модуля досить.
Вставка коду здійснюється за допомогою методу InsertLine, з параметрами: з якого рядка починати вставку тексту (наступною після Option Explicit) і що саме вставляти.
Звільняємо пам'ять, знищуючи створені в даній процедурі об'єкти. Set thisProject = Nothing Set thisForm = Nothing Set PanelMenu = Nothing Set ctrlMenu = Nothing Set mnuMenu = Nothing Set mnuSubMenu = Nothing Set thisCode = Nothing Screen.MousePointer = vbDefault
Виводимо frmConfirm, з додатковою яка б пояснила інформацією і закриваємо Connect.
Я не буду детально зупинятися на розгляді вставляється коду (хоча він сам по собі досить цікавий), так як це не є темою даної статті. Зазначу лише, що для формування повноцінного коду необхідно спочатку в окремому проекті створити те, що ми хочемо в підсумку отримати. Відпрацювати на предмет помилок. Потім скопіювати в свій додаток і замінити конкретні імена об'єктів на змінні. Докладний текст дивись в лістингу.
У формі frmConfirm запишемо виведену інформацію для користувача. А кнопці запишемо команду закриття форми.
Протестуємо наше додаток. Якщо забули як це робиться см. Сюди.
У Connect запишемо необхідний код:
При повторному тестуванні - все нормально.
У нас залишилася тільки одна незадіяна кнопка - "Про програму". Якось Олександр Клімов, провідний сайту "Русскій_проект" сказав мені, що вікно About, крім загальної текстової інформації, має максимально відображати те, чому присвячена дана програма. Тому ми замість кнопки "Вихід" зробимо на вікні frmAbout наше бічне меню. Згенеруємо код в тестіровочного вікні. Вийдемо з режиму тестування і скопіюємо отриману форму в наш проект. У frmAddIn запишемо код для кнопки cmdAbout.
Ми закінчили створення Add-In'а для VB. скомпілюємо проект
NB! Якщо Ви переносите даний плагін (скомпільований) на інший комп'ютер, не забудьте його зареєструвати за допомогою regsvr32.exe, або можна скористатися моєю утилітою Reg.