Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
include file
|
|||
|---|---|---|---|
|
#18+
Создаю класс myform на основе form цепляю к нему file1.h (в котором описаны некоторые константы). На основе класса myform создаю форму, запускаю, констант она в упор не видит. Если этот файл (file1.h) цеплять на форму (а не на класс) все в порядке все константы прекрасно видны. Внимание вопрос. В чем причина неработоспособности первого варианта? з.ы. VFP8SP1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2004, 08:23 |
|
||
|
include file
|
|||
|---|---|---|---|
|
#18+
Дело в том, что все команды типа #DEFINE ... это директивы компиляции . Т.е. они выполняются не в Run-Time (во время исполнения программы), а во время компиляции исполняемого кода из исходного текста программы. Т.е. представь как работает компилятор FoxPro: -) Ты создал класс. Физически, это некоторый файл VCX (VCT) или PRG (если ручками создавал). Заметь, ты прицепил свой файл File1.h именно к этому файлу VCX (или к какой-то его области, если вставка НЕ через пункт меню Class - Include) -) Если ты создаешь форму на базе данного класса, то это уже другой файл. И естесственно, он ничего не знает ни о каких командах #DEFINE другого файла, поскольку каждый файл в FoxPro компилируется отдельно, сам по себе. Ну действительно, ты же не видишь содержание кодов методов и событий родительского класса. А директивы #DEFINE - это именно содержание, а не свойство класса. Использование INCLUDE-файлов в FoxPro - это очень неудобная работа. Если есть возможность, то лучше обходится без них или явно писать команды #DEFINE в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2004, 09:44 |
|
||
|
include file
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо за ответ. Но у меня возникает вопрос где именно описывать дерективы #DEFINE, что бы константы были видимы во все форме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2004, 10:35 |
|
||
|
include file
|
|||
|---|---|---|---|
|
#18+
Для начала: А они тебе действительно нужны? Может лучше использовать Property класса (формы)? Область действия #DEFINE внутри формы (класса) предсказать сложно. Если они действительно нужны, то придется оставить INCLUDE и втыкать его во ВСЕ формы и классы. Процесс "втыкания" можно автоматизировать, но лучше это делать вручную. Дело в том, что отсутствие INCLUDE выяснится только в Run-Time, а компиляция пройдет без ошибок. Т.е. про него можно случайно забыть. Альтернативой может служить набор глобальных переменных (или свойств глобального объекта goApp), значение которых присваивается через #INCLUDE в стартовой проге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2004, 10:48 |
|
||
|
include file
|
|||
|---|---|---|---|
|
#18+
Немного не по теме, но все таки.. А откуда собственно отношение к дерективам предкомпиляции исключительно как к константам? Это проще рассматривать как "вставку" в исходный текст кода. Например, Код: plaintext 1. и Код: plaintext после компиляции будут совершенно идентичны. Кто не верит - refox в руки. ИМХО все эти директивы - довольно удобная штука и их можно испоользовать не только для констант. Например, вот такой код прекрасно работает во всех версиях vfp: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2004, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=41&gotonew=1&tid=1597026]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
5ms |
get first new msg: |
3ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 361ms |

| 0 / 0 |
