Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вы создаете окна в приложении (runtime)? вспомогательные окна 
:(
    Опции темы
 
Каким способом в приложении Delphi вы создаете необходимые вам вспомогательные окна?
Application.CreateForm(TfmFormTest,fmFormTest); [ 10 ]  [30.30%]
fmFormTest:=TfmFormTest.Create(Self); [ 22 ]  [66.67%]
Я - фанат WinAPI и окна всегда создаю с помощью CreateWindow... [ 1 ]  [3.03%]
Всего проголосовавших: 33
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
MetalFan
Дата 31.5.2007, 15:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



а не проще создать класс-менеджер форм определенного типа, который будет уметь их создавать, убивать, вести их список...

Цитата(ama_kid @  31.5.2007,  13:39 Найти цитируемый пост)
И вот не далее как сегодня один из уважаемых мной форумчан по поводу такого кода высказался в отрицательном аспекте.

видимо это был я.

аналог приведенного в шапке кода
Цитата(ama_kid @  31.5.2007,  13:39 Найти цитируемый пост)
 try
   fmOptions.ShowModal;  
  except
   fmOptions:=TfmOptions.Create(nil);
   fmOptions.ShowModal;
  end;


действительно поверг меня в шок... еще бы BSOD вызывали для проверки ;) шучу
просто по логике в except секции должен находиться код, который может попытаться проанализировать и исправить возникшие ошибки...
он должен выполнять минимум простейших действий, которые сами по себе не могут привести к дальнейшим ошибкам...

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

в шутку предлагаю модифицировать код:
Код

try
   fmOptions.ShowModal;  
  except
  try
    fmOptions:=TfmOptions.Create(nil);
    fmOptions.ShowModal;
   except
      try
        MessageBox(0,'Ну савсем п....ц настал!'....);
       except
           HALT(0);
       end;     
    end;
  end;


проблему поможет решить простейший вспомогательный класс-менеджер.
ну или на худой случай доп.флаг. но никак не код, который может привести к AV. а может сразу и не привести...

Это сообщение отредактировал(а) MetalFan - 31.5.2007, 16:02


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ama_kid
Дата 31.5.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



Цитата(MetalFan @ 31.5.2007,  16:09)
гораздо страшнее возникающее AV при вызове у "мертвой" формы ShowModal
Вот тут мы и упираемся в корни моих непоняток: чем это страшно, если AV - обработано? Неужели тем, что 
Цитата
неизвестно где и когда там происходит нарушение доступа к памяти... а если по тому адресу уже что-то располагается?
? Но какая разница, что там располагается? Если там располагается не то, что мне надо - я сознательно напарываюсь на исключение и делаю то, что мне надо - создаю форму в данном случае... Вот тут и возникает основной вопрос - может ли там располагаться что-нибудь, благодаря чему я получу "вилку" и из-за чего становится оправданным использование дополнительного класса-менеджера (который надо сопровождать по мере развития проекта) или даже обычных доп.флагов?


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MetalFan
Дата 31.5.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(ama_kid @  31.5.2007,  17:21 Найти цитируемый пост)
 чем это страшно, если AV - обработано?

потому, что неизвестно, какие данные могут быть повреждены в случае AV.
еще раз повторю - "гашение" Access Violation с помощью try..except блока - не есть 
хорошее решение. 
ВДУМАЙСЯ в смысл ошибки. AV - это не игрушка. AFAIK в случае возникновения нарушение доступа 
в драйвере система уходит в bsod...
AV - нарушение доступа при чтении или записи в неподготовленную(непредназначенную) для этого область памяти...
а что, если часть методов "умершего" экземпляра класса отработает, "успешно" поназапишет чего-нибудь 
в те части памяти, что используются уже другими экземплярами... и в самом конце вдруг все-таки свалится с AV.
ты радостно создаешь новую форму в except блоке... но вдруг у тебя начинают невзначай подглючивать другие
формы/классы... или все будет в шоколаде, а приложение у клиента начнет валиться? а?
или в след.версии делфи что-то поменяется в методе ShowModal и твое приложение попросту откажется нормально работать...

в общем я думаю надо сделать отдельную тему с голосовалкой,
в которой спросить, что "корректно ли использовать AV в качестве уведомления об несозданном/убитом экземпляре класса?"
я думаю, что ответ "нет" все-таки перевесит...






--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Igor_thief
Дата 18.6.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 12.9.2006
Где: Украина

Репутация: нет
Всего: нет



Всем очень внимательно надо почитать следующее http://delphi.about.com/od/adptips2005/qt/nilselfapp.htm и ссылки которые есть в статье! Жду комментов статьи? Мне лично не очень понятно почему при создании немодальных форм не стоит передавать в create(self (главную форму)), а лучше передавать Application. Если передать Application, то тогда форму потом не надо освобождать в деструкторе главной формы. Форму уделит Application еще до дестроя главной формы.
--------------------
В каждом из нас спит гений, и с каждым днем все крепче ...delphigeek.blogspot.com | www.iskomorokh.com 
PM MAIL WWW ICQ YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.