|
|
|
Timer
|
|||
|---|---|---|---|
|
#18+
Хотел на время работы exe-шника навесить общий таймер. Чтобы висел над главным меню и не был привязан к моим окнам. Сделал это так: (1) Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. Но даже если вставить работающие строчки варианта (1) в start.prg, то возникает ошибка компилирования. Приходится блок (1) записывать отдельным файлом, например Budilnik.prg, и запускать из start.prg всю конструкцию (1) командой DO Budilnik.prg Вопросы: 1. Почему прямое размещение кода в start.prg терпит фиаско, и приходится двигаться "огородами"? 2. Почему при выполнении _SCREEN.Removeobject('Hronik') ФОКС назойливо предлагает удалить класс Timer2 ? И если без этого не обойтись, то как его "замочить" по тихому, чтобы пользователь ни сном, ни духом...? 3. Можно ли привести в чувство код(2), чтобы не объявлять новый класс Timer2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 21:23 |
|
||
|
Timer
|
|||
|---|---|---|---|
|
#18+
1. Ваш вариант 1 прекрасно работает, но..приведите ВЕСЬ код вашего start.prg - не везде можно размещать DEFINE CLASS... Например это: You cannot place class definitions created with DEFINE CLASS within structured programming commands, for example, IF ... ENDIF or DO CASE ... ENDCASE, or in loops, such as DO WHILE ... ENDDO or FOR ... ENDFOR. И откройте тайну о вашей версии VFP ? 2. А вы вообще читали HELP прежде, чем использовать WriteMethod?! Что написано там: "Writes the specified text to the specified method. Available at design time only ." Надеюсь, что переводить не надо? С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 07:03 |
|
||
|
Timer
|
|||
|---|---|---|---|
|
#18+
VFP 9.0 SP1. 2. Help читал. Там, действительно, написано, что во WriteMethod класс определять можно только в режиме отладки. Но о WriteExpression сказано: Available at design time and run time. Поэтому я решил, что в Help может быть опечатка... Отчего же не попробовать при таком допущении вариант (2)? В Хелпах много чего-написано. Но всегда всё соответствует действительности. :) "Прекрасно работающий" вариант (1), вроде и не нарушал указанных в Хелпе условий, но заработал только в "огородном" режиме. Одновременно эта же неприятность произошла у моего приятеля его стартовом файле. Поэтому возник несколько праздный вопрос: "Почему?" 1. Текст своего start.prg упростил до минимума: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Да, действительно работает. Но, через пень-колоду... Если я зашел в среду VPF, произвел какую-нибудь символическую модификацию start.exe (например, добавил пробел и тут же его удалил), то при получении exe-шника пишет: Код: plaintext Но, если я покину среду VFP, после этой корректировки-записи, затем снова вернусь и приступлю к компиляции немодифицированного start.prg, то ошибки не будет. Предположу ваш резонный вопрос: "Что стоит за Do mainmenu.mpx ?" Обычное меню. Причем, эту строку можно поставить даже первой в файле start.prg - работать будет также. ------------------------------------------------------------------------------------- Я немного поэкспериментировал и предлагаю вам самому почувствовать разницу между вариантами А, Б, В и Г: ВАРИАНТ А: единый start.prg с непосредственным определением таймера Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ВАРИАНТ Б: единый start.prg с процедурным запуском таймера Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ВАРИАНТ В: двухфайловый: start.prg + budilnik.prg Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. Как вы увидите, работать и компилироваться без ошибок будет только варианты В-Г. Хочу знать: "Отчего так?" Кстати, повторюсь: как этот объект Hronik безболезненно ампутировать, чтобы ФОкс не беспокоился по поводу класса Timer2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 14:19 |
|
||
|
Timer
|
|||
|---|---|---|---|
|
#18+
В дополнение к AddObject() есть, как это ни странно, RemoveObject(). Загруженный для исполнения код блокируется от изменения на диске. Если необходимо его поменять - выгружаем код. Можно посмотреть в сторону CLEAR PROGRAM и CLEAR ALL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 14:31 |
|
||
|
Timer
|
|||
|---|---|---|---|
|
#18+
Я же вам писал, что нельзя в исполняемую структуры вовлекать DEFINE CLASS. Перенесите ВСЕ DEFINE CLASS ... в самый конец start.prg. А вы его оставили в цикле обработки событий READ EVENTS! DEFINE CLASS - это НЕ исполняемый код, а, по сути, шаблон, заготовка по которому будет создаваться объект по командам типа AddObject, NEWOBJECT и пр.! С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 15:41 |
|
||
|
Timer
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Теперь все работает. Даже RemoveObject стал беспрекословен. :) Осталась самая малость. Мистер Любознайкин хочет узнать отчего тогда вариант Г с использованием препроцессора тоже успешно работал? Ведь определение класса Timer2 стояло-то в цикле READ EVENT? (правда, до этого я считал не считал это за цикл). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 22:27 |
|
||
|
Timer
|
|||
|---|---|---|---|
|
#18+
Hi men dea! Only the #DEFINE ... #UNDEF, #IF ... #ENDIF, and #INCLUDE preprocessor directives are recognized in a header file. Comments and Visual FoxPro commands included in a header file are ignored. > отчего тогда вариант Г с использованием препроцессора тоже успешно работал Ты где-то ошибся при тестировании - вариант Г не работает и не может работать. Читай внимательнее хелп по #INCLUDE. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 17:53 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33754664&tid=1591517]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
134ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 412ms |

| 0 / 0 |
