Разработка программ отклика(call back procedire):
Процедура отклика на событие диалога имеет стандартный интерфейс. Она имеет три входных параметра, а имени:
Имя диалога; тип: type(dialog)
Идентификатор управляющего элемента, генерировавшего событие; тип: integer
Идентификатор события; тип: integer
Первой рассмотрим процедуру отклика на нажатие клавиши Cancel.
Программа 4.
subroutine onCancel(dlg, id, event)
use dflogm
implicit none
include "resource.fd"
integer res, id, event
type(dialog) dlg
res = 1
Call DlgSetReturn (dlg, res)
call DlgExit(dlg)
End
Описание этой процедуры начнем со строки №8. Подпрограмма DlgSetReturn устанавливает код закрытия диалога, равным 1.
Следующая строка №9 закрывает диалог и возвращает управление главной программе. В главной программе это строка END. Следовательно, приложение завершается.
Теперь рассмотрим процедуру отклика на нажатие клавиши OK.
Программа 5..
subroutine onOk(dlg, id, event)
use dflogm
implicit none
include "resource.fd"
integer id, event
type(dialog) dlg
real x, y, res
real,external :: Add, Mul, Div
logical tf, on
character(50) str
tf = DlgGet(dlg, IDC_EDIT1, str)
read(str, *) x
tf = DlgGet(dlg, IDC_EDIT2, str)
read(str, *) y
tf = DlgGet(dlg, IDC_RADIO1, on)
if(on) res = Add(x, y)
tf = DlgGet(dlg, IDC_RADIO2, on)
if(on) res = Mul(x, y)
tf = DlgGet(dlg, IDC_RADIO3, on)
if(on) res = Div(x, y)
write(str, *) res
tf = DlgSet(dlg, IDC_EDIT3, str)
End
кeal function Add(x, y)
implicit none
real x, y
Add = x + y
End
real function Mul(x, y)
implicit none
real x, y
Mul = x + y
End
real function Div(x, y)
implicit none
real x, y
Div = x + y
end
В интерфейсе процедуры указаны три параметра, причем все они входные:
12DLG – (In) входная переменная, передающая в процедуру отклика какой диалог генерировал событие
ID – идентификатор управляющего элемента, генерирующего событие. Тип INTEGER.
Event – событие: для кнопки это может быть Click, Double Click и другие. Тип INTEGER.
В стр.7 описаны переменные предметной области. Это X, Y, Res. В стр. 9 объявлена строка. Эта переменная используется для хранения
В стр.8 переменная ‘on’ используется для контроля Radio Button. Состояние кнопок определяет тип операции нашего арифмометра.
Строки 10, 12, 14, 16 и 18 вызывают одну и ту же функцию DlgGet(). Эта функция имеет 3 параметра. Первые два параметра входные и третий – выходной.. Параметр ‘dlg’ – определяет в каком диалоге находится элемент ‘id’ , свойство которого’ propеrty’ мы пытаемся прочитать. В Edit Box’ах мы считываем строку, содержащую значения параметров X и Y. Для того, чтобы получить значения переменных X и Y надо преобразовать строку в машинный формат. Для этого используем инструкцию Fortran’а READ(str, *) x. Строка str представляет собой ’внутренний’ файл, откуда считываются данные, форматируемые ‘под управлением списка’. Об этом говорит параметр «*» в списке аргументов инструкции READ. Иными словами строка, считанная из Text Box, преобразуется в REAL и записывается в X. Аналогические действия происходят в строках 12 и 13.
В строках 14 – 19 осуществляется ветвление программы по состоянию коллекции Radio Buttons. Переменная «on» принимает значение TRUE только в одном из элементов этого типа. Этот фрагмент программы позволяет выбрать тип операции (+, * или /) и получить результат «res».
В стр. 20 преобразуем значение «res» в строку «str», которую в стр. 21 выводим в окно результата. Функция tf = DlgSet(dlg, IDC_EDIT3, str) имеет тот же список параметров, что и функция DlgGet(), но третий параметр становится выходным.
