![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Option Explicit
Private Sub Command1_Click() Поскольку такого файла никто не создавал, то при запуске программы и нажатии кнопки Command1 возникнет ошибка 53, о чем нам любезно сообщит Windows: " Run-time error '53': Файл не найден". Программа аварийно завершится.
Перво-наперво, ошибку надо отловить. Сделать это можно с помощью оператора On Error. Однако сам по себе этот оператор работать не будет, это и логично, с отловленной ошибкой ведь надо что-то делать. Самое простой и безбашенный метод (кстати довольно эффективный, когда постоянно возникает ошибка, справиться с ней не можешь и это тебя достало) - присобачить к оператору On Error оператор Resume Next. Тогда получившийся оператор On Error Resume Next в случае возникновения ошибки возвратится в программу и передаст управление оператору, следующему за тем оператором, где возникла ошибка. Однако следует помнить, что On Error Resume Next действует во всей процедуре, и если процедура большая и сложная, то ошибка может возникнуть совсем в другом операторе, нежели ты ожидаешь. Она все равно будет обработана, VB перескочит на следующий оператор, а ты об этом ничего не узнаешь и будешь дня два ломать голову, почему не работает то-то и то-то, хотя все прописано в коде черным по-белому. Ну, тем не менее исправим наш код с использованием оператора On Error: Private Sub Command1_Click() Текст в операторах Form1.Print написан условно, так как ясно, что он будет выводится независимо от того, есть ошибка или нет. Т.е на самом деле пользователь никакой реальной информации об ошибке не получит и поправить ничего не сможет. Иное дело, если мы к нашему On Error попробуем пристроить оператор безусловного перехода GoTo метка. На самом деле он унаследован от старого Бейсика и использовать его нужно крайне осторожно. Этот оператор отсылает (в нашем случае, если возникла ошибка) к строке, помеченной меткой, но только внутри текущей процедуры. Положим следующую кнопку Command2 (ее назание GoTo метка) и в ней напишем процедуру Private Sub Command2_Click() Таким образом, при возникновении ошибки оператор GoTo возвращает нас в программу к строке, помеченной меткой ErrorMark. Под ней пишутся операторы, которые выполняются для реакции программы (или юзера) на ошибку. Обратите внимание, чтобы они не выполнялись в случае, когда ошибки нет, перед меткой поставлен оператор Exit Sub, который прерывает выполнение процедуры, не дожидаясь оператора End Sub. В качестве реакции на ошибку у нас выводится MessageBox с советом для юзера. Обратите снова Ваше драгоценное внимание на то, что в сообщении я употребил слово " наверное". Реально при открытии файла могут возникать разные ошибки и я лишь только предполагаю, что у нас ошибка 53.
Вот как раз с помощью этого объекта мы можем проанализировать, какая ошибка произошла, т.е. по сути, получить ее номер, и в зависимости от ситуации программно решить вопрос об ее устранении или наоборот, заставить юзера производить какие-либо судоржные действия. Положим на форму Text1 со свойством Multiline - True, кнопку Command3 (название - Прочитать файл), а также для того, чтоб нам было удобно создавать, убивать файл, положим еще три кнопки Command4, Command5 и Command6, называющиеся соответственно " Создать aaa.txt", " Создать пустой aaa.txt" и " Убить aaa.txt". В процедурах этих трех кнопок напишем: Private Sub Command4_Click() в Command5 создадим пустой файл, т.е. файл не содержащий ни одного символа Private Sub Command5_Click() и в Command6 - программу для уничтожения файла Private Sub Command6_Click() Обратите внимание, что перед созданием файла, я убиваю старый. Так как старый файл может на тот момент не существовать (в этом случае возникнет ошибка), я использую On Error Resume Next. Private Sub Form_Load() А вот теперь в кнопке Command3 напишем полноразмерный обработчик ошибок. Private Sub Command3_Click() Теперь, если мы убъем файл кнопкой " Убить aaa.txt" и нажмем кнопку " Прочитать файл", то в Text1 выведется вся доступная информация об ошибке, создастся новый файл и процедура начнет выполнятся по-новой уже с существующим файлом. Аналогичная ситуация возникает при создании пустого файла. При чтении такого файла возникает ошибка 62 - чтение после конца файла. Мы также получаем информацию об ошибке, дописываем в файл пробел и по Resume вновь запускаем процедуру. Если возникает ошибка с номером, который мы не знаем, то просто выводим об этом сообщения в Text1. Замечу, что с операторами Open и Close надо обращаться аккуратно. Все файлы должны своевременно открываться и закрываться. Если путаешься с работой с файлами, посмотри Главу 7. Скачать исходник можешь вверху страницы. Резюме: Для очистки совести скажу еще про функцию Error. Она по номеру ошибки выводит пояснение - что это за ошибка. Синтаксис: Private Sub Command7_Click() Совершенно ничего сложного. Ну-с, с этим все.
Мой дорогой друг. Когда ты устанавливал на жесткий диск Visual Basic 6.0, то в твой компьютер скачалось много всякого добра, и в том числе некоторые файлы средств управления ActiveX. Эти файлы лежат в c: \Windows\System или c: \Windows\System32 и имеют расширение. ocx. Большинство этих файлов представляют собой отдельные средства ActiveX, но например, тот, что мы будем рассматривать сегодня (Microsoft Windows Common Controls 6.0) включает в себя аж девять средств управления ActiveX. Некоторые средства ActiveX перечислены на странице " Элементы ActiveX". Вот сейчас мы о некоторых и поговорим. Начнем с самых нужных и используемых. Одним из таких средств является индикатор хода выполнения - Progress Bar. Если ты достаточно наблюдателен, то наверняка заметил, что при выполнении длительных процессов (копирование файлов, загрузка программ и т.п.) Windows выводит на экран окошко, где синенькая полосочка (индикатор хода выполнения процесса), постепенно увеличиваясь в длине, показывает, какой объем процесса выполнен, и вообще скорость процесса. Индикатор хода выполнения позволяет юзеру не нервничать и утешаться тем, что процесс худо-бедно идет, что он успеет раза два покурить и что компьютер не завис.
Чтобы приступить к использованию Progress Bar, его надо сперва добавить в панель инструментов нашего нового exe-проекта (по-скольку это средство управления A ctiveX храниться в файле mscomctl.ocx). Сделать это - раз плюнуть. Для этого надо создать exe-проект, затем в меню Проект надо щелкнуть по строке Компонеты (Рис.22) Вообще использовать ProgressBar имеет смысл только в циклах (любых). Ты задаешь начальное и конечное значение, а значение ProgressBar.Value меняется именно в цикле. Собственно именно оно и заставляет шкалу изменяться. Использование этого объекта рассмотри на примере программы Generator, которая иммитирует игрушки-гадалки. Знаешь такие китайские игрушки: загадаешь желание, крутанешь шарик, а он потом остановится и лампочка зажжется у слова типа " Никогда" или " Скоро". Так вот, у нас у аналогичных слов (они заданы в окне свойств, а не в коде) будет останавливаться шкала ProgressBar со свойством .Scrolling - 1-ccScrillingSmooth (неперывная). Dim MyValue As Long Положим на форму командную кнопку Command1 и в ней напишем процедурку
|