Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Приложение и его главное окно - странный эффект


Ice-T ©   (2007-07-20 16:02:00) 

Здравствуйте мастера =) Возникла очень странная проблема.. Проект уже довольно большой (относительно). И вот на заверщающем этапе проявился интересный эффект. Как известно, если запустить пустой проект, то в списке процессов отобразится процесс, а в списке окон окно (Form1). Но у меня почему-то перестало регистрироваться главное окно. Процесс есть, а окна нет. Дочерние регистрируются нормально. Видимых проблем нет. Регистрация (т.е. окно появляется в списке) вот здесь: TCustomForm.Create - IniInheritedComponent - InitComponent - InternalReadComponentRes - StreamReadComponent. Ресурс (dfm) в эти процедуры передается правильный, от главной формы. А один раз произошло наоборот. Т.е. зарегистрировалось окно, но процесса видно не было! Если кто знает, в чем беда - подскажите плз!!!


Ice-T   (2007-07-21 02:07:00) [1]

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


Ice-T   (2007-07-21 00:16:00) [2]

Удалено модератором


Dib@zol   (2007-07-20 20:46:00) [3]

Удалено модератором


Ice-T   (2007-07-20 20:44:00) [4]

Удалено модератором


Ice-T   (2007-07-20 17:14:00) [5]

хм.. вот эта функа возвращает ERROR_SUCCES: TReader.ReadRootComponent


Ice-T   (2007-07-20 17:10:00) [6]

Да да! Это теперь на будущее.. Бекап есть правда очень очень старый...


Dib@zol   (2007-07-20 17:07:00) [7]

Я тут чё подумал - у тебя часом бэкапа нет? Если нет то ааагромный совет на будущее: делай бэкапы на каждой ключевой стадии разработки! А главное - потом не забывай где они лежат :)


Ice-T   (2007-07-20 17:02:00) [8]

АПИ рулит - это да! Н оокно настолько сложное, что поновой писать на АПИ уйдет куча времени, а скоро релиз.... Кто-нибудь знаком более углубленно с этими методами дельфи?


Dib@zol   (2007-07-20 16:56:00) [9]


> Внутренний сбой Дельфей - это интересно

А то. Очень понимаешь интересно когда компилятор тебе выдаёт - Internal error #402 - и кирдыкъ... Я почему с ВЦЛ на АПИ перешёл - у меня 3 (три!!) ВЦЛьных проги в один прекрасный(хм...) момент отказались компилиться напрочь! Я подумал - да, такой баг ловить - это вам не это. Легче переписать заново...


Ice-T   (2007-07-20 16:51:00) [10]

Под отладчиком прогнал, вроде ошибок не возвращала ниодна функа. Может не уследил конечно что. Пробовал удалять компоненты по одному - тоже не фига. Внутренний сбой Дельфей - это интересно конечно))


Ice-T   (2007-07-20 16:45:00) [11]

При нормальном ходе происходит следующее:
до вызова метода Application.CreateForm(...) существует только процесс с названием приложения (Project1) и клссом TApplication. Он скрытый. После вызова этого метода, процесс ствновится не скрытым и появляется дочернее ему окно Form1 класса TForm1. Это нормальный процесс создания процесса с дочерними ему окнами. У меня же после вызова Application.CreateForm процесс становится видимым, но главнвя форма не появляется в дочерних ему окнах и вообщзе её нету. Хотя она есть на экране. Остальные дочерние окна создаются нормально. Список окон можно получить в цикле GetWindow(..,GW_HWNDFIRST) ... GetWindow(..,GW_HWNDNEXT).  (с синтаксисиом мог ошибиться)


Dib@zol   (2007-07-20 16:45:00) [12]

Ууу, тут могут быть тысячи причин:
- Недопустимое перекрытие методов.
- Ошибка в стороннем компоненте (или даже в стандартном =D).
- Неверный вызов процедуры.
- Случайное порождение EAbort (мне как-то раз встречалось).
- Внутренний сбой Дельфей, наконец!

Тут без анализа кода не обойтись...


Ice-T   (2007-07-20 16:24:00) [13]

"Список окон" это условно. К примеру окно не возможно будет найти с помощью FindWindow. Если нажать Ctrl-Alt-Del, то приложение может отобразиться в списке процессов, но его не будет в "приложениях". Так же можно посмотреть "список окн" с помощью любого простого TaskView'ера. Грубо говоря окно не получает свой собственный хендл!


Kolan   (2007-07-20 16:16:00) [14]

> а в списке окон окно

Что за список такой, как вы его получаете?


Наверх

Титульная страница Поиск, карта сайта Написать письмо