![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ilya198293 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
В моём приложении несколько форм:
из формы 1 вызываю форму 2:
при закрытии формы 2 стоит обработчик событий:
без такого обработчика форма не закрывается, а просто становится невидимой. последовательность открытия и закрытия делаю 24 раза и на 25 выходит сообщение "Error reading ComboBox1.Items.Strings: A call to an OS function failed." Причём первых 24 раза обрабатывается всё нормально. Результат работы формы 2 зависит от настроек формы 1. При разных настройках всё тоже работает, но до 25 раза. Что это значит и как это победить? --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
||||
|
|||||
| ama_kid |
|
||||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Это значит, что у тебя идет неправильная работа с памятью... Я с такой проблемой не сталкивался, ибо таким варварским способом не освобождал форму, навскидку вижу проблему в том, что у тебя из обработчика формы непосредственно идет вызов деструктора. А ведь сказано в хелпе:
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||||
|
|||||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
так же добавлю, что нельзя убивать форму методом Free в обработчиках событий, описанных в ней же... для этого необходимо использовать метод Release.
ну это так, на всякий случай для общего развития. в приведенном случае правильно делать так, как сказал ama_kid. Это сообщение отредактировал(а) MetalFan - 30.5.2007, 09:28 -------------------- There are always someone smarter than you... |
|||
|
||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
Теперь ещё несколько моментов, которые возможно помогут прояснить ситуацию.
В обработчике событий TForm1.FormCreate стоит запуск формы 8, в которой в два потока производится SQL запрос и прогон ProgressBar(зависит от времени - 20 сек - типа "подготовка к работе"). при завершении ProgressBar вызываю Form8.Close. При этом возвращаюсь в форму 1 и сразу делаю Form8.Free. В этом месте пробовал ставить обработчик TForm8.FormClose с текстом Action:=caFree, но тогда форма 8 закрывается (не знаю закрывается или просто становится невидимой), а форма 1 не визуализируется, а в диспетчере задач приложение остаётся (ресурсы при этом не жрёт).Так что пока оставил Form8.Free в тексте процедуры TForm1.FormCreate. Далее настройка всего в форме 1 и потом пошёл каскад открываний и закрываний формы 2. Поменял в TForm2.FormClose Form2.Free на Action:=caFree получил как и посоветовали - эквивалент Free (по крайней мере пока работает так как надо). Но ошибка осталась всё равно. По идее 24 раза она же почему-то отработала. --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
какой ужас...
Пока система имеет возможность выделять тебе дополнительную память - все работает... Проверь утечки памяти хотя бы через диспетчер задач (а по хорошему - надо через модуль MemCheck)... P.S. Вообще, плохая практика в обработчике OnCreate одной формы создавать другую... Не будет ли правильнее создавать необходимую тебе Form8 перед созданием Form1? -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Ну так Action := caFree и вызывает в итоге Release.
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
Попробовал найти ошибки в программе просто создав новый проект и постепенно перенося процедуры из старого проекта...так столько ошибок повылезало...причём не могу понять как они в старом проекте проходили...например брал дату и конвертировал в строку в формате 'dd/mm/yy'. потом при раскладке считывал символы 1+2,4+5,7+8+9+10 и он считывал. в новом проекте даёт ошибку, причём логичную ошибку...ещё в нескольких местах такая же ерунда...когда считывалось из стринга больше символов чем там есть вообще...так что там нужно весь проект пересматривать...
я по крайней мере грешу на установку всех сервиспаков и апдейтов...без них как-то логичнее всё работало, хотя и вылетали ошибки - ошибки у самого делфи, но не у разрабатываемого проекта. --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
| ilya198293 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
Сейчас просто эксперементировал с двумя формами и получил такие результаты:
Form1 Здесь форма создаётся как модальная, а в проекте нет, но сути это не меняет
Forma2
Ошибка появляется когда вводится проверка try в форме1. как ещё можно проверить существование формы (видимой и не видимой) для того, чтоб не запускать их несколько штук? --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
||||
|
|||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Мысли проще:
Естессно, вторую форму желательно убрать из списка автосоздаваемых... -------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
Форма 2 из автосоздания убрана была.
Когда проверка такая:
то второй раз нажать на кнопку на форме 1 не предоставляется возможным до тех пор пока она не закрыта...в этом случае try можно и не ставить, просто написать Action:=caFree; и всё. но в случае когда форма не модальная, тогда при нажатии плодятся новые формы...суть то всей задачи запретить открывать несколько вторых форм, но при этом иметь доступ к форме 1, из неё могут запускаться другие формы с такими же проверками. --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
руцки бы паатрыфалл за такое.... типа: ...."АГА!" сказали сибирские мужыки и пашли пилить дальше двуручной пилой -------------------- There are always someone smarter than you... |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
MetalFan
Что конкретно не нравится?
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
О-о-о-о-о-о-о-о, а флаг это идея...как я сам не догадался...тармажу...спасибо
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
| aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
ЖЭСТЬ!!! Куда мир катиться... -------------------- ![]() |
||||
|
|||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
ama_kid, зачем доводить до того, что может возникнуть исключение? да еще и скорее всего AV. если можно обойтись, как ты сам и сказал, проверкой и установкой флага...
нет, конечно бывают моменты, когда исключения используются для уведомления... например в тех же индейцах это сплошь и рядом... но когда таким образом осуществляется проверка на "живость" объекта... брр.. -------------------- There are always someone smarter than you... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |