![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приложение и его главное окно - странный эффект
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]> а в списке окон окно
Что за список такой, как вы его получаете?