Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

14.7. Директивы условной компиляции

Директива условной компиляции позволяют включать в исходный текст программы фрагменты текстов в зависимости от значений условных констант. Такие директивы начинаются с символа решетки ”#”.

Условная константа задается в виде:

#Const <имя условной константы>=<выражение>

Выражение может быть любого типа.

Директива условия имеет вид:

#If <условие-1> Then

[<блок-1>]

[#ElseIf <условие-2> Then

[<блок-2>]]

...

[#Else

[<блок>]]

#End If

<блок> ‑ последовательность операторов.

Если условие истинно, то в текст программы включаются все строки блока, который указан после этого условия. В условии используются условные константы.

Данные директивы позволяют настраивать исходные тексты программ, превращая их в простые макрогенераторы. Условные константы используются в качестве внешних параметров настройки макрогенератора.

Пример.

#Const Procent=”Да” ‘параметр вычисления процента выполнения плана

...

#If Procent=”Да” Then ‘проверка параметра вычисления процента

Vp=Str(100*Fact/Plan) ‘вычисление процента

#Else

Vp=”” ‘процент не вычисляется

#End If

14.8. Прерывание процессов функцией DoEvents

При работе программы могут наступать различные события, например щелчок мышки по командной кнопке. Такие события должны немедленно обрабатываться во время ожидания Windows. Однако, если приложение выполняет длительную операцию (например, длинный цикл), то событие не может быть обработано немедленно, и оно будет находиться в состоянии отложенной обработки до завершения длительной операции. Функция DoEvents позволяет принудительно выполнить отложенную обработку. Функция возвращает число открытых форм.

Пример. Вычислить сумму ряда 1+1/2+1/3+1/4+ ... +1/n (рис. 14.8.1).

По кнопке Счет начинается или продолжается подсчет сум­мы, по кнопкеПрерватьвы­во­дится текущее значение сум­мы в поле Text1.

Рис. 14.8.1. Форма

Приведем текст процедур обработки кнопок.

(General)(Declarations) раздел объявлений формы

Dim i As Long, j As Long, s As Single ‘объявление внешних переменных

Private Sub Command1_Click() ‘процедура обработки кнопкиСчет

i = 0: j = 0: s = 0 ‘обнуление переменных

Do While True ‘заголовок бесконечного цикла счета суммы

i = i + 1: j = j + 1: s = s + 1 / j ‘тело цикла

‘прерывание цикла для принудительного выполнения процедур обработки

‘кнопок “Прервать” или “Выход” после щелчка мышки по этим кнопкам

If i > 1000 Then i = DoEvents()

Loop‘конец тела цикла

End Sub

Private Sub Command2_Click() ‘процедура кнопкиПрервать

Text1.Text = s ‘вывод текущего значения суммы ряда

End Sub

Private Sub Command3_Click() ‘процедура кнопкиВыход

End ‘завершение работы программы

End Sub

14.9. Параметры настройки приложения

При создании приложения параметры его настройки для текущего пользователя (User) можно поместить в реестрWindowsв разделе \Hkey_Current_User\Software\VbAndVbaProgramSettings.

Параметры задаются и сохраняются в виде:

<ключ (имя параметра)>=<установка (строка ‑ значение параметра)>

Рассмотрим функции (процедуры) для работы с реестром.

Сохранение параметров

SaveSetting (<имя приложения>, <секция>, <ключ>, <установка>)

Примерсоздания новой ветви реестра с именем “Stroiki” с под­ветвью “Plehev” с параметром “Gorod”= “Екатеринбург”

SaveSetting “Stroiki”, “Plehev”, “Gorod”, “Екатеринбург”

Считывание параметров

GetSetting (<имя приложения>, <секция>, <ключ> [, <по умолчанию>])

Если операция чтения закончилась неудачно, то возвращается умал­чи­ваемое значение.

Примерсчитывания параметра “Gorod” из предыдущего примера

p=GetSetting(“Stroiki”, “Plehev”, “Gorod”, “ПараметрGorodотсутствует!”)

Printp‘вывод значения параметраGorod(“Екатеринбург”)

GetAllSetting (<имя приложения>, <секция>)‑ считываются все записи из секции. Возвращается двумерный массив типаVariantсо всеми записями секции (в первой колонке содержатся имена параметров, а во второй ‑ их значения). Если операция чтения закончилась неудачно, то возвращается пус­тое значение.Empty.

Примерсчитывания всех параметров из секции “Plehev”

Dim p As Variant, i As Integer ‘объявление переменных

p=GetAllSettings(“Stroiki”, “Plehev”) ‘ считывание параметров (p)

IfNotIsEmpty(p)Then‘ чтение закончилось успешно

For i = LBound(p, 1) To UBound(p, 1) ‘ цикл распечатки массива (p)

Debug.Printp(i, 0),p(intSettings, 1) ‘ вывод имени и значения параметра

Next‘ конец цикла

Endif‘ конец оператораIf

Удаление параметров

DeleteSetting (<имя приложения>, <секция> [, <ключ>])

Удаляется один или все параметры из секции.

Примерудаления всей секции. DeleteSetting “Stroiki“, “Plehev“.