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

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

ШАГ 61:

Связь между формами

Ну что - то мне это в бошку слишком поздно пришло, это надо было писать в 4 части, а я в 6. Очень часто надо из 1 формы поменять какое - нибуть свойство у второй. И как это сделать читай в этом шаге. Сейчас мы сделаем программу, у которой из первой формы, мы будем менять свойство второй. Как всегда сделаем новый проект(Standart EXE), создай новую форму(Form2), на нее кинь кнопку, и на первую форму(Form1), тоже кинь кнопку. Код:
Private Sub Form_Load() 'При загрузке формы:
Form2.Show 'Показываем Форму 2(Form2)
End Sub

Private Sub Command1_Click() 'При нажатии на кнопку:
Form2.Command1.Caption = "" 'Меняем свойство Caption у кнопки второй формы
End Sub

И все!

ШАГ 62:

Делаем тень для Label`a

Войди в VB(Standart EXE) - на форму кинь 2 метки, и 1 текстовое поле. Выдели 2 метки и поставь у них свойство BackStyle = 0 - Transparent, и свойство AutoSize = True. Первую метку сделай серой(ForeColor), но так чтоб она не сливалась с формой. Код:

Private Sub Form_Load() 'При загрузке формы:
Label1.Left = Label2.Left + 70 'Метка 1(тень) была немного правее метки 2
Label1.Top = Label2.Top 'Делаем их на одной высоте
Label1.ZOrder (1) 'Делаем метку 1(тень) под меткой 2
End Sub

Private Sub Text1_Change() 'При изменении текста:
'Текст у всех меток тоже меняется
Label2.Caption = Text1.Text
Label1.Caption = Text1.Text
End Sub

ШАГ 63:

Свойства

Текстовое поле:
1. Alignment - Это свойство задает способ отабражения текста в текстовом поле. По умолчанию, свойство равно "0", т.е. текст отображается с лева на право, если установить значение "1", то текст будет отображаться с право на лево, если значение сделать "2" - то по центру.
2. Appearance - С помощью этого свойства можно изменять внешний вид текстового поля, делать текст. поле или вдавленным, или плоским.
3. BackColor - Цвет фона текстового поля
4. BorderStyle - Это свойство Убирает или ставит рамку. Значение "0" - с рамкой, "1" - без рамки
5. Font - шрифт
6. Multuline - Это самое известное свойство, оно нужно для переключения в однострочный и многострочный режим (может это как - нибуть по другому называется, но т.к. я где - то услышал умное слово, то и решил им воспользоваться). Если стоит False - то однострочный режим, True - многострочный.
7. MaxLenght - это ограничитель вводимых символов. Например, если ты там напишешь 2 - то сможешь ввести только 2 символа. Вот так.
8. ScrollBars - это свойство нужно для установки скруллбаров (полос прокрутки).
9. ToolTipText - Введенный сюда текст будет появлятся в виде подсказки, при наведении на текст. поле текст.

Метка:
Все теже свойства, что и в текстовом поле +:
1. BackStyle - это свойство делает фон у метки прозрачным, очень полезное свойство
2. AutoSize - Это свойство автоматически регулирует размер метки.



А теперь события. При двойном клике по текстовому полю, создается процедура Text1_Change(). В какой - то части я говорил что это переводится как изменение. Так вот, при каждом изменении содержимого текстового поля, будет выполняться какое - то действия. И чтоб ты убедился что я не вру, сделаем программу. На форму кинь текстовое поле и метку. При вводе текста в текстовое поле, надпись метки будет меняться. Код:
Private Sub Text1_Change()
Label1.Caption = Text1.Text
End Sub

ШАГ 64:

Свойства и методы текстового поля

И снова свойства скажешь ты, и будешь прав. Но на этот раз будут еще и методы (это тоже самое что и свойства, только свойства описывают объект (цвет, размер, фон…), а методы выполняют какое - то действие над объектом (и в списке напротив них зеленый значок, а у свойств - серый)). Начнем. Первый метод будет SetFocus, оно нужно для установки курсора в заданное текстовое поле. Сделаем программу! На форму кинь 2 текстовых поля, и кнопку. Код:
Private Sub Command1_Click() 'При нажатии на кнопку:
Text1.SetFocus 'На текстовое поле 1 устанавливаем курсор
End Sub
Включай и смотри, при нажатии на кнопку курсор установится в текстовое поле 1.
Теперь сделаем программу, у которой текст будет выделяться. Ты не думай, что я тебе какую - то фигню впариваю - НЕТ! НЕТ! и еще раз НЕТ!. Я тебя готовлю к созданию программы, Поиск и Замена(ну как в Word Pad). Ну как я и говорил будем делать программу (выделение текста). На форму кинь 1 кнопку, и 1 текстовое поле. Теперь код:
Private Sub Command1_Click() 'При нажатии на кнопку:
Text1.Text = "Visual Basic" 'Текст в текстовом поле будет равен "Visual Basic"
Text1.SetFocus 'Курсор ставим в Text1
Text1.SelStart = 7 'Эта функция задает позицию курсора в тексте (у нас в словах Visual Basic, позиция будет равна 7, т.е. курсор будет перед B)
Text1.SelLength = 5 'Теперь выделяем 5 символов, т.е. Basic, т.к. начинаем выделять с того места, где стоит курсор, а курсор стоит перед B
End Sub
На свойствах мы закончим, и перейдем к функциям. Хотя нет, есть еще одно свойство, SelText, оно в указанную позицию вписывает текст, но об этом потом.

ШАГ 65:

Функция InStr

Ну здесь я дам тебе функции, верней функцию, тоже для работы с текстом, и тоже она нам пригодится для создания "Поиска". Эта функция нужна для сравнивания 2-х слов.
Как всегда, сделаем программу. Она будет сверять 2 текстовых поля, и в случае совпадения, выдавать соответствующее сообщение. Код:
Private Sub Command2_Click() 'При нажатии на кнопку:
If InStr(1, Text1.Text, Text2.Text) <> 0 Then 'Сверяется 2 текстовых поля
MsgBox "Совпадение" 'При совпадении юзер узнает об этом
Else
MsgBox "Не Совпадение" 'При не совпадении юзер все равно узнает об этом
End If
End Sub

Теперь поясню как все это работает, в начале синтаксис:
InStr(Начальная позиция, Текст для поиска, Искомое слово)
Вобще, это функция нужна для поиска позиции искомого слова в тексте. Если в тексте нету искомого слова, то функция возращает 0, поэтому мы и пишем:
If InStr(1, Text1.Text, Text2.Text) <> 0 Then
По - русски, это будет звучать так: "Если функция InSTR не равно 0(т.е. слово найденно)", то...

ШАГ 66:

Делаем ПОИСК

Сейчас мы сделаем программу, которая будет искать текст. На форму кинь 2 текстовых поля и кнопку. Вот код:
Dim qw As Long ' qw - переменная, которая будет содержать позицию для поиска
Private Sub Command1_Click() 'При нажатии на кнопку:
If InStr(qw, Text2.Text, Text1.Text) <> 0 Then 'Сверяется 2 текстовых поля
Text2.SetFocus 'На Text2 ставим курсор
Text2.SelStart = InStr(qw, Text2.Text, Text1.Text) - 1 'Устанавливаем курсор перед совпавшимся словом
Text2.SelLength = Len(Text1.Text) 'С помощью функции Len считаем сколько символов в Текстовом поле 1, и столько же выделяем
qw = InStr(qw, Text2.Text, Text1.Text) + Len(Text1.Text) ' Изменяем переменную qw на позицию курсора, для того, чтобы при следующем поиске, не искать уже найденное слово, а искать след. слово
Else ' Если в тексте больше нет искомого слова, то выводим об этом сообщение.
MsgBox "Здесь таких нет!!!"
End If
End Sub
Private Sub Form_Load()
qw = 1
End Sub

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

ШАГ 67:

Делаем ПОИСК и Замену

Ну вот, сейчас мы сделаем Поиск и Замена, как в Word Pad.
На форму кинь 3 текстовых поля(Text1 - Текст, в котором будет осуществляться поиск и замена, Text2 - искомое слово, Text3 - Слово, на которое будет замененно найденное слово)
У тебя должно получиться что - то на подобие этого:



Теперь, перейдем к программной части:

Dim Zamena As Boolean

Private Sub Command1_Click()
' Если слово не найденно, то выводим сообщение, и выходим из процедуры:
If InStr(1, Trim(LCase(Text1.Text)), Trim(LCase(Text2.Text))) = 0 Then
MsgBox "Слово '" & Text2.Text & "' Не найденно", 64, "Найти и Заменить"
Exit Sub ' Выходим из процедуры
End If

If Zamena = True Then ' Если переменная zamena = True, т.е. слово уже найденно(и выделенно), то:
Text1.SetFocus ' Ставим курсор в текстовое поле
Text1.SelStart = InStr(1, Trim(LCase(Text1.Text)), Trim(LCase(Text2.Text))) ' Устанавливаем курсор перед найденным словом
Text1.SelLength = Len(Text2.Text) ' Выделяем столько символов, сколько вписанно в Text2
Text1.SelText = Text3.Text ' Заменяем выделенное слово, на текст Text3
Zamena = False
Exit Sub
End If

If InStr(1, Trim(LCase(Text1.Text)), Trim(LCase(Text2.Text))) <> 0 Then ' Если слово найденно, то:
Text1.SetFocus ' Ставим курсор в текст. поле
Text1.SelStart = InStr(1, Trim(LCase(Text1.Text)), Trim(LCase(Text2.Text))) ' Устанавливаем курсор перед найденным словом
Text1.SelLength = Len(Trim(LCase(Text2.Text))) ' Выделяем
Zamena = True
End If
End Sub

Исходник

ШАГ 68:

Отладка

Скорее всего каждая твоя программа содержит кучу ошибок, чаще всего это неправильные действия юзера. Для того чтоб этого избежать в VB, и в других языках есть отладка. Здесь я не буду говорить тебе о всех способах нахождения и устранения ошибок, т.к. сам в этом не силен, но расскажу о самом главном.
1. Игнорирование ошибок. Для игнорирования ошибок служит оператор On Error Resume Next.
Вот маленький пример из моей программы "Кодировщик". Подключите библиотеку Microsoft Common Dialog 6.0, назовите ее CD1 Private Sub Command1_Click() 'При нажатии на кнопку:
CD1.ShowOpen 'Открывается окно открытия файлов
d = FreeFile
Open CD1.filename For Output As d 'Открывается выбранный юзером файл (если юзер не выбрал файл (нажал отмена), то произойдет ошибка)
Close d 'Закрываем файл
End Sub
Не поленись скопируй этот текст в VB, и не забудь подключить библиотеку. А вот пример этой же программы, только уже отлаженной:
Private Sub Command1_Click()
CD1.ShowOpen
d = FreeFile
On Error Resume Next ' Если юзер не выбрал файл, то ошибка игнорируется
Open CD1.filename For Output As d
Close d
End Sub
2. Способ перескока.В этом способе при возникновении ошибки будет перескакивать на заданную позицию. Пример отлаженной программы:
Private Sub Command1_Click()
CD1.ShowOpen
d = FreeFile
On Error GoTo Ошибка 'Если происходит ошибка то происходит перескакивание до Ошибке:
Open CD1.filename For Output As d
Close d
MsgBox "" 'Здесь я специально поставил MsgBox, чтобы ты почувствовал разницу
Ошибка: 'Досюда происходит перескок
End Sub
Напоминаю, что чтобы произошла ошибка, нажми на кнопку, и в окне открытия файлов, нажми на Отмена.
3. Перехват Ошибок. Описание этого способа ты не где ни найдешь кроме моего учебника (т.к. его я сам придумал), но может найдешь похожее. Если тебя закалибала какая - то ошибка, то ты можешь ее игнорировать, или заменить. Чтобы узнать номер ошибки, и то что в ней написано, есть объект Err. Для начала нам надо узнать номер ошибки. Для этого создай новый проект(Standart EXE), на форму кинь Текстовое поле, и кнопку.
CD1.ShowOpen
d = FreeFile
On Error GoTo Ошибка 'Если происходит ошибка то происходит перескакивание до Ошибке:
Open CD1.filename For Output As d
Close d
MsgBox "" 'Здесь я специально поставил MsgBox, чтобы ты почувствовал разницу
Ошибка: 'Досюда происходит перескок
Text1.Text = Err.Number 'Если в Окне открытия файлов, юзер нажмет на Отмена, то произойдет Ошибка, и ее номер куда - то запишется, и мы с помощью объекта Err узнаем ее номер (в текстовом поле)
End Sub
Зная номер ошибки (а мы уже знаем!), можно ее заменить.
Private Sub Command1_Click()
CD1.ShowOpen
d = FreeFile

On Error GoTo g 'Если происходит ошибка, то мы игнорируем ее
Open CD1.filename For Output As d
Close d
g:
If Err.Number = 75 Then 'Зная номер ошибки мы можем что - нибуть сделать (например обосрать юзера...)
MsgBox "Не нажимай на ОТМЕНУ - ЛАМЕР ПОГАНЫЙ!!!", 16
End If
End Sub

На этом все, если в тебе кипит кровь, и ты хочешь узнать об отладке больше, то в поищи в Яндексе, там статей на эту тему до сраки.

ШАГ 69:

Функции

Функции - нужны для того, чтобы один и тот же код не писать несколько раз. Например, записав в функции код, его можно вызывать несколько раз. Ну ты скажешь: "Я не лентяй, напишу 2 раза - не здохну" - нет ты не прав, я раньше также думал, до тех пор пока не стал делать большие программы, в них очень часто приходится повторять код (и не 2 раза), и без функций не обойтись. Начнем:
Для объявления функций тебе надо записать:

Function Имя функции()
Код
End Function

Ну думаю здесь все понятно, хотя влятри, в любом случае сделаем программу. На форму кинь 2 кнопки.

Function Bla() 'Объявляем функцию Bla
MsgBox "это моя первая функция" 'Код
End Function 'Завершаем функцию, это можно не писать, т.к. после написания первой строчки, это фенька создается автоматом

Private Sub Command1_Click() 'При нажатии на кнопку:
Bla 'Запускается функция Bla
End Sub

Private Sub Command2_Click() 'При нажатии на кнопку:
Bla 'Запускается функция Bla
End Sub

ШАГ 70:

Модули - с чем их едят?

Модули нужны для объявления глобальных переменных, т.е. переменных которые могут использоваться во всем проекте (во всех формах...), и для объявления API функций. Чтобы создать модуль тебе надо войти в Project/Add Module и нажать Module. Все модуль создан! Отлично чел, ты создал свой первый модуль! Так держать! Но у тебя возникает вопрос: "Что я буду с ним делать?" - а что захочешь, но в начале тебе надо узнать о Public`e & Private`e.
Ну короче префикс Private нужен для объявления переменных и им подомных внутри модуля.
А Public нужен для объявления переменных во всем проекте, т.е. глобальных. Ну как ты наверное понял - все это подготовка к API

Например:
Запиши в модуле строку:
Public Peremen as Long
Этой строчкой ты объявишь глобальную переменную: Perem, т.е. эту переменную могут использовать все формы, модули....
Поэксперементируй с переменными.
Так же в модуле можно создовать глобальные(Public), и обычные(которые будут работать только в модуле!(Private)) функции, т.е. ты сможешь разгрузить форму создав для функций отдельный модуль.



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

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

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