Visual Basic.Net
Воскресенье, 27.07.2025, 16:44
Меню сайта

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

Форма входа

Поиск

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

Статистика

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

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

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

87 Хитростей и трюков (Часть 1)
1. УПРАВЛЕНИЕ СОБЫТИЯМИ В КОМБОБОКСЕ

Две проблемы могут приключиться, когда смущенный юзер ползает по комбобоксу при помощи мышки вверх и вниз, а затем нажатием на Enter делает свой юзерский выбор. Во-первых, нажатие на серую стрелочку вызывает два события: Change и Click. Во-вторых, нажатие на Enter перемещает фокус к следующему элементу формы, тогда как нажатие на кнопку мыши не вызывает подобного эффекта (т.е. фокус остается на комбобоксе). Поэтому, если Ваш код помещен в секцию события Change, то на стрелочки вверх/вниз (клавиатурой) вызовет это событие, чего Вы, естественно, не хотите. Напротив, если Вы помещаете свой код только в секцию события Lost Focus и юзер щелкает мышью на своем выборе, то фокус не уйдет из комбобокса, а юзер будет созерцать текст, который он выбрал своей мышью, и думать, почему это ничего не происходит. Нижеприведенное решение ?фильтрует базарЋ событий Click, генерирующихся нажатиями на стрелочки клавиатуры, и вынуждает контрол потерять фокус.В секции Declarations формы введите следующее 
' В VB3 надо поменять тип флага на integer 
Dim bNoise as Boolean 
' True означает, что происходит ?шумЋ, на который не следует реагировать 

А этот код введите в секции события Form_Load: 
bNoise = False

Этот код введите в событии KeyDown комбобокса: 
Private Sub cbTest_KeyDown(KeyCode As _ 
  Integer, Shift As Integer) 
  ' если юзер использует стрелки для езды по списку комбобокса 
  ' игнорировать события Click 
  If KeyCode = vbKeyDown Or KeyCode _ 
  = vbKeyUp Then bNoise = True 
End Sub 

Этот код вводится в событии Click комбобокса: 
Private Sub cbTest_Click() 
  If bNoise Then 
  ' Ignore Noise events 
  ' (up or down arrow) 
  bNoise = False 
  Else 
  ' Увести фокус с контрола 
  SendKeys "{TAB}", True 
  End If 
End Sub 

Теперь Вам остается написать код, содержащий реакцию на выбор юзера, и занести его в секцию события LostFocus комбика. 
 


2. КОММЕНТИРОВАНИЕ И РАСКОММЕНТИРОВАНИЕ БЛОКОВ КОДА

VB5 
Level: Beginning 
 
VB 5.0 позволяет Вам разом закомментировать целый блок кода, а затем также быстро раскомментировать его. Это очень полезно при отладке, когда Вам не нужно исполнять целый ряд операторов, и в то же время Вы не можете их удалить вот так вот просто за здорово живешь. Между тем, пара кнопарей Comment/Uncomment присутствует только в тулбаре Edit, который надо специально вызывать :-(. Чтобы быстро вызвать тулбар Edit, кликните правой кнопкой мыши на любом тулбаре в VB, и выберите затем команду Edit. 
 


3. ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ДЛЯ НЕОБЯЗАТЕЛЬНЫХ ПАРАМЕТРОВ

VB5 
Level: Beginning 
 
Если Вы когда-либо программили на VB4, то Вы возможно пользовались мощной фишкой под названием Необязательные параметры (Optional parameters). VB5 пошел еще дальше: теперь эти параметры могут быть любого типа (не только Variants), и могут появляться в процедурах Property. Интересно, что Вы можете теперь задавать для них значение по умолчанию. 
Property Get Value _ 
  (Optional index As Long = 1) 
End Property 

Вы можете теперь делать это без бывшего ранее обязательным (и жутко тормозным) тестом IsMissing: 
Property Get Value _ 
  (Optional index As Long) 
If IsMissing(index) Then index = 1 
... 
End Property 



4. НЕ СОЗДАВАЙТЕ ALIAS-НЫХ ПЕРЕМЕННЫХ

VB5 
Level: Beginning 
 
Никогда не передавайтe глобальную переменную в качестве аргумента в процедуру, которая также напрямую обращается к этой переменной из себя (зачем??). Если Вы на 100% уверены, что следуете этому правилу в Ваших программах, то зачеркните опцию Assume No Aliasing в диалоговом окне Advanced Optimizations, которое вызывается из пункта Compile диалога Project Properties (уф, надеюсь, понятно). Если компилятор native code знает, что этих самых alias-ных переменных нет, то он спокойно копирует значения переменных в шустрые регистры ЦПУ, и переписывает их значения обратно в RAM только при выходе из процедуры. Это увеличивает скорость исполнения скомпилированных программ. 
 


5. ЦЕНТРИРОВАНИЕ ФОРМЫ НА ЭКРАНЕ

VB5 
Level: Beginning 
 
Все знают о маленьком кодике, позволяющем Вам центрировать форму на экране вне зависимости от графического разрешения. Теперь Вы можете достичь того же результата, всего лишь присвоив значение vbStartUpScreen (=2) новому свойству StartUpPosition формы (появилось в версии 5). Вы даже можете отцентрировать форму относительно ее родительского окна, присвоив значение vbStartUpOwner (=1). Присвоение можно сделать в окне Property соответствующей формы. Когда Вы центрируете форму внутри родительского окна, не забудьте добавить второй аргумент в методе Show. 
 
Form2.Show vbModal, Me 



6. НЕ УВЛЕКАЙТЕСЬ АВТООПТИМИЗИЦИЕЙ FAST CODE

VB5 
Level: Beginning 
 
Если взглянуть на опции native code оптимизации, то сперва так и подмывает щелкнуть на "Optimize for Fast Code". Однако, как ни странно это может прозвучать, данное действие далеко не всегда гарантирует ожидаемый эффект. Аппликухи, оптимизированные на скоростное исполнение, как правило, не оптимизируются (пардон за каламбур), а лишь получают большее количество памяти при загрузке. Это обращается для них более медленной загрузкой, что особенно заметно на машинах с недостаточным количеством RAM, и в итоге создает впечатление, что Ваша аппликуха работает медленнее, нежели оптимизированная под компактный код. По той же самой причине, советуется компилить аппликухи в P-code. В случае объемных, UI- и базоданских аппликух, выигрыш от компиляции в native-code отнюдь не перевесит увеличения размера аппликухи. Вообще, чтобы точно знать, какая компиляция нужна Вам, юзайте VB Application Performance Explorer (APE), который лежит на VB CD. 
 


7. НЕ ВСЕ ШАБЛОНЫ СОЗДАНЫ ОДИНАКОВО

VBA5 
Level: Beginning 
 
В отличие от других продуктов Office 97, шаблоны Word 97 содержат business-application engine, который хранится отдельно от документов, использюущих этот engine. Основанные на шаблонах книги Excel и презентации PowerPoint хранят в себе шаблоны, на основе которых они созданы. На практике, все документы Word состоят из 2х VBA проектов: первый проект создан на базе основного(оригинального, хранящегося в Word) шаблона (все документы Word основаны на шаблонах), а второй проект принадлежит самому документу Word. С другой стороны, книги Excel и презентации PowerPoint, созданные на шаблонах, содержат только один VBA проект. Каждый файл содержит свою собственную копию проекта оригинального шаблона. Изменения, производимые в этом шаблоне, не затрагивают основной шаблон, хранящийся в приложении. 
 


8. НАСТРОЙКА ТУЛБАРОВ В VB

VB5 
Level: Beginning 
 
Вот несколько предложений по настройке IDE в VB5: 
Добавить закладки в тулбокс можно, кликнув правой кнопкой мыши на кнопке General (что на тулбоксе), и выбрав Add Tab. Вы можете также перемещать и удалять закладки, и перемещать иконы контролов с одной закладки на другую, используя обычный метод drag-and-drop. 
Вытащить кнопку любого пункта меню на тулбар можно, кликнув правой кнопкой на любом тулбаре и выбрав пункт Customize. Перейдите на закладку Commands, выберите нужный пункт меню в правом окошке, и перетащите его на тулбар. Первыми кандидатами на добавление являются пункты Project-References,Project-Properties, и Tools-Add Procedure. 
Как создать совершенно новый тулбар на вкладке Toolbars диалогового окна Customize. После того, как Вы определили содержимое будущего тулбара, для добавления кнопок на этот тулбар используйте описанную абзацем выше процедуру. Когда у Вас на экране активизировано диалоговое окно Customize, кликните правой кнопкой на любой кнопке тулбара и Вы сможете поменять рисунок кнопки, создать разделитель, спрятать/показать текст и т.д. 
 


9. КАК СПРЯТАТЬ ВСЕ ОКОШКИ ПРОЕКТА

VB5 
Level: Beginning 
 
Когда Вы работаете с несколькими пректами сразу, можно запутаться в нагромождении туевой хучи окошек из разных проектов. Однако, Вы можете временно спрятать все окошки, относящиеся к данному проекту, щелкнув по пиктограмме проекта в окошке Project Explorer так, чтобы все ветви, торчащие из него, исчезли. Тогда же свернутся и все окна, относящиеся к данному проекту. Эту возможность можно отменить, щелкнув на сответствующем квадратике на закладке General в меню Tools-Options. 
 


10. STANDALONE БИБЛИОТЕКИ ТИПОВ

VB4 16/32, VB5 (Enterprise Edition) 
Level: Intermediate 
 
Koгда Вы создаете Ваш out-of-process OLE сервер, то VB встраивает библиотеку типов сервера (companion type library) в EXE-файл, не генерируя при этом .TLB файл. Однако, если у Вас Enterprise Edition VB4 или VB5, то зачеркнув квадратик Remote Server File, Вы заставите VB создавать standalone билиотеку типов. В VB5, эта опция находится на вкладке Component диалогового окна Properties меню Project. 
 


11. ИСПОЛЬЗОВАНИЕ OBJECT BROWSER?a длЯ нахождениЯ недокументированных возможностей

VB5 
Level: Intermediate 
 
Если кликнуть правой кнопкой мыши в правом окошке Object Browser?а (там, где нарисованы члены классов), то выскочит контекстное меню с командой Show Hidden Members. Если щелкнуть на этой команде, то отныне Object Browserбудет показывать все hidden-свойства и методы (а также и классы) любой библиотеки, и Вы можете использовать это для более детального исследования библиотек объектов. 
Например, в библиотеке VBA есть hidden класс под названием _HiddenModule, в который входят многие известные функции VBA плюс три недокументированные: ObjPtr, StrPtr, и VarPtr. ObjPtr возвращает адрес private area экземпляра объекта, StrPtr возвращает адрес первого символа в строке, VarPtr возвращает адрес переменной или дескриптора строки (string descriptor), если имеем случай переменной типа string. 
 


12. АДРЕС ПЕРЕМЕННОЙ

VB4 16/32 
Level: Advanced 
 
В VB5 есть встроенная функция VarPtr (см. Совет ?ИСПОЛЬЗОВАНИЕ OBJECT BROWSER?a длЯнахождениЯ недокументированных возможностейЋ), но этой функции нет в VB4. Runtime library в VB4 включает эту функцию, но перед использованием ее нужно сначала объявить: 
#If Win16 Then 
Declare Function VarPtr Lib "VB40016.DLL" (variable As Any) As Long 
#Else 
Declare Function VarPtr Lib "VB40032.DLL" (variable As Any) As Long 
#End If

Эта функция полезна при передаче пользовательских типов (Type structure) во внешнюю процедуру API, и в этом типе какое-либо из полей является адресом другой переменной или записи. 
 

13. КОГДА BENCHMARK?и (ИЗМЕРЕНИЯ СКОРОСТИ РАБОТЫ ПРОГИ) ДЛЯТСЯ СУТКАМИ

VB4 16/32, VB5 
Level: Intermediate 
 
Обычно, программисты на VB измеряют скорость выполнения кода при помощи Timer функции. Однако, если Ваша программа должна завершиться на следующий день, то Вы должны учесть, что значение, возвращаемое функцией Timer, ресетится в полночь. Если же Вас устроит значение с точностью до одной секунды, Вы можете упростить Ваш код с помощью функции Now. 
Dim startTime As Date 
StartTime = Now 
' the code to be benchmarked 
' ... 
Print "elapsedSeconds = " & Format$ ((Now - startTime) * 86400, "#####") 

Вам понадобится функция Format$ для округления результата до целого. 
 


14. APP.PATH МОЖЕТ ВОЗВРАЩАТЬ UNC-ПУТИ

VB5 
Level: Intermediate 
 
В отличие от VB4, App.Path в VB5 может возвращать UNC-путь, типа "\\server\programs\...", в зависимости от обстоятельств, от того как запущена программа и запущена она из VB IDE или скомпилирована в EXE-файл. Эта особенность может сильно испортить вам жизнь, если Вы используете App.Path для установки текущего каталога при старте программы. 
ChDrive App.Path 
ChDir App.Path 

Поскольку ChDrive на умеет обрабатывать UNC-пути, этот код может вызвать фатальную ошибку времени выполнения, но можт быть защищен использованием On Error Resume Next. Однако этот фикс не защитит Вас от всех невзгод, могущих произойти. Наилучшее решение состоит в том, чтоюы предоставить юзеру самому ввести каталог во время исполнения программы, затем записать полученный путь в регистр или INI-файл. Для более подробной инфы, см. статью Q167167 в Microsoft Knowledge Base. 
 


15. ЕЩЕ ОБ УНИВЕРСАЛЬНЫХ ПАРАМЕТРАХ МАССИВОВ

VB4 16/32, VB5 
Level: Advanced 
 
Вы можете написать единую процедуру для любых типов массива с любым типом в качестве аргумента, используя параметр типа Variant. Внутри процедуры, адресация элементов массива происходит обычным способом: 
return the number of items 
Function ItemCount(anArray As Variant) As Long 
ItemCount = UBound(anArray) - LBound(anArray) + 1 
' the first element is 
' anArray(LBound(anArray)) 
End Function

Вы можете даже запулить в процедуру многомерный массив с любым колическтвом измерений, а чтобы разобраться, сколько же у этого массива измерений, нужно производить обращения к функциям UBound и Lbound до возникновения ошибки: 
Function ItemCount(anArray As Variant)As Long 
Dim items As Long, i As Integer 
On Error Resume Next 
items = UBound(anArray) - LBound(anArray) + 1 
For i = 2 to 999 
  items = items * (UBound(anArray, _ 
  i) - LBound(anArray, i) + 1) 
  If Err Then Exit For 
Next 
ItemCount = items 
End Function

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