Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Пересоздание окна с MDI-Child ами.   Найти похожие ветки 

 
Gero ©   (2004-11-20 09:04) [0]

Ситуация проста: имеется MDIForm с несколькими MDIChild"ами.
Вызываю MDIForm.RecreateWnd - Child"ы заново не создаются.
А нужно чтобы они восстанавливались вместе с содержимым.
Как это лучше реализовать?


 
Gero ©   (2004-11-21 09:24) [1]

Неужели такой сложный вопрос?


 
sniknik ©   (2004-11-21 11:38) [2]

а интересно после MDIForm.RecreateWnd событие onCreate у формы вызывается? а код какой нибудь в нем срабатывает? например создание Child"а. а если 1 сработает то может и несколько получится?


 
Игорь Шевченко ©   (2004-11-21 12:51) [3]


> Вызываю MDIForm.RecreateWnd - Child"ы заново не создаются.


Разумно. Так как пересоздается окно ClientHandle, которое и управляет Child"ами.


> А нужно чтобы они восстанавливались вместе с содержимым.
> Как это лучше реализовать?


Руками не судьба ? Запоминать, какие Child"ы были созданы, после Recreate создавать их снова.


 
Gero ©   (2004-11-21 17:55) [4]


sniknik ©   (21.11.04 11:38)
> а интересно после MDIForm.RecreateWnd событие onCreate у
> формы вызывается?

Нет.

Игорь Шевченко ©   (21.11.04 12:51)
> Руками не судьба ? Запоминать, какие Child"ы были созданы,
> после Recreate создавать их снова.

Хлопотно просто руками.
Много чего запоминать.

В общем, как я понял, все дочерние MDI-окна по-любому будут разрушены.
Мне не понятно только почему контролы, находящиеся на форме, все остаются как и были, и нормально пересоздаются, а MDIChild"ы - нет...


 
Игорь Шевченко ©   (2004-11-21 21:25) [5]


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


Потому что они в форме зарегистрированы. А MDI-Childs совершенно самостоятельные окна, дочерние по отношению к окну ClientHandle


 
Gero ©   (2004-11-21 21:28) [6]


> Потому что они в форме зарегистрированы

Что есть "зарегестрированы"?
А нельзя ли зарегистировать и Child"ы?


 
Piter ©   (2004-11-21 21:42) [7]

Gero ©   (21.11.04 17:55) [4]
Мне не понятно только почему контролы, находящиеся на форме, все остаются как и были, и нормально пересоздаются


странно. Неужели если ты динамически добавишь контрол на форму - он тоже будет пересоздан?


 
Gero ©   (2004-11-21 21:50) [8]


> Неужели если ты динамически добавишь контрол на форму -
> он тоже будет пересоздан?

Да, будет.


 
Piter ©   (2004-11-21 21:56) [9]

Piter ©   (21.11.04 21:42) [7]
Неужели если ты динамически добавишь контрол на форму - он тоже будет пересоздан


действительно так. Пересоздается только окно, что в общем логично и следует именно из названия функции :)

Думаю, таким же образом можно пересоздать и вместе с MDIChild, просто такое поведение не реализовано.

Хотя в тоже самое время навигация в TWebBrowser при RecreateWindow сбивается... так что...

И вообще интересно - а зачем делать RecreateWindow?


 
Piter ©   (2004-11-21 21:57) [10]

Gero ©   (21.11.04 21:50) [8]
Да, будет.


точнее не совсем так. Компоненты не будут пересозданы, они как были, так и останутся...


 
Gero ©   (2004-11-21 22:49) [11]


> Думаю, таким же образом можно пересоздать и вместе с MDIChild,
> просто такое поведение не реализовано.

Да, учитывая, что все методы что надо переписать - не virtual.

> И вообще интересно - а зачем делать RecreateWindow?

Например, чтобы BorderStyle или BorderIcons у формы поменять.


 
Piter ©   (2004-11-22 00:45) [12]

Gero ©   (21.11.04 22:49) [11]
Да, учитывая, что все методы что надо переписать - не virtual.


о каком переписывании методов ты говоришь?
А-а-а... чтобы самому реализовать нужное поведение? Ну сочувствую, можешь править VCL, если так нужно :)


 
Defunct ©   (2004-11-22 05:00) [13]

> Вызываю MDIForm.RecreateWnd

Не вызывай


 
Gero ©   (2004-11-22 08:20) [14]


> можешь править VCL, если так нужно

Не хотелось бы.

> Defunct ©   (22.11.04 05:00)
Не вызывай

А, спасибо, лучших совет!
Но все же иногда лучше жевать.


 
Piter ©   (2004-11-22 15:42) [15]

Gero ©   (22.11.04 8:20) [14]
Не хотелось бы


ну на самом деле ничего такого тут нет. Я правил - и теперь нормально, клиент практически всю информацию выводит по русски на NT виндах с НЕ русской локалью.

Можно ведь не только править прямо в папках Дельфовых, а сделать свой аналог Forms и подключить его к проекту...


 
Gero ©   (2004-11-22 19:09) [16]


> Piter ©   (22.11.04 15:42)

Да знаю я, правил VCL.
А вот представь, что это OpenSource проект.
Не думаю, что захочется вместе с исходниками распространять еще и VCL-библиотеки.


 
Piter ©   (2004-11-23 00:15) [17]

А-а-а, ты для клиента делаешь... Ну фиг знает. А зачем менять BorderStyle?

К тому же, я тебе уже говорил, например в TWebBrowser навигация сбивается при RecreateWnd, так что все равно тебе ручками придется работать, замучаешься...



Страницы: 1 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
14-1100803396
sem
2004-11-18 21:43
2004.12.05
Как добавить в файл .bpg больше 99 проектов


1-1101317617
Просто Джо
2004-11-24 20:33
2004.12.05
Object Inspector


3-1099734467
гость
2004-11-06 12:47
2004.12.05
interbase


1-1101306761
makingoff
2004-11-24 17:32
2004.12.05
открытие проги из списка "открыть с помощью"


1-1101141697
Dmitry_04
2004-11-22 19:41
2004.12.05
API сообщения при сочетании клавишь, например Ctrl+F