for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Архив конференции по VFP до 2005 года
  

TOP3FAQ
Владимир Максимов
Автор

Сообщений: 13871
Откуда: Москва
Дата: 11.07.03 19:27:30
Может выложить это в решения? А то уж больно регулярно появляются эти вопросы.
=====================================================

Три наиболее часто встречающиеся вопросы новичков. Звучат они приблизительно так:

Пока я отлаживал приложение в среде FoxPro - все было нормально, но как только создал EXE (или APP) и запустил его, то:

1) Окно FoxPro мелькает на экране и тут же закрывается
2) Не могу выйти из FoxPro. Закрыть приложение. Либо появляется сообщение "Cann't quit Visual FoxPro", либо приложение продолжает висеть в окне задач, хотя на экране ничего не видно
3) При попытке изменить данные в рабочих таблицах появляется сообщение "Cursor is read-only"

Еще раз обращаю внимание, что эти ошибки возникли в готовом EXE (APP), а не на этапе отладки.

*******************************
1) <b>Окно FoxPro мелькает на экране и тут же закрывается</b>
*******************************

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

Стандартным способом организации точки останова является использование команды READ EVENTS.

Как правило, в качестве главного запускающего объекта используется файл PRG и в нем пишется примерно следующий код:

...
* Предварительные настройки среды FoxPro
...
DO MainMenu.mpr
DO FORM MainForm.SCX
READ EVENTS
...
* Операции по завершению приложения FoxPro и возврату среды в исходное состояние
...

В данном случае использовано одновременная загрузка и главного меню в основном окне FoxPro и запуск некой стартовой формы. При этом предполагается, что форма НЕ модальная (WindowType=0-Modeless).

Выполнение данной процедуры будет остановлено на команде READ EVENTS. Что и позволит работать пользователям в готовом EXE.

При подаче в любом месте программы команды CLEAR EVENTS FoxPro автоматически перейдет к выполнению команд, следующих за READ EVENTS, выполнение главной стартовой программы завершится и приложение FoxPro будет закрыто.

Таким образом, для закрытия приложения необходимо:

-) При использовании главного окна FoxPro с главным управляющим меню предусмотреть в этом меню пункт "Выход", в котором и дать команду CLEAR EVENTS
-) Если главное окно FoxPro не используется (например, при работе с формами ShowWindow=2 - As Top-Level Form), то команду CLEAR EVENTS следует дать при закрытии формы. Лучше всего в событии UNLOAD-формы
-) Для не штатных режимов закрытия приложения прочитать ответ на следующий вопрос


*******************************
2) <b>Не могу выйти из FoxPro. Закрыть приложение. Либо появляется сообщение "Cann't quit Visual FoxPro", либо приложение продолжает висеть в окне задач, хотя на экране ничего не видно</b>
*******************************

Данный вопрос напрямую связан с предыдущим. Дело в том, что при описании выхода из программы в предыдущем вопросе рассмотрен только штатный способ, когда и программист и пользователь все делали "как положено".

Если приложение FoxPro было закрыто, но тем не менее осталось висеть в списке задач (Task Manager открывающийся по Ctrl+Alt+Del), то это значит, что программист не дал команды CLEAR EVENTS.

Сообщение же "Cann't quit Visual FoxPro" появляется при попытке закрыть приложение нажав на крестик в правом верхнем углу основного окна FoxPro или нажав кнопку "End Task" в Task Manager.

Для перехвата этого события в FoxPro предусмотрена настройка ON SHUTDOWN. Т.е. в главной стартовой программе получается примерно такой код:

...
* Предварительные настройки среды FoxPro
* И настройка не штатного выхода из программы
ON SHUTDOWN Do ExitProg
...
DO MainMenu.mpr
DO FORM MainForm.SCX
READ EVENTS
...
* Операции по завершению приложения FoxPro и возврату среды в исходное состояние
* И сброс настройки по не штатному выходу из программы
ON SHUTDOWN
...


PROCEDURE ExitProg
IF MessageBox('Вы действительно хотите закрыть приложение?',4+32+256,'Закрытие приложения')=7
RETURN
ENDIF
...
* Действия по корректному закрытию всех открытых форм
* и откату незавершенных изменений в базе данных
...
CLEAR EVENTS
RETURN


*******************************
3) <b>При попытке изменить данные в рабочих таблицах появляется сообщение "Cursor is read-only"</b>
*******************************

Этот вопрос напрямую не связан с первыми двумя. Причин данной ошибки может быть несколько.

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

Чтобы убедится в этом откройте окно вашего проекта и найдите нужную таблицу. Слева от имени таблицы должен стоять значек перечеркнутого кружочка. Если это не так, то щелкните правой кнопкой мыши по имени таблицы и в появившемся меню выберите пункт "Exclude". После этого перекомпилите проект (заново постройте EXE).

Включение какого-либо файла внутрь EXE осущетсвляется аналогично. Правой кнопкой мыши по имени и в открывшемся меню выбрать пункт "Include".

Надо понимать, что включение какого-либо файла внутрь EXE означает, что этот файл становится частью EXE и его модификация недопустима. Это можно использовать как примитивный способ защиты своих данных, если эти данные предоставляются только на чтение.

Соотсветсвенно, файл включенный внутрь EXE не надо поставлять клиенту (он и так находится внутри EXE).


б) Еще одной причиной подобной ошибки может являтся перенос базы данных клиенту на лазерном диске. Дело в том, что в момент записи на лазерный диск всем файлам автоматически устанавливают признак Read-Only. Соответсвенно после копирования на жесткий диск к клиенту этот признак необходимо снять.

Правой кнопкой мыши в "Проводнике" (Explorer-Windows) на имени файла, в появившемся меню выбрать пункт "Свойства" (Properties) и снять птичку "Только чтение" ("Read-Only"). Если предварительно выделить несколько файлов, то свойства будут распространены на все выделенные файлы.


в) Более экзотическая причина - это настройка прав доступа пользователей. Возможно папка в которой расположены файлы DBF администратором была выдана в общее пользование со статусом Read-Only. В этом случае необходимо обратится к администратору с просьбой изменить права доступа.
Ratings: 0 negative/0 positive

RE: TOP3FAQ
av
Дата: 11.07.03 21:42:57
Конечно, надо в решения! Тем более, что все так качественно изложено. Просто блеск! Люди скажут спасибо.
Ratings: 0 negative/0 positive

не! Предлагаю ссылку прям в конфе сделать! +
Hel!Riser

Сообщений: 10448
Откуда: Нижний Новгород
Дата: 14.07.03 08:50:18
типа после Поиск'а - чтоб далеко не ходить и искать ссылку, чтоб запостить в ответ
Ratings: 0 negative/0 positive

Меня терзают смутные сомнения
Slavik

Сообщений: 1052
Откуда: Калининград
Дата: 15.07.03 14:11:35
Как представитель вопрошающей стороны скажу: каждый считает свою проблему исключительной и не полезет в FAQ, а предпочтет сразу задать вопрос. Это к вопросу (сорри за стилистику) о пользовании поиском и просмотром последних тем форума : уж сколько раз твердили миру...
Ratings: 0 negative/0 positive



Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 30 leonid sphinx Simple777 Taran  (Гостей: 26)

20.01.2021 09:52:48 exec: 0.02
Mem: 1.146 Mb

© 2000-2021 Fox Club 
Яндекс.Метрика