Андрій Колесов, Ольга Павлова
Рада 204. Як намалювати рамку на формі без допомоги елемента управління Frame
Функція DrawEdge, що входить до складу Win32 API, дозволяє досягти дуже цікавих ефектів. Використовуючи константи EDGE_ ви можете задати різні типи меж рамки, завдяки чому вона буде виглядати втопленою або піднятою над формою. А константи BF_ визначають межі рамки, які слід малювати (наприклад, за допомогою BF_BOTTOM ви можете намалювати тільки нижню межу рамки):
У події Form_Paint введіть наступний код, який говорить про те, що ви хочете намалювати прямокутник, який піднятий над формою:
Рада 206. Видалення всіх виділених елементів в списку
Якщо у вас є необхідність видалити відразу кілька елементів зі списку, що підтримує режим MultiSelect, скористайтеся наступною простою програмою. Припустимо, у нас є вікно списку, що складається з п'яти елементів: Елемент1, Елемент2, Елемент3, Елемент4 і Елемент5. Встановимо властивість MultiSelect елемента управління ListBox як Extended або Simple, а потім введемо такий код:
Помістимо на форму командну кнопку з ім'ям "Видалити" і напишемо для неї наступне:
Тепер запустимо нашу програму, виділимо три елементи (Елемент1, Елемент3 і Елемент5), а потім клацнемо кнопку "Видалити". І це все!
Рада 207. Як зробити горизонтальну лінійку прокрутки в елементі управління RichTextBox
За замовчуванням, коли ви ставите елемент керування RichTextBox на форму, VB встановлює властивість RightMargin як 0. Це означає, що вводиться користувачем текст цілком розташовується всередині текстового вікна. Для виведення горизонтальної лінійки прокрутки необхідно, щоб значення властивості RightMargin було більше, ніж ширина текстового вікна. Інакше, навіть якщо встановити властивість ScrollBars як 1 rtfHorizontal, RichTextBox не виведе лінійку прокрутки.
Наприклад, помістіть на форму елемент управління RichTextBox, що має ширину 3200. Потім встановіть властивість RightMargin як 3300, а властивість ScrollBars - як 1 rtfHorizontal. Запустіть проект на виконання і почніть вводити текст. Коли ви досягнете межі текстового вікна, VB виведе горизонтальну лінійку прокрутки.
Рада 208. Додавання нового рядка до тексту в елементі управління TextBox
Іноді вам може знадобитися додати додаткову інформацію до вже існуючого тексту в багаторядковому елементі управління TextBox (властивість MultiLine встановлено як True). Припустимо, що ви хочете додати рядок такого виду: "Оновлення:" плюс поточна дата. Для цього можна скористатися властивостями SelStart і SelText. Як ви вже, мабуть, знаєте, властивість SelStart повертає або встановлює початок виділення, властивість SelText - фактично виділений текст. Якщо текст не містить ніякого виділення, обидва властивості повертають точку вставки (insertion point). Тому, щоб вставити новий рядок тексту в многострочное текстове вікно, використовуйте подібний код:
Цей код пересуває точку вставки до кінець будь-якого тексту в елементі управління Text1, а потім вставляє новий рядок, що містить додаткову інформацію.
Рада 209. Як змусити VB 6.0 відкривати вікно коду в "розгорнутому" режимі
VB 5.0 завжди зберігав установки інтегрованого середовища розробки (IDE), задані вами під час останньої сесії. Так, він пам'ятав, з якими вікнами ви вважаєте за краще працювати - з нормальними або "розгорнутими". На жаль, VB 6.0 цього не робить - він завжди відкриває вікна Code і Object в нормальному режимі. Цю проблему можна вирішити, провівши невеликі зміни в Windows Registry, так що IDE буде відкривати ці вікна в "розгорнутому" режимі. Однак вони будуть ЗАВЖДИ розширені до розміру екрана - VB 6.0 як і раніше не зможе зберігати установки для IDE між сесіями.
При роботі з Регістром потрібно бути особливо обережними, тому, перш ніж приступити до внесення в нього змін, зробіть резервну копію, так щоб можна було відновити Регістр в разі будь-яких збоїв.
Отже, щоб змусити VB 6.0 відкривати вікно Code або Object в "розгорнутому" режимі, ви повинні додати нову величину MDIMaximized до наступного ключа Registry: HKEY_CURRENT_USER / Software / Microsoft / Visual Basic / 6.0 / MDIMaximized = "1" Для цього в Windows клацніть кнопку Start і виберіть команду Run. Введіть RegEdit в діалоговому вікні Run, потім клацніть OK. Тоді Windows виведе на екран системний Регістр, в якому знайдіть папку VB 6.0. Після цього клацніть правою кнопкою миші в будь-якому місці на правій панелі і виберіть New | String Value з контекстного меню. Введіть MDIMaximized як ім'я та натисніть клавішу Enter. Тепер клацніть правою кнопкою миші елемент MDIMaximized і виберіть Modify з контекстного меню. І нарешті, в діалоговому вікні Edit String введіть 1 у якості нової величини і клацніть OK. Коли ви це зробите, Windows присвоїть введену вами величину елементу MDIMaximized. От і все! Тепер закрийте Регістр і відкрийте вікно Code або Object в будь-якому з проектів VB 6.0. IDE виведе ці вікна в "розгорнутому" режимі.
Крім того, що ви можете оголошувати тип змінної в явному вигляді, VB дозволяє робити це за допомогою спеціальних символів. Наприклад, замість використання:
ви можете просто написати:
Ось повний перелік типів даних і відповідних їм символів:
Однак слід дотримуватися обережності при використанні цих символів, оскільки вони знижують читаність вашого коду.
Рада 211. Створення об'єкта Excel в VB
У раді 197 (КомпьютерПресс 6'99, компакт-диск) ми розповіли про те, як створити об'єкт Word в VB. Тепер ми покажемо, як виконати ту ж саму процедуру для Excel.
В першу чергу додайте до VB-додатком посилання до Microsoft Excel 8.0 Object Library (команда Project | References).
Потім введіть наступний код для створення екземпляра Excel:
І нарешті, уважно вивчіть Object Browser в VB для отримання інформації про інші властивості і методи об'єкта Excel.
Рада 212. Нехай функція DateDiff розбирається з датами
Тут функція DateDiff обчислює різницю в календарних місяцях між двома датами (аргумент "m"). Якщо вона повертає 0, то обидві дати знаходяться в одному і тому ж місяці. Для того, щоб використовувати цю функцію в своєму додатку, ви можете використовувати подібну програмну конструкцію:
Рада 213. Для аварійного переривання програми використовуйте Ctrl + Pause
При налагодженні програми в середовищі VB для її переривання або аварійного завершення можна застосовувати відповідно команди Break або End з меню Run. Однак вони спрацьовують тільки в момент очікування будь-якого зовнішнього події на діалогової формі. Якщо ж програма виконує якийсь програмний код (наприклад, обробку даних в циклі) або очікує реакції користувача після виведення вікна повідомлення (Message Box), то аварійно перервати або завершити її за допомогою цих команд не вдасться.
Однак вирішити таку проблему просто - для аварійного переривання програми натисніть комбінацію клавіш Ctrl + Pause, яка відразу переведе ваше додаток в режим Break, а вже потім використовуйте команди середовища Continue (продовжити виконання) або End (завершити).
Рада 214. Як побачити початок виділеного тексту
Більшість професійних комерційних додатків обробляють діалогові вікна, що містять поля тексту, в такий спосіб. Коли користувач переходить до поля введення тексту за допомогою клавіші Tab або швидкої клавіші (комбінації Alt з будь-якої іншої клавішею), він повністю виділяє весь текст, що міститься в цьому полі. Потім він вводить новий текст, який замінює собою вміст всього поле. У той же час, якщо він просто клацне мишею текст, що міститься в поле введення, то ніякого виділення не відбудеться - туди тільки перейде фокус.
У документації VB Knowledge Base розповідається, як це можна зробити за допомогою API-функції GetKeyState. Однак дана техніка має деяку незручність в тих випадках, коли довжина тексту перевищує ширину поля. Користувач тоді бачить тільки кінець виділеного тексту, що не дуже зручно, тому що не завжди можна визначити, про що там йдеться.
Використання функції GetKeyState разом з оператором SendKeys і методом TextWidth дозволяє створити комбіноване рішення, коли клавіша Tab або швидка клавіша виділяє весь текст, що міститься в полі введення, але при цьому користувач бачить початок тексту, а не його кінець.
Спочатку опишіть API-функцію GetKeyState і створіть підпрограму SelectWholeText:
Потім викличте створену підпрограму з події GotFocus будь-якого поля тексту:
Рада 215. Як прочитати серійний номер диска
Нова бібліотека Microsoft Scripting Runtime містить ієрархію FileSystemObject, що складається з декількох об'єктів, які дозволяють отримувати інформацію про диски, папках і файлах. Наприклад, ви можете отримати серійний номер диска за допомогою такого коду:
А використовуючи властивість FreeSpace об'єкта Drive можна також перевірити, чи достатньо у вас вільного місця на диску:
Більш докладно про це можна прочитати в Довідці VB в розділах Dictionary і FileSystemObject.
Рада 216. Застосування елемента управління Label як роздільник
Для створення програми в стилі Windows Explorer можна використовувати елемент управління Label як роздільник між двома іншими елементами управління, такими як ListView і TreeView.
Спочатку розмістимо на формі ці три компонента, а потім введемо наступний код: