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

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

ШАГ 121

Операторы цикла

В первой части я уже говорил об операторе цикла со счетчиком, но только не подробно. А вот теперь будем базарить не только об операторе цикла со счетчиком, а операторе цикла с условием. Об операторе цикла со счетчиком я не буду много говорить, т.к. все нужное я сказал в 1 части, НО если ты зациклился на операторе цикла со счетчиком то почитай на моем сайте в разделе статьи(Начинающим). Ну короче посмотри оператор цикла со счетчиком в первой части(только обязательно посмотри, т.к. он нам пригодится). А теперь по - базарим о операторе цикла с условием.
Оператор цикла с условием имеет такой синтаксис:
Do

Loop
Вот даже можешь сделать программу:

Private Sub Form_Load()
Do
MsgBox "Цикл"
Loop
End Sub

Запусти(F5). Ну что - завис? Теперь тебя спасет только Ctrl+PauseBreak. Теперь мы подошли к сути этого шага - к условию! Есть 2 вида условия это:

Do Until x = 0
MsgBox "Цикл"
Loop

Если x <> 0 то цикл будет повторятся, до тех пор, пока x = 0
и второй вид:

Do While x = 0
MsgBox "Цикл"
Loop

Если x = 0 то цикл будет повторятся, до тех пор, пока x <> 0(я использую только этот вариант, и все примеры будут на нем)
Ну, это вроде и все, только старина Билл придумал еще и функцию DoEvents, она нужна чтоб цикл не зацикливался. Ну чтоб все это понять сделаем программу. На форму кинь текстовое поле, и 2 кнопки(у первой Caption = "Пуск", у второй = "Стоп"). Вот код:

Dim x As Long

Private Sub Command1_Click()
x = 0
Do While x = 0 ' Если X = 0 то цикл повторятся
DoEvents ' Это чтоб цикл не зациклился, если ее не напишешь то комп будет виснуть
Text1.Text = Text1.Text + 1 ' Каждый раз когда цикл будет повторяться текст в текстовом поле будет на 1 увеличиваться
Loop
End Sub

Private Sub Command2_Click()
x = 1 ' При нажатии на кнопку цикл останавливается
End Sub

Private Sub Form_Load()
x = 0
Text1.Text = 0
End Sub

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

ШАГ 122

Делаем основу PineBall`a

На форму кинь кнопку(Enabled=False), и PictureBox(Enabled = False, и Picture = "Картинка в виде мячика") и Text1(Enabled=False, Text = 0, Visible = False). Код:

Dim MoveLeft As Boolean
Dim MoveRight As Boolean 'Тип Boolean означает то что переменная может принимать только 2 значения True и False
Dim MBall As Boolean

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'При нажатии на кнопку
If KeyCode = vbKeyF2 Then MoveBall 'Если нажата клав. F2 то запускаем шарик(т.е. функцию MoveBall)
If KeyCode = vbKeyLeft Then 'Если нажата стрелка влево то:
MoveRight = False 'Останавливаем(если он запущен) цикл, который биту перемещает в противоположное место
Do While MoveRight = False 'Делаем цикл до тех пор пока MoveLeft = False
DoEvents ' Это чтоб система реагировала на сигналы
Command1.Left = Command1.Left - 1 ' Перемещаем кнопку
Text1.Text = Text1.Text - 1 'Это немного цикл тормозит, а то бита очень быстро перемещается
MoveBall 'Запускаем функцию MoveBall
Loop
End If

' Здесь тоже самое только наоборот
If KeyCode = vbKeyRight Then
MoveLeft = False
Do While MoveLeft = False
DoEvents
Command1.Left = Command1.Left + 1
Text1.Text = Text1.Text + 1
MoveBall
Loop
End If
'Остонавливаем биту если нажата стрелка вниз
If KeyCode = vbKeyDown Then
MoveLeft = True
MoveRight = True
Do
DoEvents
MoveBall
Loop
End If
End Sub

Private Sub Form_Load()
'Устанавливаем начальные значения
MoveRight = True
MoveLeft = True
MBall = False
End Sub

Function MoveBall() 'Функция MoveBall
If MBall = False Then 'Если MBall = False то двигаем мяч вниз
Ball.Top = Ball.Top + 1
Else 'Если MBall <> False то двигаем мяч вверх
Ball.Top = Ball.Top - 1
End If
If Ball.Left - Command1.Left < 150 And Ball.Left - Command1.Left >= -320 And Ball.Top >= Command1.Top - 255 Then 'Если мяч ударяется от левый край биты то
MBall = True 'Посылаем его вверх
End If
End Function

Все, остальное сам доделай. Если сделаешь то шли мне на мыло, я помещю исходник на сайт в раздел Исходники.
Недоделанный Исходник качай здесь

ШАГ 123

FileSystemObject - FSO. Начало

FSO - это расширенные возможности работы с файлами, папками и дисководами. С помощью FSO можно создавать папки(и файлы), удалять, копировать, перемещать, смотреть дату создания, изменения... Короче до хрена возможностей.
В FSO есть 4 объета:

Drive - это всякие дисководы, логические, физические, присоединенные диски, и им подобные
Folder - это папки
File - это файлы
FileSystemObject - это основной объект группы, с полными методами, которые позволяют проводить операции над файлами, папками...

Ну короче не буду тянуть, чтобы его подключить к проекту нажми на Проект(Project)>>Ссылки(Reference), найди там библиотеку Microsoft Scriptig Runtime, и отметь ее. Пока все. В следующем шаге начнем с ней работать, а это было что - то типо введения.

ШАГ 124

Подключение и объявление FSO

Подключи библиотеку Microsoft Scriptig Runtime(как это делать смотри выше).
Чтобы создать объект FileSystemObject, надо объявить переменную как объект FSO:
Dim fso As New FileSystemObject
Все, объект создан. Теперь чтобы получить объект к файлу, папке, дисководу существует метод Get:
GetFile - к файлу
GetFolder к папке
GetDrive - к дисководу

Например, щас мы получим доступ к папке:
Dim f As File ' Прежде чем присваивать, надо объявить переменную. Если ты работаешь с папками то Folder, если с файлами, то File, если с дисководом то Drive
Set f = fso.GetFile("c:\1") ' Присваиваем к переменной f доступ к папке(ил не доступ, я вообще в этих словах запутался)
Ну пока все, теперь переходим к практике.

ШАГ 125

Работаем с папками

Подключи библиотеку Microsoft Scriptig Runtime, на форму кинь 4 кнопки, 6 меток. Щас мы сделаем программу, которая будет создовать, удалять, копировать, перемещать, выводить размер, дату создания.... Пример я представлял двумя способами, ты можешь использовать какой хочешь. Код:

Dim fso As New FileSystemObject, f As Folder ' Создаем объект FSO и объявляем переменную f для работы с папками

Private Sub Command1_Click()
fso.CreateFolder ("c:\111111") ' Для создания папки есть метод CreateFolder
End Sub

Private Sub Command2_Click()
' Способ 1
Set f = fso.GetFolder("c:\111111")
f.Delete True
' Способ 2
'fso.DeleteFolder ("c:\111111")
End Sub

Private Sub Command3_Click()
' Способ 1
Set f = fso.GetFolder("c:\111111")
f.Copy "c:\games\"
' Способ 2
'fso.CopyFolder "c:\111111", "c:\games\"
End Sub

Private Sub Command4_Click()
' Способ 1
Set f = fso.GetFolder("c:\111111")
f.Move "c:\games\" ' только не забывай в самом конце папки ставить "\", а то при перемещении и копировании не сработает
' Способ 2
'fso.MoveFolder "c:\111111", "c:\games\"
End Sub

Private Sub Form_Load()
' Узнаем есть папка 111111, если нет то сообщаем(метод возвращает False), а если есть то выводим все данные о ней(метод возвращает True)
If fso.FolderExists("c:\111111") = True Then

Set f = fso.GetFolder("c:\111111")
' Дата создания
Label1.Caption = "Файл создан:" & f.DateCreated
' Дата изменения
Label2.Caption = "Файл изменен: " & f.DateLastModified
' Дата открытия
Label3.Caption = "Файл открыт:" & f.DateLastAccessed
' Имя папки родителя
Label4.Caption = "Папка родич(т.е. та папка в которой эта папка находится): " & f.ParentFolder
' Путь к папке
Label5.Caption = "Путь: " & f.Path
' Размер
Label6.Caption = "Размер: " & f.Size / 1024 ' здесь я написал / 1024, чтоб в килибайты перевести

Else
MsgBox "Такой папки не существует", 16, ""
End If
End Sub

По началу может показаться что пример сложный, т.к. много всяких новых методов, НО не обязательно их помнить(ты что думаешь, что я их все наизусть знаю?), просто ставишь имя переменной(здесь f), потом точку, и у тебя список выпадает, в нем всего штук 10 методов, а по названию можно определить нужный. Исходник качай Отсюда

ШАГ 126

Работаем с дисководами, сидюками, и им подобным

С помощью FSO можно узнавать полную инфу о сидиках и им подобных. Вот код(только не забывай подключать библиотеку для работы с FSO):

Dim fso As New FileSystemObject, D As Drive
Private Sub Form_Load()
Set D = fso.GetDrive("c:") ' Узнаем есть диск в сидюке(ил подключен диск) ил нету. Если есть то метод возращает True, если нет то False
If D.IsReady = True Then


Label1.Caption = "Всего места: " & D.TotalSize / 1024 / 1024 / 1024 ' Узнаем кол - во свободного места, здесь я написал / 1024 / 1024 / 1024 - это перевод из байтов в гигабайты
Label2.Caption = "На диске свободно: " & D.AvailableSpace / 1024 / 1024 / 1024 ' Узнаем кол - во свободного места, здесь я написал / 1024 / 1024 / 1024 - это перевод из байтов в гигабайты(можно использовать и FreeSpace, эффект такой же)
' чтобы узнать сколько занято надо от кол- ва места на диске отнять кол - во свободного места
Label3.Caption = "На диске занято: " & (D.TotalSize - D.AvailableSpace) / 1024 / 1024 / 1024
Label4.Caption = "Буквенное обозначение диска: " & D.DriveLetter ' Узнаем буквенное обозначение диска
Label5.Caption = "Файловая система: " & D.FileSystem ' Узнаем файловую систему
Label6.Caption = "серийный номер: " & D.SerialNumber ' Узнаем серийный номер диска
Else ' Если сидюк недоступен, то выводим сообщение
MsgBox "Сидюк не доступен"
End If
End Sub

Исходник качай Отсюда

ШАГ 127

Работаем текстовыми файлами при помощи FSO

На форму кинь текстовое поле(MultiLine = True), 4 кнопки(у 1ой Caption = "Создать txt", у 2ой = "Удалить", у 3ей = "Запись", у 4ой = "Чтение"). Размести библиотеку для работы с FSO. Код:

Dim fso As New FileSystemObject, f As File, txt As TextStream ' Тип TextStream нужен для работы с текстовыми файлами, только не путай его с File(это для работы со всеми файлами)

Private Sub Command1_Click()
Set txt = fso.CreateTextFile("c:\1.txt") ' Создаем текстовой файл
End Sub

Private Sub Command2_Click()
fso.DeleteFile ("c:\1.txt") ' Удаляем текстовой файл
End Sub

Private Sub Command3_Click()
Set f = fso.GetFile("c:\1.txt") ' Получаем доступ к файлу
Set txt = f.OpenAsTextStream(ForWriting) ' Открываем(в скобках это тип записи(ну как и у оператора Open); ForAppending - Добавление записей к уже существующем в файле(тоже самое что и Append в операторе Open); ForWriting - это запись по - новому(тоже что и Output у оператора Open) ; ForReading - это для чтения файлов(тоже что Input у Open`a))
txt.Write (Text1.Text) ' Записываем в файл содержимое текстового поля(можно использовать и метод WriteLine)
txt.Close ' Закрываем
End Sub

Private Sub Command4_Click()
Set f = fso.GetFile("c:\1.txt") ' Получаем доступ к файлу
Set txt = f.OpenAsTextStream(ForReading) ' Открываем
Text1.Text = txt.ReadLine ' Читаем содержимое файла в текстовое поле
txt.Close ' Закрываем
End Sub

У текстовых файлов почти такие же свойства и методы как и у папок(узнать размер, путь, имя...), так же как и папки их можно копировать и перемещать, поэтому я не буду про это писать. Тут ни чего сложного нет. А вот задание:
Короче добавь к этому примеру еще 2 кнопки(Копировать и Переместить), и напиши код для копирования и перемещения текстового файла. Исходник качай Отсюда

ШАГ 128

Создание Клиента & Сервера DDE на VB

Ну для начала я расскажу для чего это вообще нужно. Вся эта фигня нужна для того чтоб устанавливать связь между двумя разными приложениями (Клиентом & Сервером), например мы будем делать проект, в котором будет 2 программы (Клиент & Сервер), изменив текст в Сервере он, изменится и в Клиенте (Ты наверное думаешь: "Нахрен мне это надо?" - это тебе надо! Когда мы будем делать Chat(через пару шагов (Пока я взял чей - то перевод, но в следующих обновлениях я постараюсь сам написать о создании Chat`a, да и вообще о Winsock))).Для начала создадим Сервер, он будет посылать сообщения Клиенту.
Создаем Сервер
Войди в VB(Standart EXE), на форму кинь текстовое поле. Переименуй проект в Server( для этого войти в Project/Project1 Properties... и в открывшемся окне, в поле Project Name - введи любое имя. (подробнее читай в 26 Шаге), форму переименуй в Servak(Name), свойство LinkMode = 1 - Source, LinkTopic = Client - это имя формы клиента.

Сервак готов!!! Теперь сделаем Клиента.
Создаем Клиент
Войди в VB(Standart EXE), на форму кинь текстовое поле. Форму переименуй в Client, и введи код:
Private Sub Form_Load()
Text1.LinkTopic = "Server|Client" 'Здесь Server это имя проекта Сервера (мы вроде так его назвали?), а Client - имя формы клиента
Text1.LinkItem = "Text1" 'Имя Текстового поля Сервера
Text1.LinkMode = 1 '1 - означает Автомат (не в прямом смысле:-))), т.е. при изменение текста в Сервере, в Клиенте тоже будет меняться (Автоматом)
End Sub
Теперь запускай сервер, а потом клиент. При изменение текста в сервере, в клиенте он тоже изменится. Это была подготовка к созданию таково же приложения только на разных компах (через инет).
Исходник качай Отсюда

ШАГ 129

Работа с HELP`ом. Начало:

Почти все программы содержат справку, в ней написанно как с программой работать. В следующих шагах мы будем создовать хелп, и внедрять в свои программы.
Есть 2 вида хелпа:
Первый создается с помощью спец. компилятора CHM, его ты можешь скачать с моего сайта в разделе программы. Этот компилятор преобразовывает файлы написанные на HTML в CHM.
Второй вид хелпа создается при помощи программы Help Workshop, она постовляется вместе с VB(у меня она находиться в Пуск>>Программы>>Microsoft Visual Studio 6.0>>Microsoft Visual Studio 6.0 Tools>>HelpWorkShop). (Или можешь найти программу HCW.exe).
только для создания этого хелпа тебе еще понадобиться программа Microsoft Word 98 и выше(она с офисом поставляется), если нет Worda, то подойдет любой RTF редактор.

ШАГ 130

Создания хелпа с помощью компилятора

Для начала скачай с моего сайта(padre.narod.ru в разделе Программы) программу - Компилятор CHM, и создай страницу(если не знаешь как, то ищи справочник по HTML). Открой программу, нажми на кнопку Обзор напротив поля Web-страничка(in). Выбери страницу(*.htm ил *.html), и нажми на OK. Теперь жми на кнопку Собрать. И все! Справка создана!
P.S. В этой программе можно еще и делать обратную операцию, т.е. из CHM в HTML.


автор учебника: Падре
Дата создания: 22 мая 2003 года

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

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