Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Директивы препроцессора #insert и #name. / 2 сообщений из 2, страница 1 из 1
07.06.2012, 15:11
    #37829618
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директивы препроцессора #insert и #name.
Для чего нужны директивы #insert и #name ? Из описания в хелпе ничего толком не понял.
...
Рейтинг: 0 / 0
07.06.2012, 16:52
    #37829852
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директивы препроцессора #insert и #name.
Строго говоря, эти директивы не являются директивами прекомпилятора FoxPro. Это директивы генератора меню.

Предположим, Вы содаете макет меню в построителе меню. В столбце Prompt указываете название пункта меню, в столбце "Result" выбираете "Procedure" и нажимете кнопку Create/Edit чтобы начать редактировать процедуру.

Хорошо. Создали Вы текст процедуры, затем выполнили генерацию меню и получили файл с раширением MPR. Если открыть этот файл MPR на редактирование командой вида

Код: sql
1.
MODIFY COMMAND MyMenu.mpr


то Вы увидите, что был сформирован примерно такой код

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
(...)
DEFINE BAR 1 OF test PROMPT "test"
ON SELECTION BAR 1 OF test ;
	DO _3ir0zerer ;
	IN LOCFILE("MYDIR\MYMENU" ,"MPX;MPR|FXP;PRG" ,"WHERE is MYMENU?")

PROCEDURE _3ir0zerer
MessageBox('test')



Т.е. имя процедуры, вызываемой из пункта меню было сгенерировано автоматически и представляет собой совершенно не читаемую последовательность символов "_3ir0zerer". Причем это имя при каждй новой генерации меню будет новым.

В большинстве случаев, имя подобной процедуры роли не играет. Однако иногда желательно иметь бОльшую определенность в имени процедуры. Например, чтобы иметь возможность вызвать эту же процедуру из другого пункта меню.

Вот директива прекомпилятора #name как раз и решает данную задачу. Если в окне редактирования текста процедуры построителя макета меню первой командой написать

Код: sql
1.
#name MyProc



то после генерации меню и просмотра сформированного mpr-файла увидим уже что-то вроде такого кода

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
(...)
DEFINE BAR 1 OF test PROMPT "test"
ON SELECTION BAR 1 OF test ;
	DO MyProc ;
	IN LOCFILE("MYDIR\MYMENU" ,"MPX;MPR|FXP;PRG" ,"WHERE is MYMENU?")

PROCEDURE MyProc
MessageBox('test')



Другими словами, директива #name используется для того, чтобы при генерации программного кода из предварительно созданного макета меню можно было бы указать имена конкретных процедур. Просто нет другого способа это сделать непосредственно в построителе макета меню.

Хотя, на практике, это почти бесполезное занятие, поскольку если процедура должна вызываться из нескольких мест, то удобнее создавать ее явным образом в блоке Cleanup построителя меню. Или в отдельном процедурном файле.

Для похожих целей используется и директива #insert. Для вставки некоего фрагмента кода в файл MPR при генерации меню из макета меню.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Директивы препроцессора #insert и #name. / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]