Visual Basic.Net
Понедельник, 21.07.2025, 20:20
Меню сайта

Категории каталога
Visual Basic.NET [9]
Visual Basic 6.0 [17]
VBA [13]
VBScript [1]

Форма входа

Поиск

Друзья сайта
Создайте свой сайт Все для веб-мастера Программы для всех Мир развлечений WOlist.ru - каталог качественных сайтов Рунета

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Наш опрос
Оцените мой сайт
1. Отлично
2. Неплохо
3. Хорошо
4. Плохо
5. Ужасно
Всего ответов: 23

Главная » Статьи » Программирование на Visual Basic » Visual Basic 6.0

87 Хитростей и трюков (Часть 6)
76. ЯРЛЫКИ ДЛЯ INTERNET

VB4 32, VB5 
Level: Advanced 
 
VB5 App Wizard умеет создавать Web Browser-форму, но она работает только с Microsoft Internet Explorer и Вам приходится таскать за собой SHDOCVW.DLL при распространении проги. Если Вы используете функцию ShellExecute для запуска файла Internet Shortcut, то Windows запускает дефолтный браузер и переходит на указанный URL. Этот метод работает как Microsoft так и с Netscape браузерами, если они правильно прописаны в регистре, и Вам не нужно перетаскивать никаких DLL при распространении проги. 
Private Declare Function ShellExecute _ 
  Lib "shell32.dll" Alias _ 
  "ShellExecuteA" _ 
  (ByVal hwnd As Long, _ 
  ByVal lpOperation As String, _ 
  ByVal lpFile As String, _ 
  ByVal lpParameters As String, _ 
  ByVal lpDirectory As String, _ 
  ByVal nShowCmd As Long) As Long 
Private Const SW_SHOWNORMAL = 1 

' frm : ShellExecute использует обработчик окна. 
' Вы можете использовать обработчик главного окна проги 
' sUrl : это имя и путь к файлу .url (файл Internet shortcut) 
' указывающий на Вашу страницу , напр. 
' c:\MyWebPage.url использует Internet Explorer 
' для создания файла ярлыка 

Public Sub GoToMyWebPage(frm as Form, _ 
  sUrl as string) 
  Dim lRet as Long 
  lRet = ShellExecute(frm.hwnd, _ 
  "open", sUrl, vbNull, _ 
  vbNullString, SW_SHOWNORMAL) 
  If lRet <= 32 Then 
  ' случилась ошибка. Некоторые из ошибок, 
  ' возвращаемых ShellExecute: 
  ' ERROR_FILE_NOT_FOUND = 2& 
  ' ERROR_PATH_NOT_FOUND = 3& 
  ' ERROR_BAD_FORMAT = 11& 
  ' SE_ERR_NOASSOC = 31 
  ' SE_ERR_OOM = 8 
  Else 
  ' если браузер запущен! 
  End If 
End Sub 



77. ПРОСМОТР СОДЕРЖАНИЯ HELP-ФАЙЛА

VB4 32, VB5 
Level: Intermediate 
 
Многие программеры любят добавлять к свои приложениям и хелп-файлы. Как открыть содержание хелп-файла Windows из Вашей программы? Вот пример кода с использованием Win32 API функции. 
' ---- Объявление 
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 

' --- Код 
Sub OpenHelpFile(HelpFileName As String) 
  ' HelpFileName - путь к хелп-файлу. 
  WinHelp hwnd, HelpFileName, _ 
  HELP_CONTENTS, 0 
End Sub 



78. ЗАДАНИЕ ГРАНИЦ MDI ФОРМЫ ТОЧНО КАК В DESIGN-TIME

VB3, VB4 16/32, VB5 
Level: Beginning 
 
Поскольку MDI-формы ни имеют свойства border, юзер может раздвигать их границы и менять размер MDI-форм. Если юзер пытается изменить размеры формы, а я этого не хочу (пусть остается такой как была создана мной), то процедура для события MDIForm_Resize() спасет (кого - по вкусу): 
Private Sub MDIForm_Resize() 
  ' Запрет resizingа MDI-формы (растягивания границ и перемещения ее мышой). 
  ? Годитсятолько для тех MDI форм, которые выводятся как Normal Window 
  If WindowState = 0 Then 
  ' заданная высота MDI формы 
  Me.Height = 6900 
  ' заданная ширина MDI формы 
  Me.Width = 10128 
  ' заданный левый край MDI формы 
  Me.Left = 1020 
  ' заданный правый край MDI формы 
  Me.Top = 1176 
  ' С таким же успехом можно использовать метод Move, чтобы объединить 
  ? восстановление координат формы в одной команде 
End If 
End Sub 



79. БЫСТРЫЙ ПОИСК В БАЗЕ ДАННЫХ

VB3, VB4 16/32, VB5 
Level: Beginning 
 
В VB нет встроенной процедуры типа DLookUp из Аксесса. Вы можете использовать нижеприведенный код для получения Name объекта по его ID: 
Public Function MyDLookUp(Column As _ 
  String, TableName As String, _ 
  Condition As String) As Variant 
Dim Rec As Recordset 
On Error GoTo MyDlookUp_Err 

' gCurBase - глобальная переменая, указывающая на текущкю БД 
Set Rec = gCurBase.OpenRecordset_ 
  ("Select * From " & TableName) 
Rec.FindFirst Condition 
If Not Rec.NoMatch Then 
  ' возвращает искомое поле, если найдено 
MyDLookUp = Rec(Column) 
  Exit Function 
End If 

' возврат, если не найдено, или произошла другая ошибка 
MyDlookUp_Err: 
  MyDLookUp = -1 
End Function 

 


80. ЛЕГКОЕ ОТСЛЕЖИВАНИЕ ПОЛОЖЕНИЯ ФОКУСА

VB3, VB4 16/32, VB5 
Level: Intermediate 
 
Lost_Focus and Got_Focus events Часто используются для проверки правильности ввода текста. Вы можете использовать нижеприведенный код для отслеживания фокуса на форме не программирую каждый контрол отдельно. 
Прместите timer control на форму , установите Interval property = 100 и Enabled = True. Name the control tmrFocusTracking. 
 Timer event должен содердать следующий код: 
 
Private Sub tmrFocusTracking_Timer() 
  Dim strControlName As String 
  Dim strActive As String 
  strControlName = _ 
  Me.ActiveControl.Name 

  Do 
  strActive = Me.ActiveControl.Name 
  If strControlName <> strActive _ 
  Then 
  Print strControlName & _ 
  " - Lost Focus", _ 
  strActive & " - Got Focus" 
  strControlName = strActive 
  End If 
  DoEvents 
  Loop 
End Sub 

To implement universal highlighting, replace the Print statement with this code: 
Me.Controls(strActive).SelStart = 0 
Me.Controls(strActive).SelLength = _ 
  Len(Me.Controls(strActive)) 

Для проверки (validation) правильности текста вместо Print statement используйте вызов процедуры проверки. 
Используйте strActive in a Select Case structure 
К моменту , когда случается команда Print , strActive равен контролу, имеющему фокус, и strControlName содержит имя контрола, который потерял фокус. 
Не размещайте эту процедуру где-либо кроме таймера. 
 


81. НЕЗАКРЫВАЮЩАЯСЯ ФОРМА

VB3, VB4 16/32, VB5 
Level: Beginning 
 
Если выставить свойство ControlBox на форме в False, то кнопки Minimize и Maximize тоже исчезнут. Предположим, что Вы хотите тем не менее давать возможность юзеру использовать кнопки Minimize и Maximize, но при этом чтобы он не мог закрыть форму кнопкой с крестиком. Добавьте следующий код в событие Query_Unload: 
' если у Вас VB3, раскомментируйте следующую строку 
' Const vbFormControlMenu = 0 
Private Sub Form_QueryUnload(Cancel As _ 
  Integer, UnloadMode As Integer) 
  If UnloadMode = vbFormControl_ 
  Menu Then 
  Cancel = True 
  End If 
End Sub 

 


82. ПОМЕНЯТЬ СВОЙСТВО ЦЕЛОЙ ГРУППЕ КОНТРОЛОВ

VB3, VB4 16/32, VB5 
Level: Beginning 
 
Вы можете легко сделать видимой/невидимой целую группу контролов. В режиме разработки, выделите все контролы, с которыми Вы будете производить данную операцию при выполнении программы. Нажмите F4, и присвойте свойству Tag имя группы, например Group1. Теперь при совершении групповой операции Вам поможет следующий код: 
For ind = 0 To Formname.Controls.Count _ 
  - 1 
  If Formname.Controls(ind).Tag = _ 
  "Group1" Then 
  Formname.Controls(ind).Visible _ 
  = True 
  End If 
Next 


83. КАК ПРОСТО ОТФОРМАТИРОВАТЬ И ОКРУГЛИТЬ ЧИСЛО 

VB3, VB4 16/32, VB5 
Level: Intermediate 
 
Пример округления с заданной точностью. 
n = 12.345 
Format(n, "0.00\0") 
' возвращает "12.350" 
Format(n, "0.\0\0") 
' возвращает "12.00" 
Format(0.55, "#.0\0") ' возвращает ".60" 



84. БУДЬТЕ ОСТОРОЖНЫ, ЗДЕСЬ ВАМ НЕ С!

VB3, VB4 16/32, VB5 
Level: Intermediate 
 
VB программеры, привыкшие к С, могут быть введены в заблуждение следующей особенностью VB. Рассмотрим код: 
Dim x As Integer 
Dim y As Integer 
Dim z As Integer 
  
x = 10 
y = 20 
z = 0 
  
' пусть функция max возвращает большее из двух чисел 
if (z = max(x, y)) > 0 then 
  Msgbox CStr(z) 
Else 
  Msgbox "How Come?" 
End if 

 
Вы ожидаете, что высветится 20, как должно бы было произойти в С? Однако, VB сравнит z с RHS (right-hand side)-правой стороной, даже перед присвоением, независимо от скобок. Будьте внимательны. 
 


85. ИСПОЛЬЗОВАТЬ BACKQUOTES ВМЕСТО АПОСТРОФОВ

 VB3, VB4 16/32, VB5 
Level: Intermediate 
 
Часто при использовании Transact-SQL мне надо перехватывать комментарии юзера из текстбокса и пересылать их в базу данных. Однако, если юзер нажимает апостроф в текстбоксе, происходит ошибка времени выполнения, поскольку SQL Server использует апостроф как признак конца строки. Чтобы обойти эту проблему, перехватите ввод юзера в событии KeyPress и замените апостроф на вот такую кавычку ??Ћ(ASCII(145)): 
Private Sub Text1_Keypress_ 
  (KeyAscii as Integer) 
  If KeyAscii = 39 Then 
  KeyAscii = 145 
  End If 
End Sub 

Также можно заменить все одинарные кавычки на ??Ћ перед отсылкой в SQL Server. 
 


86. РАСПРОСТРАНЕНИЕ НОВЫХ ВЕРСИЙ ПРОГРАММЫ ПО СЕТИ

VB4 16/32, VB5 
Level: Intermediate 
 
Я пишу VB проги для сети с примерно 300 юзерами. Довольно трудно своевременно уследить за распространением каждой новой версии проги на всех машинах, поэтому я использую такую фичу VB автоинкрементирующаяся нумерация версий для проверки, требуется ли апгрейд проги на конкретной машине. При компиляции проги установите автоинкремент версий в On. Сохраните Ваши setup/upgrade файлы на сетевом диске (настоятельно рекомендую использовать UNC-пути (\\имя_машины\имя_диска) нежели просто имена дисков), и положите INI-файл проги, в котором указан номер новейшей версии. Затем вставьте следующий код в прогу, событие Form_Load: 
Open IniFile$ For Input As #1 
Line Input #1, sUpgradeVersion$ 
Close #1 

If sUpgradeVersion > (Format(App.Major, "00") & "." & _ 
  Format(App.Minor, "00") & "." & _ 
  Format(App.Revision, "0000")) Then 
  ' запуск апгрейда с сетевого диска 
End 
End If 

Если версия в INI-файле выше, чем версия, записанная в .exe, то прога автоматом запустит программу апгрейда по сети и закончит свое выполнение, то есть все нужные файлы смогут быть заменены. Это особенно полезно, когда Вы только начинаете писать прогу, то есть апгрейды и фиксы появляются чуть ли не раз в несколько дней. 
 


87. ЗАКРЫТЬ ОКНО ПРОГРАММЫ, КАК ЭТО ДЕЛАЕТ WINDOWS 95

VB3, VB4 16/32, VB5 
Level: Intermediate 
 
Разместите этот код в declaration section модуля: 
Public Sub Win95Shrivel(xForm As Form) 
  ' минимизирует окно 
  xForm.WindowState = 1 
End Sub 

Вызывайте ее из процедуры Unload формы 
Private Sub Form_Unload(Cancel As _ 
  Integer) 
  Win95Shrivel Me 
End Sub 

Каждый раз при unloade формы она сначала быренько сворачивается к таскбару, а затем исчезает. Это работает и в Windows 3.1x тоже

Категория: Visual Basic 6.0 | Добавил: Vadim (12.01.2009)
Просмотров: 3145 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2025
Бесплатный конструктор сайтовuCoz