Корисні поради по роботі з Visual Basic
1. Використовуйте Long замість Integer. Виграшу в швидкості ви не отримаєте, зате можете отримати поширену помилку:
Dim а As Integer Dim b As Integer Dim з As Integer а = 2341 b = 65 з = а * b
Отримаєте помилку Overflow! Це відбувається тому, що а - Integer, b - Integer, і результат теж повинен бути Integer, отже повинен знаходитися в діапазоні -32768 - +32768, а він рівний 152165. Тому і відбувається переповнювання. Цього можна уникнути за допомогою функції перетворення типу Clng. Тобто з = а * Clng(b). Або задати тип Long при визначенні змінної (це кращий варіант). До речі це відноситься і іншим типам, тобто з(integer)= а(byte)* b(byte)...
2. Трохи магії з оператором Or:
If x = 0 And у = 0 Then ... 'можна записати так: If (x Or у) = 0 Then ... 'це трохи швидше 'і Xor: If (x = 0 And у = 0) Or (x <> 0 And у <> 0) Then ... 'можна так: If (x = 0) Xor (у <> 0) Then .. 'це теж трохи швидше
3. Цикли
Якщо ви звертаєтеся до одного і тому ж елементу масиву в циклі, то краще створіть змінну і привласніть їй значення цього елементу поза циклом, а в циклі використовуйте цю змінну.
4. Like
Дуже могутній (як Format) оператор Like може спростити безліч операцій з рядками, наприклад, вам необхідно перевірити рядок по масці (aka Perl Regular Expressions), наприклад вам необхідно перевірити змінну mystring:
mystring = "312T-87GD-8922" If mystring Like "###[A-Z]-##[A-Z][A-Z]-####" Then ...
5. Перевірка деяких умов в циклі
Якщо у вас в циклі йде перевірка деяких умов, наприклад:
If а > 1 And b = Cos(alpha) And Len(mystr)< 12 Then ...
Ви можете застосувати метод скороченої оцінки:
If а > 1 Then If b = Cos(alpha) Then If Len(mystr)< 12 Then 'Тут код для виконання коли всі умови істинні End If End If End If
Тут обчислення Cos відбуватиметься тільки тоді, коли а > 1, а в першому варіанті він обчислюється завжди. Також тут важлива послідовність умов - зверху поміщайте умову, яка може бути вірним рідше чим ніжніє і так далі Якщо цикл великий, то відразу відмітите вийгриш в швидкості.
6. Функція Doevents
Функція Doevents ДУЖЕ сильно уповільнює роботу. Якщо вам необхідно обчислити великий цикл і в нім ви використовуєте Doevents - швидкість обробки циклу впаде в десятки разів! Тому краще удатися до використання API функції Getinputstate (вона повертає True якщо формі було послано повідомлення від клавіатури або миші):
Declare Function Getinputstate Lib "user32" Alias "Getinputstate" () As Long For з = 1 To 100000 temp = 2 * 2 * 2 If Getinputstate() Then Doevents 'тут 312 мс. Doevents 'а тут час виконання циклу 6543 мс. !!! Next з
7. Вміст файлу в Textbox
Якщо вам необхідно прочитати вміст файлу в Textbox - скористаєтеся нижченаведеним кодом:
Text1.Text = Input$(#1, LOF(1))
8. Aдресa змінної в пам'яті
Якщо вам необхідно отримати адресу змінної в пам'яті, використовуйте функцію Varptr:
Msgbox Varptr(myvariable)
9. Перевірка чи існує який-небудь файл
Якщо вам необхідно перевірити чи існує який-небудь файл, можете використовувати наступну функцію:
Function Fileexist(filename As String) As Boolean On Error Resume Next Fileexist = Dir$(filename) <> "" If Err.Number <> 0 Then Fileexist = False On Error Goto 0 End Function
10. Обмін зміних цілого типу
Якщо вам необхідно обміняти 2 змінних цілого типу, ви можете використовувати такий ось код:
Dim а As Long, b As Long а = 4: b = 7 а = а Xor b b = а Xor b а = а Xor b
11. привласнити рядку значення без зміни його довжини
Якщо вам необхідно привласнити рядку значення без зміни його довжини - використовуйте функцію Lset (Rset). Тобто наприклад:
Dim str1 As String Dim str2 As String str1 = "Мій довгий рядок" str2 = "Коротка" Lset str1 = str2
12. Створення масиву "на льоту"
Щоб створити масив "на льоту" ви можете використовувати функцію Array і змінну типу Variant. Наприклад:
Dim а As Variant а = Array(244, 122, 544, 222) 'або: а = Array("A", "B", "C", "D")
13. своє меню в Textbox'і
Щоб вивести своє меню в Textbox'і без застосування API, потрібно відключити Textbox (встановити його властивість Enabled в False), вивести меню, а потім включити його назад. Наприклад: Public Sub Popuptextboxmenu(txtbox As Object, popmenu As Object) txtbox.Enabled = False Popupmenu popmenu txtbox.Enabled = True End Sub Private Sub Text1_mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbrightbutton Then Popuptextboxmenu Text1, menu1 End If End Sub
14.Help файл (файл з розширенням .hlp)
Якщо ви хочете відкрити Help файл (файл з розширенням .hlp) зі своєї програми, то можете скористатися функцій API Winhelp: Const Help_contents = &H3& Declare Function Winhelp Lib "user32" Alias "Winhelpa" _ (Byval hwnd As Long, Byval lphelpfile As String _ Byval wcommand As Long, Byval dwdata As Long) As Long Public Sub Openhelpfile(Helpfilename As String) 'Helpfilename - шлях до Help-файлу Winhelp hwnd, Helpfilename, Help_contents, 0 End Sub
15. Гарячі клавіші
Користуйтеся гарячими клавішами! Це набагато прискорить процес програмування. Ось найкорисніші на мій погляд:
|
Функція
IDE |
Гаряча
клавіша |
|
Запуск
програми |
F5 |
|
Поставити/Забрати
точку зупинки |
F9 |
|
Покрокове
виконання програми із заходом в процедури |
F8 |
|
Покрокове
виконання програми без заходу
в процедури |
SHIFT+F8 |
|
Відкрити Object Browser |
F2 |
|
Пошук/Заміна |
CTRL+F |
|
Зробити відступ |
TAB |
|
Відмінити відступ |
SHIFT+TAB |
|
Викликати редактор меню |
CTRL + E |
16. Коментарі
Якщо вам часто доводитися коментувати і раськомментіровать код, рекомендую винести ці кнопки на панель. Для цього Виберіть меню View, далі Toolbars, потім Customize... З'явитися вікно. Виберіть вкладку Commands. У списку зліва виберіть Edit, а справа знайдіть команди Comment Block і Uncomment Block. тепер перетягнете їх куди вам подобатися, наприклад на головний тулбар.
17. ACTIVEX
Не користуйтеся компонентами, що підключаються, ACTIVEX, де це можливо (тобто файлами .ocx), оскільки при перенесенні програми на інший комп'ютер вам прідеться тягати ці файли з собою.
18. Декілька радих з оптимізації пам'яті:
Слід мінімізувати число форм, що одночасно знаходяться в пам'яті, тобто завантажувати кожну форму в міру необхідності і відразу вивантажувати, як тільки в ній відпаде потреба;
Слід мінімізувати кількість елементів, що управляють, на тій формі, на якій їх розміщені більше всього;
Якщо текстове поле використовується тільки для виведення тексту, заміните його етикеткою;
Замінюйте, де це можливо, Variant-переменные на змінні простих типів. Наприклад, змінна типу Variant, що містить значення типу Integer, займає в пам'яті 16 байт, тоді як змінна типу Integer-только 2 байти;
При використанні точкових малюнків завантажуйте їх з графічних файлів в процесі виконання програми, а не поміщайте на форму на етапі візуального програмування. Якщо малюнок потрібно використовувати багато разів, завантажите його в невидимий елемент Image.