|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Есть главное окно программы, в котором есть модальное окно с пунктом меню "Выход" (меню на основе класса) Есть процедура vixod: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
так вот при выборе пункта меню "Выход" на модальной форме или нажатии на "кретик" главного окна программы форма уничтожается, а главное окно программы остаётся.... но и конечно же потом при нажатии на "крестик" главного окна программы выдаётся сообщение "Невозможно завершить Visual FoxPro".... в главной программе проекта после READ EVENTS ничего нет.. как решить проблему выхода из программы в данном случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2007, 18:36 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
немного переделал и главный файл проекта и саму процедуру vixod главный файл: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
и сама процедура vixod: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
но теперь, чтобы выйти из программы приходится два раза вызывать процедуру vixod, т.е. жму на "крестик" главного окна приложения, закрывается форма, потом жму ещё раз, выхожу из приложения... либо жму сначала на кнопку "Выход" на форме, закрывается форма, а потом жму на "крестик" главного окна приложения... так как сделать так, чтобы по одному какому-нибудь из действий: либо по нажатию на кнопку "Выход" на форме, либо на нажатию на "крестик" главного окна приложения, сразу закрывать и форму и главное окно приложения, т.е. сразу выйти из приложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2007, 22:03 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Посмотрите поиск по форуму - люди уже выкладывали свои наработки. Могу повторить, то что я использую, может пригодятся некоторые идеи: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2007, 22:11 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
да всё у перерыл.... и всё равно сначала закрывается только форма и остаётся только главное окно приложение... и так тоже... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2007, 22:22 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
КонецЦиклаи так тоже... Ну тогда странно... У меня как раз для таких случаев цикл - перебирабтся и закрываются все формы сначал... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2007, 22:59 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Если форма не модальная, то всё ОК, а если модальная, то почему-то сначала закрывается только она, а потом, чтобы выйти надо опять жать на "крестик" главного окна приложения... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 01:19 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Прежде всего вызываешь модальное окно командой DO FORM my.scx TO lReturn IF lReturn ThisForm.Release ENDIF В процедуре Vihod IF MESSAGEBOX("Выйти из программы?", 036, "Выход") = 6 ThisForm.lRet = .T. ThisForm.Release ELSE _Screen.Refresh() ENDIF В методе Unload модальной формы RETURN This.lRet && значение This.lRet = .T. если выбран пункт меню ВЫХОД В главном окне проги, в DESTROY CLEAR EVENTS Ну а в запускающей программе, после READ EVENTS CLEAR ALL ******* Ну и так далее, т.е. удаляешь все переменные, библиотеки, очищаешь память.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 04:01 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
КонецЦиклаЕсли форма не модальная, то всё ОК, а если модальная, то почему-то сначала закрывается только она, а потом, чтобы выйти надо опять жать на "крестик" главного окна приложения... О какой модальной форме идет речь? Если mainform, то посмотри свой код: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 19:48 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
модальная форма mainform вот я и спаршиваю как в таком случае лучше организовать выход? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2007, 09:36 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
модальная форма mainform вот я и спаршиваю как в таком случае лучше организовать выход? Я же вроде напиСАЛ как... Не понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2007, 11:24 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Вцелом всё понятно. Спасибо. Только вот это не совесем. В чьём DESTROY делать CLEAR EVENTS? Если скрина. то как? В главном окне проги, в DESTROY CLEAR EVENTS И вдогонку ещё один вопрос. Если в приложении возникает какаянить ошибка, появляется соответствующее сообщение с тремя кнопками, и когда выбираешь "Прекратить", то зацикливается на процедуре выхода, т.е. появляется сообщение "Выйти из программы?", и хоть "да", хоть "нет", то всё равно снова появляется это сообщение... только помогает снятие приложение через диспетчер задач. Как это побороть? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2007, 11:43 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
КонецЦикламодальная форма mainform вот я и спаршиваю как в таком случае лучше организовать выход? Для тех кто в танке. Одно из двух: 1. Убрать READ EVENTS 2. Сделать форму немодальной ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2007, 11:51 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Если главное окно программы SCREEN (главное окно фокса), то код запуска модальной формы будет таким Код: plaintext 1. 2. 3. 4.
Например ON ERROR MyPrg.prg * MyPrg =MESSAGEBOX("Ошибка") CLEAR EVENTS Только не забыть востановить стандартный обработчик ошибок ON ERROR Хотя я лично противник использования главного окна Фокса. Свои приложения всегда делаю как As Top-Level Form, а главное окно подавляю. Намного удобнее в отладке и нет необходимости перегружать Fox при ошибках во время разработки программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2007, 12:40 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Dima T КонецЦикламодальная форма mainform вот я и спаршиваю как в таком случае лучше организовать выход? Для тех кто в танке. Одно из двух: 1. Убрать READ EVENTS 2. Сделать форму немодальной Для тех, кто не в танке: Не убирая Read Events и оставив форму модальной. Задача: 1) существует ДЕРЕВО форм: родительская и ей порожденные (и ими порожденные). При этом, расчитываем на то, что какие-то порожденные формы могут просто минимизироваться, не закрываясь (или просто быть в фоне). 2) необходимо организовать: а) корректное закрытие форм таким образом, чтобы при закрытии формы, кроме нее закрывались и все, ей порожденные б) корректное общение между формами без Public и прочих рекомендованных маразмов - неудобно в) невоможность запуска 2-го экземпляра одной и той же формы - свернув формочку, пользователь, обычно забывает про это и лезет запускать ее повторно. Решение - коротко. Делаем класс на основе формы. Добавляем ему 2 проперти: pParent (.null.) и pChildFrm[1] (.f.) Вызов этого удовольствия делаем, передавая ему параметры массивом, первым элементом которого является this формы-родителя. При инициализации (Init) класса: а) сохраняем this родителя в pParent б) проверяем весь массив pChildFrm родителя (а доступ у нас спокойный - pParent (this родителя)) на наличие Caption порождаемой формы. Если есть, активизируем this.pchildfrm .WindowState= 0 this.pchildfrm.show и возвращаем .f. в Init-е), если нет - расширяем pChildFrm родителя и вносим туда this порождаемой формы Кстати, получили нормальный обмен данными между формами: Порождаемая - родителю: this.pParent. ...=что угодно родитель - порождаемой: this.pChilFrm[?]. ...=что угодно Ликвидация методом Release а) выставить в .null. себя в pChildFrm родителя и поджать этот pChildFrm б) послать release всем своим pChildFrm: For i=1 To Alen(this.pchildfrm) this.pchildfrm[1].release EndFor Обратите внимание на это: this.pchildfrm[1].release Дело в том, что порожденные формы на Release делают то же самое. Т.е., после release 1-й порожденной формы она, в том числе, высталяет себя в .null. и поджимает pchildfrm. Таким образом, после каждого вызова this.pchildfrm[1].release, pchildfrm сокращается и на место 1-й становится следующая. Запуск главной формы стандартный: DO form form1 Name Form1 Read Events Закрытие ее тоже простое. Оно у меня на кнопке (и в меню) This.parent.Visible= .F. ...... Clear Events This.Parent.Release Проблем аж никаких. Все формы - на основе вышеописанного класса, все - модальные. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2007, 01:54 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Большое количество одновременно открытых окон, говорит о плохой организации программы. Или Вы 1С насмотрелись? Как по моему они уже сами запутались, если для пользования их прогой приходится специально людей обучать по два месяца!!!!! Для нормальной работы необходимо всего два одновременно открытых окна (главное и например какой нибудь справочник для заполнения). Тем более позволять пользователю свернуть дочернее окно. Если например пользователь открыл форму заполнения таблицы наименований товара, то он не должен иметь возможность сделать ещё что то, пока он её не закроет. Иначе с "пытливыми" умами наших юзеров, они черт знает что натворят. Так что смотрите внимательнее за своими программами сейчас, когда работать приходится руками и головой, потом придётся ещё и ножками побегать!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2007, 07:52 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
2 MiklS 1. Основные+вспомогательные (калькулятор, календарь, прочая дребедень...) - уже сколько? 2. Учитывая, что гридом я последний раз пользовался еще в 2.0 (там правда его, как такового, не было - организовывался на browse), что работаю я на SQL-сервера, как минимум, добавляется еще одна форма - изменения данных. 3. А чего я должен пользователя ограничивать? Он хочет одновременно иметь 10 окон - флаг ему в руки. Кстати, при специфике работы моих кадров, иметь одновременно 4..6 основных окошек - очень удобно... Мое дело - сделать так, чтобы это все правильно работало при пользователе-идиоте. Так, чтобы все вовремя обновлялось, чтобы при попытке открытия уже открытой формочки, она вела себя правильно, чтобы все дочерние формочки закрывались при закрытии родительской. Пока не жалуются - уже 5 лет классу пошло. Особой беготни тоже не видать. А класс этот я уже практически всюду сую, даже если 2-3 открытые формочки - все равно удобно. Но это вопросы такие... Пользователю должно быть удобно - вот наш с Вами принцип. Можно мило поболтать о взаимодействии форм, о корректном закрытии - о внутренней нашей с Вами кухне. А пользователю это до... Если Вы считаете, что существует жесткая, везде одинаковая связь между кол-вом окошек и удобством пользователя, я с Вами не соглашусь. Предпочитаю Oper-у Internet Explorer-у. С уважением, всегда рад... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2007, 20:16 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
2 MiklS Сорри, не заметил сразу... MiklS Если например пользователь открыл форму заполнения таблицы наименований товара, то он не должен иметь возможность сделать ещё что то, пока он её не закроет ??? Одно заполнение формы - один товар из одной партии - я правильно Вас понял? И почему он не должен иметь возможности, не закрывая эту формочку, работать с этим товаром, после того, как уже занес его? ИМХО, один из самых безопасных вариантов. ИМХО, что-то у Вас не так, если в этих условиях можно что-то наворочать... (Варианты: прямое редактирование рабочих таблиц - прямо из формы, без кнопочки "ОК"("ЗАНЕСТИ", или как там?); вешать рабочие таблицы непосредственно на комбобоксы; играться с private data sessions, некорректные обновления данных и пр. - много вариантов есть...) По крайней мере, у меня, примерно в аналогичной ситуации (занесение нового прибора учета) - все тип-топ, можно сразу с ним работать, не закрывая эту формочку - висит она себе автономно , и все... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2007, 20:36 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Обычно всегда экономишь место на экране. По этому моё мнение - не нужно засорять экран другой информацией. Зачем пользователю окно справочника, если он закончил с ним работать? Не у всех большие мониторы, по этому нужно всегда ориентироваться 600*800, ну а там раздвинится, то хорошо. Конечно если юзер хочет, можно и 20 окон прилепить... но все равно нужно стараться всю необходимую информацию компактно разместить на одном окне, ну а все вспомогательные окна это уже второстепенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2007, 13:28 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Да, согласен с Вами, сколько лет прошло, а все равно на 800х600 все пишешь... У меня дисплей домашний wide 1680х1050, видели бы Вы эту 800х600 на нем - кур я м на смех... Что же касается окошек - нерабочие можно закрывать, а можно и сворачивать. Или вообще бросать... Подвесить одновременно несколько окошек - очень удобно - тот же справочник, к примеру. Нет у тебя прибора - не закрываешь свое основное окно, а поднимаешь справочник, добавляешь - и работаешь дальше себе. Попробуйте сами. Я сам очень долго писал по этому принципу - минимум открытых окон, не закроешь предыдущее - не попадешь дальше, а попробовал другой - кое-где очень удобно. (ИМХО). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 20:31 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Я выхожу из этого положения следующим способом (см. пример) На главной форме распологаем Grid например со списком продаж. Слева (можно где угодно) слайд меню (нечто похожее на меню Explorer), изменяющееся при определённых условиях (в примере его нет, заменено на простые кнопки). При необходимости редактировать какой либо справочник, Grid закрывается другим окном для изменения этого справочника. Получается и красиво и место на экране экономится. Пользователь всегда видит как бы одно окно. Посмотрите, может пригодиться!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2007, 03:31 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Перечитала массу всего, многое почерпнула, но один вопрос остался. Есть prg-файл _SCREEN.Visible = .F. SET ESCAPE OFF ..... && настройки SET DATE TO GERMAN SET CENT ON SET DEFAULT TO ..... && путь DO FORM lg_form READ events close data CLEAR EVENTS Bызываемая форма As Top-Level с двумя кнопками -Расчет и Выход. Код кнопки Выход CLEAR EVENTS CLOSE DATABASES CLOSE all RELEASE ALL _screen.ActiveForm.Release() RELEASE ALL Все бы замечательно, но форма стартует без окна фокса, а при выходе я от этого окна никак избавиться не могу. В каталоге с программой лежит ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2010, 23:46 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
В каталоге с программой лежит config файл с SCREEN=OFF Не пойму, фокс не видит это конфигурационный файл? Или что я делаю неверно. Очень хочется избавиться от главного окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2010, 23:49 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
Elenka_DВ каталоге с программой лежит config файл с SCREEN=OFF Не пойму, фокс не видит это конфигурационный файл? Или что я делаю неверно. Очень хочется избавиться от главного окна. Для начала, не надо поднимать тему 3-х летней давности. Создавайте новую Вы не включили "случайно" файл конфигурации внутрь EXE? В этом случае именно этот "внутренний" файл конфигурации и будет использоваться. Т.е. файл Config.fpw вклюен в файл проекта PJX. Определить, какй файл конфигурации подхвачен можно командой SYS(2019) Насчет "избавиться" от основного окна FoxPro - это Вы зря. Вам все-равно придется создавать главную форму приложения. Обычно для этих целей как раз и используют основное окно FoxPro от которого Вы так стараетесь избавится. Естесственно, заменяя системное меню своим и устанавливая свой ToolBar. Построение приложения на базе As Top-Level форм требует более тщательного программирования. Больше сопутствующих проблем приходится решать. Это "не естесственное" построение приложения с точки зрения FoxPro. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2010, 10:42 |
|
Как корректно завершить приложение?
|
|||
---|---|---|---|
#18+
По поводу темы учту. По поводу главного окна. У меня как раз уже и есть главная форма приложения и на ней не будет никакого меню, только три кнопки и текст для информации. Формочка маленькая, бухгалтерскую часть она замечательно выполняет. Просто пользователи пугаются всяких незнакомых окошек и хотят, чтоб если они нажали на кнопочку "Выход", так форма тихо и бесследно закрылась. Спасибо за консультацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2010, 21:30 |
|
|
start [/forum/topic.php?fid=41&msg=34771057&tid=1585415]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 158ms |
0 / 0 |