
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
22.03.2006, 16:10
|
|||
|---|---|---|---|
|
|||
Форма не ждет реакции пользователя |
|||
|
#18+
Добрый день. Подозреваю, что построение моей программы "хромает", но никак не могу додуматься почему. Поэтому спрашиваю совета. Программа базируется на форме as top level с меню. В main.prg Код: plaintext 1. Код: plaintext 1. Из меню запускаю разные методы. В том числе запускаю MyFormSet.Do (WindowsType=Modal) и выполняю SHOW для нужной формы этого FormSet'a. Форма появляется. Это все присказка. А теперь сказка. На форме из formset'a нажимаю кнопку cmd1. По click выставляются нужные свойства и выполняется код THISFORM.Hide. В методе Hide ничего не записано. Форма скрывается, объект formset остается. И программа зависает. Она теряет цепь выполнения команд. В Debuger'e stack пуст. Указатель следующей команды выполнения отсутствует. Почему так? Следующими командами в MyFormSet.Do я хочу обработать ответ пользователя ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.03.2006, 16:36
|
|||
|---|---|---|---|
|
|||
Форма не ждет реакции пользователя |
|||
|
#18+
Убери метод с READ EVENTS и вынеси его за форму. Примерно так: DO FORM mainbody ... READ EVENTS * Здесь действия по завершению приложения CLOSE DATABASES ALL ........... Вот здесь хорошая статья по организации стартового файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.03.2006, 17:22
|
|||
|---|---|---|---|
|
|||
Форма не ждет реакции пользователя |
|||
|
#18+
Спасибо. 1. Статью читал. 2. Все оказалось проще: вместо THISFORM.Hide стал использовать THISFORM.Release PS Извиняюсь за название топика. Хотел спросить про одно, а в итоге спросил про другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.03.2006, 02:05
|
|||
|---|---|---|---|
|
|||
Форма не ждет реакции пользователя |
|||
|
#18+
Hi Игорь! > В том числе запускаю MyFormSet.Do (WindowsType=Modal) и выполняю SHOW для > нужной формы этого FormSet'a. > На форме из formset'a нажимаю кнопку cmd1. По click выставляются нужные > свойства и выполняется код THISFORM.Hide. Спрятав форму формсета, ты никак не повлиял на формсет в целом - даже БЕЗ видимых форм он остаётся "видимым" - а т.к. он модальный, то исполнение программы останавливается на команде запуска формсета. Так что "прятать" надо весь формсет. Почему работает Form.Release() - потому что свойство AutoRelease формсета очевидно у тебя установлено по умочанию в .T. - и упомянутая форма является для формсета единственной (ну или все прочие к тому моменту уже тоже уничтожены) - поэтому по её убиении закрывается и весь формсет. Это одна из причин почему я вообще не советую использовать формсеты - слишком мало пользы при слишком большом числе вредных последствий (которые надо учитывать, т.е. раздувать свой код - иначе будут вот такие "чудеса" происходить). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.03.2006, 08:16
|
|||
|---|---|---|---|
|
|||
Форма не ждет реакции пользователя |
|||
|
#18+
Hi Igor Korolyov Да действительно свойство AutoRelease формсета установлено по умочанию в .T., так как ожидаю что формсет поведет себя соответственно описанию этого свойства. А именно: формсет будет уничтожен, когда будет уничтожена последняя из его форм. Уничтожена, а не скрыта как у меня. К моменту описанного явления формсет не уничтожен и имеет Visible=.T., а три его формы имеют Visible=.F. и тоже не уничтожены. С одной формой поработал, а вернутся в метод формсета сумел, только уничтожив форму с которой поработал. В общем то меня в основном интересует на какую команду какого метода программа попыталась перескочить в моем случае? Наверное больше для самообразования, так как практически выход из ситуации уже нащупан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.03.2006, 00:19
|
|||
|---|---|---|---|
|
|||
Форма не ждет реакции пользователя |
|||
|
#18+
Hi Игорь! > В общем то меня в основном интересует на какую команду какого метода > программа попыталась перескочить в моем случае? Видимо ни на какую не переходит - т.е. она "висит" на Formset.Show(1) или DO FORM ... - смотря что за формсет и как он "запущен". Если тебе не нужен формсет после "прятанья" формы, то видимо стоит вместо Form.Hide вызывать другой метод, который проверит - а не является ли "скрываемая" форма "последней видимой" в формсете, и если это так то вызывать ThisFormset.Hide() - иначе просто ThisForm.Hide() Наверное можно попытаться перекрыть собственно Hide формы - но учитывать там, что при входе в метод текущая форма ещё не спрятана... Хотя мне это кажется не столь надёжно. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&tablet=1&tid=1592043]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
362ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 680ms |

| 0 / 0 |
