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