![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Всякие операторы
Next переменная Здесь переменная - это числовая, обязательно объявленная оператором Dim переменная, число - любое число с которого начинается цикл, но может быть и переменной, другое число - это число, которым цикл заканчивается, Шаг - это на сколько за один цикл изменяется переменная. Если не ставить, то по умолчанию Step принимается за единицу. Всякие операторы - это любой программный код, который ты вставишь. Он будет выполняться каждый цикл. Например такой цикл For x=0 To 10 Step 2 добавляет изменяющееся значение x в Text1. Цикл сработает шесть раз, в первый проход x примет значение 0, и в Text1 запишется 0, во второй переменная x примет значение 2 (0+Step), в третий 4 и т.д. В Text1 выведется 0 2 4 6 8 10 Далее в разделе (General) руками, т.е. с помощью кнопок на клавиатуре, запишем объявление необходимых нам переменных, собственной одной: Option Explicit Значения переменной будут доступны всем процедурам нашей формы. Private Sub Form_Load() В теле процедуры уберем нашу тестовую строчку и напишем две новые: Private Sub VScroll1_Change() Записываем текущее значение VSvroll1 в переменную. ShowKod ' это опять тоже имя нашей процедуры, которую мы создадим ниже Теперь, мы создадим следующую собственную процедуру ShowKod() имя которой мы уже использовали в процедурах Form_Load() и VScroll1_Change(). Разберем ее подробно: Private Sub ShowKod() Обратите внимание, что здесь мы переменную объявляем локально, внутри процедуры, для организации цикла. Ее значение будет недоступно в других процедурах нашей формы. Далее мы определяем, сколько символов записано в Text1. Делается это с помощью функции Len(). Затем присваиваем это значение свойству .Max, т.е. наш ползунок не будет давать значение .Value больше, чем количество символов. VScroll1.Max = Len(Text1.Text) Теперь, для того, чтобы выводить наши значения по 5, используем цикл For...Next. Начальное значение цикла принимаем за значение VScroll1.Value, а конечное на 4 больше. Таким образом, если наш ползунок имеет положение, например, 4, то в цикле мы будем считывать символы из Text1 4, 5, 6, 7 и 8. For X = ZnachenieScroll To ZnachenieScroll + 4 Затем, с помощью функции Mid (в ней три аргумента: 1- текст, откуда считываем, 2 - с какого знака, считая слева начинаем считывание и наконец 3 - сколько знаков считываем), мы считываем по одному пять знаков (потому что цикл будет работать пять раз). Но переменную Х мы не можем использовать как есть для определения, в какой из пяти Text2 записать полученный символ. Ведь при значении ползунка, например 5, потребуется объект Text2(5), а у нас его нету, только с 0 до 4. Возникнет ошибка и программа аварийно прервется. Поэтому мы из значения X вычитаем значение ползунка. Тогда мы всегда вложимся в зону 0-4. Подумай, как это происходит. Text2(X - ZnachenieScroll).Text = Mid(Text1.Text, X, 1) Если ты подумал и не понял как, поясняю подробнее. Значение переменной ZnachenieScroll может быть любое в пределах, нами заданных, т.е. от 1 до Len(Text1.Text) (до длины нашей строки). Нам же нужно, чтобы из этих значений у нас получались числа (0, 1, 2, 3, 4), соответствующие существующим индексам Text2(X) - от 0 до 4: Text2(0).Text, Text2(1).Text, Text2(2).Text, Text2(3).Text и Text2(4).Text. Если мы это не учтем, то при первом же срабатывании цикла возникнет проблема, значение X у нас будет принимать значение 1, 2, 3, 4, 5. Но Text2(5).Text как я гововорил, не существует. При нашем же способе решения, при первом проходе ZnachenieScroll =1. Таким образом значения X будут от 1 до 5. А наш индекс получит следующие значения: Ну и теперь полученное значение в Text2(X-ZnachenieScroll) мы с помощью функци Asc() преврашаем в ASCII-код. Единственое но. Используя оператор If (без него никуда) и все той же функции Len() проверяем не пустое ли значение в Text2, т.е. не равна ли длина строки нулю, а то опять возникнет ошибка. Если длина строки - ноль, тогда мы в Text3 вписываем пустое значение (можно что угодно). If Len(Text2(X - ZnachenieScroll).Text) > 0 Then Все. конец цикла. Next X Да, чтобы мы могли вписать любой свой текст и запустить программу по-новой, напишем коротенький код для кнопки Command1. Private Sub Command1_Click() В принципе, все предельно просто. Исходник кода можно скачать вначале страницы. Следующую главу посвятим прибамбахам на форме - вставка иконки программы, изменение курсора и прочей ерунде.
В этой главе, други моя, разберем то, что делает программу удобней и привлекательней для пользователя.
Первым делом, нужно, чтобы программа вела диалог с тем идиотом, которому ты всучишь свой шедевр. Для этого существую диалоговые окна различного содержания. Выводятся они на экран функцией MsgBox. Входят в нее такие аргументы: MsgBox (" сообщение", число и тип кнопок, " заголовок окна", " имя файла справки если есть", номер раздела справки если есть имя файла) Два последних аргумента необязательны. Они используются, если у тебя создан файл помощи (Help). " сообщение" - это сообственно сообщение пользователю, например, " Ну ты дурак, нет такого файла" (максимальная длина приблизительно 1024 символа) " заголовок окна" - это то, что выводится в верхней полосочке (заголовке) окна, например, " Это твоя ошибка" А вот число и тип кнопок разберем подробнее. Это число получается из складывания трех чисел или констант (кому как удобнее):
Теперь, например, если нам нужно вывести на экран предупреждающий запрос с тремя кнопками Да, Нет, Отмена и чтоб главной была кнопка Нет, мы пишем цифру 3+48+256 число 307: PushButton = MsgBox (" Да ты баран! Нажми Нет! ", 307, " Нельзя так делать!!! ") или если использовать константы PushButton = MsgBox(" Да ты баран! Нажми Нет! ", vbYesNoCancel + vbExclamation + vbDefaultButton2, " Нельзя так делать!!! ") Получится как на рис. 11. Рисунок 11. Видишь, Выделена кнопка " Нет". Значит она главная. Это если пользователь давнет клавишу " Enter", то сработает " Нет", а не " Да" PushButton - это должна быть объявленная переменная. Это я придумал для нее такое имя.В нее записывается число, обозначающее, какую же кнопку нажал пользователь, чтобы мы могли заставить нашу программу среагировать как-нибудь. А числа (вместо них тоже можно писать константы) эти соответствуют следующим кнопкам:
Сечас мы создадим шедевр программирования, где используем диалоговое окно и разберем кое-что еще. Программа наша называется " Я - не вирус", а замечательность ее в том, что она вообще ничего не умеет делать. Смысл ее в том, что, когда пользователь пытается выйти из программы, возникает событие для формы _Unload. Это событие может быть вызвано оператором Unload, выбором команды " Закрыть" из системного меню формы, закрытием приложения из Списка задач (Task List) Windows, закрытием MDI формы, для которой текущая форма является дочерней, или выходом из Microsoft Windows во время работы приложения. При этом значение аргумента этой процедуры Cansel принимает значение False. Присвоение аргументу Cansel любого ненулевого значения предохраняет форму от удаления, но не останавливает другие события, например, выход из Microsoft Windows. Но нам на это налевать. Мы вставляем в эту процедуру MsgBox c запросом на выход. Если нажимается кнопка Отмена выхода, мы присваиваем локальной переменной Cansel значение True, и выход отменяется, а мы переходим к процедуре FikVam(), которая выводит соответствующий текст в форму. Обратите внимание, что для того, чтобы в диалоговом окне писать сообщение в несколько строк, я использовал CHR(13). А как раз 13 - это ASCII-код перевода строки. Вот код этого кошмара. Option Explicit Private Sub Form_Load() ' процедура загрузки формы Private Sub Form_Unload(Cancel As Integer) 'процедура выгрузки формы Private Sub FikVam() 'процедура, которая срабатывает при нижатии Отмена
Сейчас сделаем нашу никчемушку красивой. Во-первых заменим идиотский значок Бейсика на наш. Для этого в окне свойств Form1 ткнем в свойство Icon и в открывшемся окне Загрузить Иконку выберем подходящую. В исходнике программы я положил иконку scin.ico для примера. Если у тебя нет иконок, можно пойти двумя путями: найти их в Интернете (их там полно) или изготовить самому. Я считаю, что достойная программа должна иметь свою, уникальную иконку, а не стыренную у других. Мы что, такие безрукие, что иконку сделать не сможем? Ты можешь скачать простую самопальную программку ICA Converter (не мою) для иконкоделанья. Не самая крутая, зато бесплатно и худо-бедно работает. Теперь выберем для нашей формы другой курсор. Для этого в окне свойств Form1 найдем свойство MousePointer и выберем там 99 - Custom. Это значит, что значком будет тот файл, который мы выберем (расширение должно быть.ico или.cur). Потом ткнем в свойство MouseIcon и в открывшемся окне Загрузить Иконку выберем подходящую (в исходник я положил hns.cur). Надо сказать, что так сказать штатные курсоры Windows лежат в " C: \WINDOWS\Cursors". Ну конечно лучше сделать свой. Для полного обалдения можно еще воткнуть фоновую картинку в форму Form1, чтобы наш шедевр выглядел привлекательней. Для этого в окне свойств Form1 ткнем в свойство Picture и в открывшемся окне Загрузить Рисунок выберем подходящий. Надо только брать картинку разумного размера. В исходнике я положил картинку 00027.jpg размером 118Kb c небольшой контрастностью, чтобы лучше была видна надпись и подогнал размер формы под нее, а также в окне свойств выставил размер и тип (свойство .Font) и цвет (свойство .ForeColor) шрифта.
Теперь бы как хорошо было бы, если бы.... пользователь помимо нажатия кнопок мог отвечать нам какими-нибудь данными, ввести например, пороль, или имя, или еще чего-нибудь. Для этого используется функция InputBox. Синтаксис этой функции таков: InputBox(" сообщение", " заголовок окна", " данные по умолчанию", расстояние между левой границей экрана и левым краем экрана, то же для верхней границы, " имя Help-файла", номер раздела Help-файла) Обязательным здесь является только первый аргумент (), но желательно использовать второй и третий. Четвертый и пятый - при необходимости, шестой и седьмой - если есть Help (а у нас его нет). Смысл аргументов такой же, как и в MsgBox'е. Итак
Последние два аргумента нам пока ни к чему. Добавим теперь в нашу замечательную программу " Я - не вирус" InputBox так, чтобы при загрузке он очень строго спрашивал пароль юзера, а поскольку тот его не знает, пускал бы и так. Вставим в процедуру Form_Load, сразу после определения заголовка формы (Form1.Caption = " Я - не вирус! ") следующий код: Dim Password As String 'объявим локальную переменную, чтоб записать то, что введет юзер Password = InputBox (" Этот программный продукт доступен только по паролю." _ 'выведем окно InputBox If Password =" Ж4д17" Then 'если юзер воспользовался нашим паролем PushButton = MsgBox (" Ты что, не смог ничего придумать? " & Chr(13) & _ ElseIf Password = " " Then 'в противном случае, если юзер ничего не ввел или нажал кнопку Отмена
Обрати внимание, что так, как некоторые строки кода получаются очень длинными, я использую перенос. Для этого надо поставить курсор в то место, с которого хотите перенести строчку и нажимать пробел, нижнее подчеркивание и ENTER. Не надо только разрывать строчку, заключенную в кавычки, а то это вызовет ошибку.
Теперь, чтоб достойно закончить главу и нашу программу, запретим вызывать нашу программу, если она уже запущена. Для этого перед кодом, который мы только что написали впишем еще четыре строчки: If App.PrevInstance = True Then Здесь все ясно. При запуске программы " Я - не вирус" App.PrevInstance проверяет, запущена ли эта программа ранее. Если нет, то App.PrevInstance принимает значение False, если запущена, то True. Это условие проверяется оператором If. Выводится диалоговое окно MsgBox, и вторая копия закрывается. Ну вот, пока все. Код программы можно скачать вверху страницы. В следущей главе наверное разберем PictureBox и IimageBox для работы с картинками.
Я все-таки подумал, что пора потихоньку начинать работать с файлами. Начнем с объектов, которые помогут пользователю выбрать необходимый файл. Откроем новый.exe-проект, и поместим на форму три объекта (контрола). DriveListBox, DirListBox и FileListBox (Рис 12). Рисунок 12. Теперь положим на форму Text1и в окне его свойств поставим свойство MultiLine в True (это чтобы текст не выводился в одну строку). Сюда мы будем помещать основные возвращаемые этими объектами значения. Для этого напишем коротенький код. В окне кода для каждого объекта откроем следующие процедуры и впишем в них по три строчки кода:
|