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

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

Проблема с TPageContorl [D7, WinXP]


Igor_thief ©   (2006-11-21 16:08:00) 

я просто напросто бросаю на форму PageControl и добавляю две вкладки. На каждую из вкладок бросаю по ричедиту. Запускаю программу и запускаю WinIspecor SPY для того, чтобы выяснить один момент и вижу следующую картину. WinInspector spy (да и другие программы данного типа) показываю, что реально создан только один TabSheet (тот который активен), а второго просто нету (и всего что на нем) до того момента, пока я не переключюсь на него. Самое странное в данной ситуации это то - что я спокойно могу обращяться ко всем компонентам второго таба, еще до того, как на него перехожу. Вот такая вот история!  В чем глюк?

ЗЫ: я обратил на это внимание из-за того, что у меня сложилась такая вот ситуация: есть определенный код, который работает правильно! У меня есть PageContorl с двумя табами. Если я перед запуском не переклацнусь между табами, то после выполнения кода, программа просто зависнет, а вот если переклацнусь, то нет. МИСТИКА!


BOA_KAA   (2006-11-21 18:44:00) [1]

а ведь наверху написано, мол, купите книгу...
http://rsdn.ru/article/delphi/twinctrl.xml


Igor_thief   (2006-11-21 17:25:00) [2]

Никакой 17 строчки нету! (как для вас)
Прикольное описание! Вот только как же я тогда работаю с дочерними элементами второй кладки, если по твоей теории это невозможно?


Наиль   (2006-11-21 17:12:00) [3]

Насчёт мистики подтверждаю, смотреть надо в 17 строку.
Что касается SPY, то всё очень просто.
TWinControl состоит из двух частей:
1. Окно в понимании Windows
2. Данные об окне.
Окно не существует, пока у него нет родителя (parent), пока у родителя нет родителя и т.д.
Окно с родителем не существует, пока его не видно (visible=false).
Если несуществующее окно становится видимым, то оно создаётся (TWinControl.CreateWnd).
Если у окна меняется родитель, то окно уничтожается и снова создаётся.
И всё это на основании информации об окне, которая храниться в TWinControl отдельно от окна.
Само окно находится на территории Windows. А твоя программа владеет лишь Handle этого окна.
По сути твоя программа обращается к Windows, чтобы та изменила состояние окна по заданому Handle.
Spy-программы обращаються к Windows для получения сведений об состоянии окна по его Handle. Windows может сообщить лишь те сведения, которые знает сама, но неможет знать о том, что знает твоя программа.
Другими словами, ты не видишь TabSheet потому, что его не существует. Хотя сведения о нём существуют (Шерлок Холмс тоже не существует, но сведений о нём предостаточно).


Igor_thief   (2006-11-21 17:04:00) [4]

Ну все, посмеялись, а теперь давайте по делу.


clickmaker   (2006-11-21 16:54:00) [5]


> Если я перед запуском не переклацнусь между табами, то после
> выполнения кода, программа просто зависнет, а вот если переклацнусь,
> то нет. МИСТИКА!

а ты не знал? Это древний программерский ритуал: переклацывание табов. Пока его не совершишь, все будет виснуть...


DimaBr   (2006-11-21 16:41:00) [6]


> МИСТИКА!

Никакой мистики, ошибка в 17 строке.


Наверх

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