Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vvedenie_F90_Interface.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
324 Кб
Скачать
☆

Разработка программ отклика(call back procedire):

Процедура отклика на событие диалога имеет стандартный интерфейс. Она имеет три входных параметра, а имени:

  1. Имя диалога; тип: type(dialog)

  2. Идентификатор управляющего элемента, генерировавшего событие; тип: integer

  3. Идентификатор события; тип: integer

Первой рассмотрим процедуру отклика на нажатие клавиши Cancel.

Программа 4.

  1. subroutine onCancel(dlg, id, event)

  2. use dflogm

  3. implicit none

  4. include "resource.fd"

  5. integer res, id, event

  6. type(dialog) dlg

  7. res = 1

  8. Call DlgSetReturn (dlg, res)

  9. call DlgExit(dlg)

  10. End

Описание этой процедуры начнем со строки №8. Подпрограмма DlgSetReturn устанавливает код закрытия диалога, равным 1.

Следующая строка №9 закрывает диалог и возвращает управление главной программе. В главной программе это строка END. Следовательно, приложение завершается.

Теперь рассмотрим процедуру отклика на нажатие клавиши OK.

Программа 5..

  1. subroutine onOk(dlg, id, event)

  2. use dflogm

  3. implicit none

  4. include "resource.fd"

  5. integer id, event

  6. type(dialog) dlg

  7. real x, y, res

  8. real,external :: Add, Mul, Div

  9. logical tf, on

  10. character(50) str

  11. tf = DlgGet(dlg, IDC_EDIT1, str)

  12. read(str, *) x

  13. tf = DlgGet(dlg, IDC_EDIT2, str)

  14. read(str, *) y

  15. tf = DlgGet(dlg, IDC_RADIO1, on)

  16. if(on) res = Add(x, y)

  17. tf = DlgGet(dlg, IDC_RADIO2, on)

  18. if(on) res = Mul(x, y)

  19. tf = DlgGet(dlg, IDC_RADIO3, on)

  20. if(on) res = Div(x, y)

  21. write(str, *) res

  22. tf = DlgSet(dlg, IDC_EDIT3, str)

  23. End

  24. кeal function Add(x, y)

  25. implicit none

  26. real x, y

  27. Add = x + y

  28. End

  29. real function Mul(x, y)

  30. implicit none

  31. real x, y

  32. Mul = x + y

  33. End

  34. real function Div(x, y)

  35. implicit none

  36. real x, y

  37. Div = x + y

  38. 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(), но третий параметр становится выходным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]