Программируем на Visual Basic'e:

Часть 1/Часть 2/Часть 3/Часть 4/Часть 5/Часть 6/Часть 7/Часть 8/ Часть 9/Часть 10/Часть 11/Часть 12 /Часть 13/Часть 14 /Часть 15 /Часть 16 /Часть 17 /Часть 18

ШАГ 171

Работа с клавиатурой

Очень часто при создании игр начинающий гейм - мейкер сталкивается с проблеммой передвижения объекта. Т.е. при нажатии в верх и в бок объект или останавливается, или идет только в одну сторону. А вот как сделать чтоб при нажатии в верх и в бок, объект двигался в верх(или вниз) и в бок(влево или вправо) одновременно? Можно использовать DirectInput, но DirectInput освоить не так уж и легко, а вот есть более легкий способ.
На форму кинь Picture1(AutoSize = True, BorderStyle = 0), Timer(Interval = 1), вот код:

Dim L As Boolean ' Объявляем переменную L как Boolean, т.е. значение переменной может принимать только 2 значения, True и False. Если переменная L принимает значение True то объект двигается, если False - то стоит
Dim R As Boolean
Dim U As Boolean
Dim D As Boolean

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)' При НАЖАТИИ на кнопку:

If KeyCode = vbKeyLeft Then ' Если нажата клавиша Left:
L = True ' L = True, т.е. объект двигается в лево
R = False' Если объект двигался вправо, то останавливаем его
End If

If KeyCode = vbKeyRight Then ' Если нажата клавиша Right:
L = False' Если объект двигался влево, то останавливаем его
R = True ' Объект двигаем вправо
End If

' Здесь аналогично
If KeyCode = vbKeyUp Then
U = True
D = False
End If

If KeyCode = vbKeyDown Then
D = True
U = False
End If
End Sub

Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)' При ОТЖАТИИ кнопки:

If KeyCode = vbKeyLeft Then L = False' Если отжата кнопка влево, то останавливаем объект
If KeyCode = vbKeyRight Then R = False
If KeyCode = vbKeyUp Then U = False
If KeyCode = vbKeyDown Then D = False
End Sub

Private Sub Timer1_Timer()
' Здесь я думаю все понятно
If L = True Then Picture1.Left = Picture1.Left - 20
If R = True Then Picture1.Left = Picture1.Left + 20
If U = True Then Picture1.Top = Picture1.Top - 20
If D = True Then Picture1.Top = Picture1.Top + 20
End Sub

Исходник

ШАГ 172

Полезные Программы

1. create Install - Очень часто спрашивают на форумах(да и меня тоже часто): - "Как написать инсталятор для своей программы??". Вот эта программа и нужна для создания инсталяторов. Очень мошная программа, и самая удобная и легкая по сравнению с другими инсталяторами(в других очень сложно разобраться). Качать рекоммендую русскую версию. Качай самую последнюю версию(в нете поищи) с кряком(или keygen, или серийником). Разобраться в ней очень просто. Кстати, в программе есть функция регистрации компонентов и библиотек, т.е. если ты используешь чей - нибудь компонент, то можно его проинсталировать/зарегистрировать вместе со своей программой.
2. Setup Generator Pro - Аналог Create Install, даже лучше(кряк легче найти)
3. ReGet - лучшая программа качалка. Она нужна для быстрого скачивания файлов из нета. Качает очень быстро, и можно в любой момент остановить закачку, и через неопределенное время(хоть через год) продолжить. Очень много настроек.
4. The Bat - лучший почтовик, если ты пользуешься Outlook Express, то срочно переходи на The Bat. В нем есть очень мощная функция борьбы со спамом, куча настроек, прикольный дизайн.
5. Opera - лучший броузер(лучше Internet Explorer). Качать советую без поддержки Java, т.к. Java, кроме 15MB чистого веса, вобщем ни чего не дает.
6. ICQ - знаменитая аська, качать советую Pro версию(не Lite)
7. CuteFTP Pro - лучшая программа для закачки файлов на сервер.
8. Virtual CD - лучшая программа для создания виртуальных дисков. Например, друг дал тебе диск с игрой, а игра идет только с диском. А диск надо отдовать. Вот с помощью этой программы можно сделать копию диска, и запускать игру с компа.
9. 4U WMA MP3 Converter - лучшая программа для перекодировки музыкальных файлов. Например, с ее помощью можно сделать из MP3 в Wav, WMA...(и обратно)
10. GIF Movie Gear - С помощью этой программы можно сделать фон прозрачным(т.е. не придется использовать функцию BitBlt для создания прозрачности). Очень полезная программа. Огромное спасибо Александру за то что сообщил о программе. Программа платная, и будет работать в течении 30 дней. Если 30 дней прошло, то просто переведи дату на 30 дней назад, и программа запустится.

В этом шаге я не писал про очень известные программы(WinZip, WinAmp..), а написал про очень нужные, но не очень известные.

ШАГ 173

Делаем программу для создания локальных дисков

На VB нельзя создавать локальные диски, но те, кто работал в Dos, наверняка знают команду Subst. Для тех, кто не знает, скажу, что эта команда нужна для создания локальных дисков. Вот ее синтаксис:
Subst Имя диска: Путь к папке, на которую ссылается диск

Имя диска: - это любая буква англ. алфавита, которой будет называться диск(например a:, C:, d:..)
Путь к папке, на которую ссылается диск - путь к папке, на которую ссылается диск. Например, "c:\disk". В папке Disk будут хранится все файлы и папки, которые юзер перенесет в созданный диск. Т.е. мы не будем делать новый диск, а просто сделаем диск, который будет ссылаться на другой диск. Для начала краткий обзор Dos команд:

1. MD Имя папки - Комманда MD создает папку, т.к. стандартными средствами VB этого сделать нельзя, а использовать API в данной программе просто нет смысла(т.к. все равно будем пользоватся Dos, и одна строчка я думаю не помешает)
2. Exit - Выход из Dos
3. Del путь к папке с файлами - удаляет все файлы в указанной папке(это можно сделать и на VB, написать Kill C:\путь к папке\*.*). Если к этой команде поставить параметр /Q, то удаление будет без разрешения юзера.
4. Subst Имя диска: Путь к папке: - создает диск, ссылающийся на папку. Если указать пааметр /d, то диск удалится(subst имя диска /d).

Теперь к кодингу:
На форме кинь текстовое поле(Text = "", maxLeight = 1), кнопку(Caption = "Создать диск"), еще одну кнопку(Caption = "Удалить диск"). Код:

' Переменные для хранения Dos соманд
Dim com1 As String
Dim com2 As String
Dim com3 As String

Private Sub Command1_Click() ' Создать диск
com1 = "md c:\disk" & Chr(13) + Chr(10)' Команда созания папки, Chr(13) + Chr(10) - перевод строки для след. команды
com2 = "Subst " & Text1.Text & ": " & "c:\Disk" & Chr(13) + Chr(10)' Создаем диск и именем которое было введенно в Текст. поле, ссылающийся на папку c:\Disk
com3 = "Exit"' Выходим из Доса

Open "disk.bat" For Output As #1' Создаем и открываем файл disk.bat(файлы с расширением Bat имееют текстовую структуру, для редактирования открываются блокнтом. При запуске выполняют Dos команды, которые в них вписанны)
Print #1, com1 & com2 & com3' Записываем все команды
Close #1

Shell "cmd /X /C start disk.bat", vbMinimizedNoFocus' Открываем файл disk.bat
End Sub

Private Sub Command2_Click()' Удалить диск
com1 = "del c:\disk /q" & Chr(13) + Chr(10)' Удаляем все файлы из папки
com2 = "subst " & Text1.Text & ":" & " /d" & Chr(13) + Chr(10)' Удаляем вписанный в текст. поле диск
com3 = "Exit"' Выходим из Доса


' Записываем все команды в файл, и выполняем их:
Open "disk.bat" For Output As #1
Print #1, com1 & com2 & com3
Close #1

Shell "cmd /X /C start disk.bat", vbMinimizedNoFocus

End Sub

Исходник

ШАГ 174

Объект FileListBox

Этот объект прежде всего нужен для работы с файлам, а не для создания проводника :-). Обычно его скрывают(Visible = False), хотя иногда он нужен и в незасекреченном виде. Например, сейчас мы сделаем простенькую программу, которая будет узнавать сколько папка занимает места. Скажу сразу, что этого можно достичь при помощи FSO(при помощи API у меня так и не получилось), но таскать со своей программой библиотеку "scrrun.dll"(144 KB) очень неудобно. Итак, начнем`с...
На форму кинь объект FileListBox(Visible = False), 2 метки, и кнопку. В диске C:\ создай папку, с именем "1", и в нее напихай файлов(их размер мы определим).
Для создания программы нам понадобятся функции:
Format() - Функция обрезает дробное(например 1.021) число. Например: Format(12.123456789, "0.000") - функция выдаст 12.123, т.к. мы указали чтоб было 3 символа после точки("0.000").
FileLen() - функция выдает вес файла в байтах.
Код:

' Объявляем переменные как Single, т.е. эти переменные будут работать с дробными числами, длиной до 32 символов.
Dim FileSize As Single
Dim FileSize2 As Single
Dim FileSize3 As Single

Private Sub Command1_Click()
' Устанавливаем начальные значения переменных(чтобы при повторном нажатии не было багов)
Label1.Caption = ""
Label2.Caption = ""
FileSize = 0
FileSize2 = 0
FileSize3 = 0

File1.Path = "C:\1" ' Устанавливаем путь, в котором FileListBox будет работать с файлами(верней находить)
File1.Refresh ' Обновляем FileListBox

For i = 0 To File1.ListCount - 1 ' Цикл длится столько, сколько имен файлов(а имен файлов столько, сколько файлов в папке c:\1) записанно в File1.
FileSize = FileLen(File1.Path & "\" & File1.List(i)) / 1024 / 1024 ' Узнаем вес файла(путь к файлу узнаем так: File1.Path & "\" & File1.List(i), где File1.Path в нашем случае это C:\1, File1.List(i) - это полное имя файла, находящегося в FileListBoxe, с индексом i). Переводим вес из байтов в мегабайты.
FileSize2 = Format(FileSize, "0.000")' Немного обрезаем число, до 3 символов после точки
FileSize3 = FileSize3 + FileSize2' Плюсуем

Label2.Caption = Label2.Caption & vbCrLf & File1.List(i)' Выводим в столбик имена всех файлов в папке
Next i
Label1.Caption = FileSize3' Надпись Метки будет равен весу всех файлов в папке
End Sub

Исходник
P.S. Скажу на последок, что работать с объектом DirListBox анологично, только там вместо файлов - папки.

ШАГ 175

Создание красивых кнопок

Для создания красивых кнопок есть несколько способов:
1. Нарисовать кнопку в 2ух видах, когда кнопка отжата, и когда нажата. При нажатии на кнопку показывать 1 рисунок(MouseDown), при отжатии(MouseUp) другой. Для рисования кнопок есть программа Just Buttons(на начало 2004 года, последняя версия 3.4). Она умеет рисовать кнопки в двух видах, разных форм(круглые, квадратные, с закругленными концами...(очень много видов)). Советую скачать. Только к версии 3.4 я так и не нашел кряк. Кто найдет, отошлите мне.
2. Можно сделать метку(св-ва BorderStyle = 0, BackStyle = 0, AutoSize = False, Alignment = 2) и при наводе на нее мышкой делать свойство BorderStyle = 1, А при отводе BorderStyle = 0).

Как все это сделать, смотри в примере(с пояснениями).
Скачать пример

ШАГ 176

Получение значений коммандной строки

Функция Command нужна для получение значений коммандной строки. Для чего это нужно? Например, перед тобой стоит такая задача:
Надо сделать чтобы все текстовые файлы открывались твоей программой(это можно сделать при помощи шага: "Регистрация новых типов файлов(расширений)"), и текст содержащийся в текст. файле помещался в текстовое поле(Text1). Это("текст содержащийся в текст. файле помещался в текстовое поле") можно сделать только при функции Command. Сейчас мы сделаем такую программу. На форму кинь текст. поле(MultiLine = True, ScroollBars = 2). Вот код:

Dim Com As String

Private Sub Form_Load()
' Следующие 2 строчки будут вырезать первый и последний символ значение Command. Все дело в том, что функция Command выдает значение в кавычках, и эти 2 строчки уберут кавычки
Com = Mid(Command, 2, Len(Command))
Com = Mid(Com, 1, Len(Com) - 1)' Переменная Com будет равна значению Command, но без кавычек

' Открываем файл, путь к которому записан в переменной Com
Open Com For Input As #1
Text1.Text = Input(LOF(1), #1)
Close #1
End Sub

Теперь выбери любой текстовой файл, нажми правой кнопкой, выбери раздел "Открыть с помощью", потом нажми на "Выбрать программу", и выбери ту программу, которую мы только что сделали. И текст содержащийся в текстовом файле окажется в текстовом поле. На эту тему есть очень хорошая статья - "Замена исполняемых файлов с целью получение возможных параметров командной строки", в разделе Хакинг на моем сайте(http://padre.narod.ru/).

ШАГ 177

Регистрация компонентов

Почти каждый программист делая программку использует какой - нибудь компонент(взять тот же Common Dialog), и очень часто при переносе программы на вражеский комп программа не работает, из - за того что на вр. компе нету компонента, или он не зарегистрирован в системе.
Вот основные способы регистрации:
1. Надо скачать программу VB-PowerWrap или Fusion, и с помощью нее скомпилировать vb программу и ocx`ки и dll`ки в один *.exe файл. Т.е. эти программы нужны для того, чтобы запихнуть все библиотеки и компоненты в один exe файл.
2. Положить все нужные компоненты и библиотеки в папку с программой, из которой они будут запускаться. И тогда при запуске программы, они автоматически зарегистрируются. Этот способ проверялся на VB6(на VB5 может и не работать)
3. Можно воспользоваться программой regsvr32.exe, она вроде поставляется со всеми версиями windows(начиная с 98). Эта программа нужна для регистрации компонентов. Сейчас напишем программу, которая будет регистрировать/дерегистрировать компонент. На форму кинь 2 кнопки(у 1ой, Caption = "Регистрировать", у 2ой - "Де - регистрировать"). Код:

Private Sub Command1_Click()
Shell "cmd /X /C start regsvr32.exe 1.ocx /s", vbHide' Регистрируем компонент 1.ocx, который находится в тойже папке где и сама программа. Параметр /s нужен для тихой регистрации, т.е. если его не указать, то при регистрации компонента будет появлятся сообщение, о том что компонент зарегистрирован.
End Sub

Private Sub Command2_Click()
Shell "cmd /X /C start regsvr32.exe /u 1.ocx", vbHide' Де - Регистрируем
End Sub

Исходник(в исходнике 2 проекта, первый - регистрирует/де - регистрирует компонент, а второй находится в папке "Тест", и использует зарегистрированный компонент(если компонент не зарегистрирован, то проект(2) не откроется))

Программа regsv32 может запускаться с разными параметрами:
/u - Отмена регистрации
/s - "Тихий" режим; окна сообщения не отображаются
/i - Вызывает DllInstal, передовая параметром необязательную строку команд, при использовании с ключом /u DllInstall
/n - Не вызывает DllInstallServer; это может использоваться с ключом /i

При создании более - менее крупных программ следует помнить, что VB работает на подпорках(это библиотеки msvbvm60.dll - если программа написанна на VB6, и msvbvm50.dll - если программа написанна на VB5). А эти подпорки есть не на всех компах, т.е. их следует тоскать со своей программой, и регистрировать. Наверное лучше всего для этого подайдет способ 2, но возможно(я на VB5 не проверял), этот способ на VB5 работать не будет, и поэтому можно сделать при помощи *.bat файлов. Открой блокнот, и впиши туда:

regsvr32.exe COMDLG32.ocx /s
regsvr32.exe msvbvm60.dll /s
autorun.exe

Первая строчка регистрирует компонент(Common Dialog), вторая библиотеку msvbvm60.dll, третья запускает файл autorun.exe. Теперь сохрани это файл как(Файл>>Сохранить как) имя_файла.bat. И положи в ту директорию где этот файл библиотеки и компоненты который он регистрирует(в нашем случае COMDLG32.ocx, msvbvm60.dll). И туда же файл autorun.exe.
Если ты всё сделал правильно, то при запуске этого файла, у тебя должны зарегистрироваться компоненты и библиотеки, и потом запуститься файл autorun.exe.

ШАГ 178

Ссылки

Т.к. мой учебник еще пишется, а в тебе бурлит инстинкт познания (Во как сказал!), то я решил здесь написать самые лучшие на мой взгляд ссылки (ВНИМАНИЕ!!! это не коммерческие ссылки, я писал их не с целью чтоб мне отвалили немного бабла (хотя все равно влятри кто отвалят), или еще что - нибуть сделали, а с целью сэкономить твое драгоценное время, которое ты потратишь в поисках хорошего VB сайта. Все сайты представлены в порядке убывания, от крутого к стремному.

1. http://padre.narod.ru/ - Официальный сайт этого учебника, т.е. с него качай самые последние версии учебника. На сайте огромное колличество статей, исходников, учебников, ActiveX, программ.. связанных не только с программированием на Visual Basic, но и с другими языками.
2. VBNet.ru - на сайте есть очень много статей, исходников, примеров...
3. Мир Visual Basic - Может это и не самый крупный сайт, но на нем много авторских статей, исходников о VB и VBA. И вобще, сайт быстро растет.
4. VB Шаг за Шагом - на этом сайте тоже много инфы


Ну вроде все. Последние версии этого учебника скачивай с моего сайта padre.narod.ru, а на этом я пока закончу. В этот учебник не вошли темы: Создание библиотек; Классы модули - с чем их едят?; VBScript; DerectX ... Эти темы, и другие будут написаны в ближайшее время, так что качай последние версии с моего сайта. Если ты сам написал статью, исходник - отсылай мне на мыло: padre03@mail.ru - я ее обязательно размещу на своем творенье. Если у тебя есть какие - нибуть вопросы, пиши мне, и я на них отвечу, или оставь их на форуме. Покиданьки булы!

ШАГ 179

Заключение:

Когда я начал писать этот учебник VB был вполне приличным языком, но т.к. технологии не стоят на месте, VB6 устарел, и на его смену пришел VB.Net.
Это практически новый язык, отличающийся от VB не только синтаксисом, но и самим подходом к программированию. Возможности VB.Net сильно отличаются от VB6, в лучшую сторону. В VB.Net отпала необходимость использовать API функции, т.к. он может практически все. Программы написанные на VB.Net будут нормально работать на всех ОС(Windows, Linux, Unix..), при установленной .Net платформы. .Net платформа, это не msvbvm60.dll библиотеки, которые надо тоскать с со свое программой.
.Net платформа постовляется с Windows XP.
На .Net перешли все основные языки(C++, C#, Visual Basic, Delphi..).
Так что я советую тебе переходить на VB.Net, т.к. VB6 как и QB скоро исчезнет, и станет историей..
P.S. Сейчас я пишу учебник о VB.Net, но он не будет свободно распростронятся. Как его приобрести читай на моем сайте.



автор учебника: Падре
Дата создания: 23 Марта 2004 года

Место под Банеры

Логотипы, Банеры, Сайты НА ЗАКАЗ