Access 2002

Функция с обратным вызовом


В модуле basCal 1 back вы найдете пример вызова функции Windows API EnumFontFami 1 iesEx, которой передается для обратного вызова адрес другой функции из этого же модуля — EnumFontFamExProc. Функция Windows API служит для получения информации об установленных в системе шрифтах. Для каждого шрифта она вызывает вашу функцию с обратным вызовом. Вот как объявляется функция EnumFontFami 1 iesEx:

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

Когда объявлена функция Windows API и написана функция с обратным вызовом, остается только написать использующую их процедуру. В нашем примере это adhBui 1 dFontLi st:

После подготовки массива и получения контекста устройства Windows (необходимого для получения информации, связанной с выводом на экран или печатью) процедура вызывает EnumFontFamiliesEx. Обратите  на модификатор AddressDf в вызове этой функции. Он определяет и передает функции API адрес нашей функции EnumFontFamExProc. К тому времени как функция Windows API завершит свою работу и окончательно вернет управление нашей программе, функция с обратным вызовом будет вызвана столько раз, сколько в системе установлено шрифтов, и массив шрифтов будет заполнен их именами. После этого функции adhBuildFontList останется только отсортировать массив и вернуть его вызывающей процедуре.

Комментарии закрыты