Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Функция Shell

Использование массивов при программировании игр | Массивы элементов управления | Пользовательский тип данных | Private Type типПерсонаж | Рамка (Frame) | Флажок (CheckBox) | Переключатель(OptionButton) | Slider, ProgressBar | Список (ListBox) и поле со списком (ComboBox) | Знакомство с другими элементами управления |


Читайте также:
  1. by M. Shelley
  2. Carving Egg Shells
  3. Fig. 3.I. Shells in which electrons rotate.
  4. FOR DARK SHELLS
  5. Palm kernels and coconuts must be cracked and the shell removed before processing can begin.
  6. PERCY BYSSHE SHELLEY (1792-1832).
  7. The Shell and the Glasses

С помощью функции Shellвы можете, не выходя из проекта, запускать другие программы Windows. Например, строка

y = Shell ("C:\WINDOWS\Notepad.exe")

запускает стандартный текстовый редактор Windows - Блокнот (Notepad). В скобках вы должны указать адрес запускающего файла нужного вам приложения. Вместо адреса можно писать так называемую командную строку:

y = Shell ("C:\WINDOWS\Notepad.exe C:\Untitled.txt ")

Здесь Блокнот откроется с загруженным файлом C:\Untitled.txt.

Вы можете управлять видом окна, в котором откроется программа:

y = Shell ("C:\WINDOWS\Notepad.exe C:\Untitled.txt", vbMaximizedFocus)

Здесь окно будет развернуто на весь экран. Попробуйте другие константы: vbHide, vbNormalFocus, vbMinimizedFocus, vbNormalNoFocus, vbMinimizedNoFocus.

Обработка ошибок. Оператор On Error

Многие функции и операторы, которыми вы пользуетесь в Visual Basic, вовсе не обязаны при любых обстоятельствах успешно завершать свою работу. Например, вы запустили процедуру для чтения файла с дискеты:

Private Sub Command1_Click()

Open "a:\Файлик.txt" For Input As #1

Input #1, a

Close #1

Debug.Print a

End Sub

но забыли вставить дискету в дисковод. Оператор Open не может выполнить свою работу, Visual Basic выдает сообщение об ошибке и работа приложения прерывается. Рядовой пользователь, работающий с вашим приложением, окажется в затруднительном положении. Он совсем не обязан разбираться в английском тексте сообщения, и если он даже догадается, в чем дело, и вставит дискету, все равно приложение надо будет запускать заново, так как оно прервано. Вы, как программист, должны учитывать, что с вашим приложением будут работать рядовые пользователи, причем даже не очень квалифицированные. Поэтому при программировании вы должны предугадать все возможные неправильные действия пользователя, чтобы при таких действиях приложение не прерывалось, а выдавало вразумительное сообщение на русском языке и советы по выходу из затруднительной ситуации.

Кое-что в этом направлении мы уже делали в 5.9, предохраняя калькулятор от арифметических действий над текстом и от деления на ноль.

Самым примитивным способом защиты вышеприведенной программы будет такой:

Private Sub Command1_Click()

On Error GoTo m1

 

Open "a:\Файлик.txt" For Input As #1

Input #1, a

Close #1

Debug.Print a

Exit Sub

 

m1: MsgBox ("Ошибка при вводе файла. Возможно, в дисководе нет дискеты.")

End Sub

Пояснения: Полужирным шрифтом я выделил новые элементы по сравнению с предыдущей программой. Оператор On Error GoTo m1 переводится так: "При возникновении ошибки иди к метке m1". Оператор On Error с момента своего выполнения заставляет компьютер быть начеку, не появится ли ошибка при выполнении программы. При ее появлении сообщение Visual Basic об ошибке уже не возникает, программа не прерывается, а управление передается на метку. Поэтому мы должны ставить оператор On Error раньше, чем операторы, могущие дать ошибку (в нашем случае это Open и Input). После метки вы должны поставить операторы, объясняющие пользователю, в чем дело, и помогающие как-то исправить ситуацию. В нашем случае никаких операторов, кроме MsgBox, не нужно. Забывчивый пользователь вставляет дискету в дисковод и снова жмет кнопку Command1. Все в порядке.

Обратите внимание на оператор Exit Sub. Если бы его не было, оператор MsgBox выполнялся бы всегда, даже при нормальной работе процедуры.

 

Написанный нами код слишком примитивен. Во-первых, мы не можем понять, какой оператор дал ошибку - Open или Input. Во-вторых, причин ошибки может быть несколько: отсутствие дискеты в дисководе, отсутствие файла на дискете и т.п. В первом случае мы вдобавок к оператору On ErrorGoTo m1 вставляем после Open, но перед Input, операторOn Error GoTo m2. В результате ошибка в строке Input будет обрабатываться операторами, начинающимися с метки m2., а ошибка в строке Open будет продолжать обрабатываться операторами, начинающимися с метки m1.

Во втором случае к нашим услугам объект Err, свойство которого Number принимает разные значения в зависимости от характера ошибки. Мы можем, например, писать такие строки:

If Err.Number = 71 Then

MsgBox ("В дисководе нет дискеты.")

ElseIf …………

Номера и имена констант ошибок вы найдете так: Help®Contents® MSDN Library (если она у вас установлена) ®Visual Studio documentation ®Visual Basic documentation®Reference®Trappable Errors.

 


Дата добавления: 2015-11-16; просмотров: 51 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Глава 16. Строки, файлы, обработка ошибок| Глава 17. Функции. Параметры процедур и функций

mybiblioteka.su - 2015-2024 год. (0.008 сек.)