Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> VBScript -> Visual Basic: Полезные советы


Здесь всё, что мне когда-нибудь помогло и я хотел бы этим поделиться с другими, а также полезные советы других пользователей.

1. Есть много программ, снимающих маски с окон с паролями... Все, наверное, видели: наводишь мышку на окно со звёздочками и в окне программы-взломщика появляется текст пароля. Приложения, написанные на Visual Basic не защещены от этого... Другими словами в текстовом окне всё же находится текст, только замаскированный. Я же нашёл как этого избежать:

  • в разделе формы General Declarations объявите переменную, котрая будет содержать код:

Dim pswd As String

  • в свойствах текстового поля установите в PasswordChar звёздочку "*". Теперь кликните по текстовому полю два раза и выберите событие Text1_KeyPress, впишите:

Private Sub Text1_KeyPress(KeyAscii As Integer)
   pswd = pswd + Chr(KeyAscii)
   KeyAscii = Asc("*")
End Sub

  • Теперь нажатия будут отлавливаться, а передоваться будут текстовому полю только звёздочки! И программа-взломщик пароль уже не достанет!!! Если кто-то хочет сделать так, как в Linux'e, т.е. никаких звёздочек нет вообще, то строку KeyAscii = Asc("*") надо заменить на KeyAscii = 0 и всё!

2.Сочитание операторов Chr(13) + Chr(10) можно заменять константой vbCrLf.


3.Чтобы Ваш EXE не был запущен одновременно два раза в событие Form_Load впишите:

Private Sub Form_Load()
If App.PrevInstance = True Then
   MsgBox "Проект уже запущен!"
   End
End If


4.Чтобы запустить на VB5.0 исходники, написанные на VB6.0 откройте файл проекта с расширением VBP каким-нибудь текстовым редактором и удалите строки:
Retained = 0
DebugStartupOption = 0


5.Если Вы применяете в вашей программе сравнение текстовых строк, то Вам будет полезно напоминание следующего:

  • строки одинаковые по содержанию, но различные по написанию будyт распознаны, как неравные:

"Visual Basic" <> "Visual BASIC"

  • если же Вы хотите, чтобы сходство проходило по содержанию, а не по написанию, то Вам придётся преобразовать обе строки к верхнему или нижнему регистру:

UCase ("Visual Basic") = UCase ("Visual BASIC")
'"VISUAL BASIC" = "VISUAL BASIC"
LCase ("Visual Basic") = LCase ("Visual BASIC")
'"visual basic" = "visual basic"

  • или же поставить в General Declaration опцию Option Compare Text. Программа будет тогда различать текст только по содержанию

6.Если Вы хотите В MsgBox'e вывести несколько строк и каждые раз с новой строки, то между этими строками нужно вставить константу vbCrLf:
MsgBox "Галодранци" + vbCrLf + "ycix краiн" + vbCrLf + _
"y eдiну кучку" + vbCrLf + "гоп!"


7. На одном из русских сайтов, посвященных VB, я наткнулся на целую дискуссию, посвященную тому, что делать и как бороться с Null (в частности, при работе с базами данных). Возможно, я не прав, но я всегда для этих целей пользуюсь маленькой функцией, помещенной где-нибудь в
модуле:

Public Function CheckNull(sCheck as String) as String
 If IsNul(sCheck) Then
  CheckNull = Empty
 Else
  CheckNull=Trim$(sCheck)
 End If
End Function

И все.


8.Очень часто вместо обычных кнопок используются картинки. Т.е. существует всего три картинки - одна на которую будут жать (img1), вторая отжатая (img2) и третья нажатая (img3) (img2 и img3 - невидимы). Делаем это так:

Private Sub Form_Load()
    'при загрузке формы картинка 1 принимает вид _
     картинки 2 (отжатая)
    img1.Picture = img2.Picture
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
    'при нажатии мышкой на картинку 1, она принимает вид _
     картинки 3 (нажатая)
    img1.Picture = img3.Picture
End Sub

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
    'при отпускании кнопки мышки картинка 1, она снова принимает вид _
     картинки 2 (отжатая)
    img1.Picture = img2.Picture
End Sub

Этот приём знает каждый... Но есть в нём один недостаток, а именно: при серии непрерывных кликов на объект картинка почему-то реагирует через раз. Т.е. то нажмётся, то не нажмётся. Так вот вот сам совет :-) : чтобы этого избежать в событие Img1_MouseDown нужно вставить строку

SendKeys "A"

Т.е. картинке одновременно посылается нажатая клавиша. Почему так, понять не могу сам. Но в скобках, конечно же, не важна буква "A" - там может стоять и В и С. Главное само событие. Если кто-нибудь может дать этому вразумительное объяснение - давайте! Заранее благодарю!


9.Если в течении работы программы Вам нужно несколько раз менять значения двух переменных, то используйте эту процедуру:

Sub Swap (V1 As Variant, V2 As Variant)
    Dim Mk As Variant
    Mk = V2
    V2 = V1
    V1 = Mk
End Sub

Вызов:
Swap x, y

Но объявление перменных желательно поменять с Variant на то, которое нужно Вам - меньше памяти надо будет. А эта процедура - универсальна! Чтобы не содержали аргументы V1 и V2, их значения поменяются местами.


10. В Бэйсике есть одна ОЧЕНЬ полезная, но многими забытая функция Environ! Она возвращает имена и содержание всех переменных среды операционной системы!!! Так, например, чтобы получить директорию Windows, совсем не надо прибегать к API-функции GetWindowsDirectory!!!!!! А получить её можно так:

ABC = Environ ("windir")

И ВСЁ!
Но и это ещё не всё! Также можно получить следующие перменные:

ABC = Environ ("TMP") 'директория временных файлов TEMP
ABC = Environ ("BLASTER") 'координаты звуковой карты
ABC = Environ ("PATH") 'пути, объявленные в autoexec.bat

НО И ЭТО ВСЁ ЕЩЁ НЕ ВСЁ!!!!
Чтобы получить имя и значение перменной, в скобках вместо строки надо поставить номер переменной (или индекс?).

Вставьте следуюшую процедуру в окно Code, запустите проект, кликните на форме увидите список всех переменных и их значений!

Private Sub Form_Click()
  'берём перменную и присваеваем ей единицу
   m = 1
  'запускаем цикл, который увеличивает переменную m каждый
  'раз на единицу и подсовывает её функции Environ
   Do
  'присваеваем перменной EnvString возвращаемую перменную,
  'соответсвующую номеру m
   EnvString = Environ(m)
  'печатаем перменную, соответсвующую номеру m
   Print Environ(m)
  'перменную m увеличиваем на один
   m = m + 1
  'если перменная EnvString всё ещё не пустая - крутим дальше...
   Loop Until EnvString = ""
End Sub

ТЕПЕРЬ ВСЁ! ;-)) И теперь все, кто недолюбливает API-функции (по-моему их вообще мало, кто долюбливает :-)) могут пользоваться только этой строчкой!


11.Чтобы сделать форму с рамками, но без заголовка, нужно изменить следующие её свойства:
Caption = ""
ControlBox = False


12.Если нужно поменять значение переменной As Boolean на противоположное, то вместо процедуры:

If ABC Then
   ABC = False
Else: ABC = True
End If

можно использовать строку:

ABC = Not ABC

И тогда какое значение не содержала бы переменная ABC, оно (значение) станет противоположным!


13.Чтобы в меню между пунктами ввести разделительную полоску, в окне "Menu Editor" в поле "Caption" введите "-" (тире), а поле "Name" любое имя.


14.Если ваша форма содержит меню, введите в событие Form_Load этот код и под меню появится маленькая полоска, подчёркивающая меню: 

AutoRedraw = True 
ScaleMode = 3 
Cls 
Line (0, 0)-Step(ScaleWidth, 0), QBColor(8) 
Line (0, 1)-Step(ScaleWidth, 0), QBColor(15) 
AutoRedraw = False

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.