Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Visual Basic: Полезные советы

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



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте