![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пересоздание окна с MDI-Child'ами. [D6, Win2k, WinXP]
Gero © (2004-11-20 09:04:00)Ситуация проста: имеется MDIForm с несколькими MDIChild'ами.
Вызываю MDIForm.RecreateWnd - Child'ы заново не создаются.
А нужно чтобы они восстанавливались вместе с содержимым.
Как это лучше реализовать?
Piter (2004-11-23 00:15:00) [1]А-а-а, ты для клиента делаешь... Ну фиг знает. А зачем менять BorderStyle?
К тому же, я тебе уже говорил, например в TWebBrowser навигация сбивается при RecreateWnd, так что все равно тебе ручками придется работать, замучаешься...
Gero (2004-11-22 19:09:00) [2]
> Piter © (22.11.04 15:42)
Да знаю я, правил VCL.
А вот представь, что это OpenSource проект.
Не думаю, что захочется вместе с исходниками распространять еще и VCL-библиотеки.
Piter (2004-11-22 15:42:00) [3]Gero © (22.11.04 8:20) [14]
Не хотелось бы
ну на самом деле ничего такого тут нет. Я правил - и теперь нормально, клиент практически всю информацию выводит по русски на NT виндах с НЕ русской локалью.
Можно ведь не только править прямо в папках Дельфовых, а сделать свой аналог Forms и подключить его к проекту...
Gero (2004-11-22 08:20:00) [4]
> можешь править VCL, если так нужно
Не хотелось бы.
> Defunct © (22.11.04 05:00)
Не вызывай
А, спасибо, лучших совет!
Но все же иногда лучше жевать.
Defunct (2004-11-22 05:00:00) [5]> Вызываю MDIForm.RecreateWnd
Не вызывай
Piter (2004-11-22 00:45:00) [6]Gero © (21.11.04 22:49) [11]
Да, учитывая, что все методы что надо переписать - не virtual.
о каком переписывании методов ты говоришь?
А-а-а... чтобы самому реализовать нужное поведение? Ну сочувствую, можешь править VCL, если так нужно :)
Gero (2004-11-21 22:49:00) [7]
> Думаю, таким же образом можно пересоздать и вместе с MDIChild,
> просто такое поведение не реализовано.
Да, учитывая, что все методы что надо переписать - не virtual.
> И вообще интересно - а зачем делать RecreateWindow?
Например, чтобы BorderStyle или BorderIcons у формы поменять.
Piter (2004-11-21 21:57:00) [8]Gero © (21.11.04 21:50) [8]
Да, будет.
точнее не совсем так. Компоненты не будут пересозданы, они как были, так и останутся...
Piter (2004-11-21 21:56:00) [9]Piter © (21.11.04 21:42) [7]
Неужели если ты динамически добавишь контрол на форму - он тоже будет пересоздан
действительно так. Пересоздается только окно, что в общем логично и следует именно из названия функции :)
Думаю, таким же образом можно пересоздать и вместе с MDIChild, просто такое поведение не реализовано.
Хотя в тоже самое время навигация в TWebBrowser при RecreateWindow сбивается... так что...
И вообще интересно - а зачем делать RecreateWindow?
Gero (2004-11-21 21:50:00) [10]
> Неужели если ты динамически добавишь контрол на форму -
> он тоже будет пересоздан?
Да, будет.
Piter (2004-11-21 21:42:00) [11]Gero © (21.11.04 17:55) [4]
Мне не понятно только почему контролы, находящиеся на форме, все остаются как и были, и нормально пересоздаются
странно. Неужели если ты динамически добавишь контрол на форму - он тоже будет пересоздан?
Gero (2004-11-21 21:28:00) [12]
> Потому что они в форме зарегистрированы
Что есть "зарегестрированы"?
А нельзя ли зарегистировать и Child'ы?
Игорь Шевченко (2004-11-21 21:25:00) [13]
> Мне не понятно только почему контролы, находящиеся на форме,
> все остаются как и были, и нормально пересоздаются
Потому что они в форме зарегистрированы. А MDI-Childs совершенно самостоятельные окна, дочерние по отношению к окну ClientHandle
Gero (2004-11-21 17:55:00) [14]
sniknik © (21.11.04 11:38)
> а интересно после MDIForm.RecreateWnd событие onCreate у
> формы вызывается?
Нет.
Игорь Шевченко © (21.11.04 12:51)
> Руками не судьба ? Запоминать, какие Child'ы были созданы,
> после Recreate создавать их снова.
Хлопотно просто руками.
Много чего запоминать.
В общем, как я понял, все дочерние MDI-окна по-любому будут разрушены.
Мне не понятно только почему контролы, находящиеся на форме, все остаются как и были, и нормально пересоздаются, а MDIChild'ы - нет...
Игорь Шевченко (2004-11-21 12:51:00) [15]
> Вызываю MDIForm.RecreateWnd - Child'ы заново не создаются.
Разумно. Так как пересоздается окно ClientHandle, которое и управляет Child'ами.
> А нужно чтобы они восстанавливались вместе с содержимым.
> Как это лучше реализовать?
Руками не судьба ? Запоминать, какие Child'ы были созданы, после Recreate создавать их снова.
sniknik (2004-11-21 11:38:00) [16]а интересно после MDIForm.RecreateWnd событие onCreate у формы вызывается? а код какой нибудь в нем срабатывает? например создание Child'а. а если 1 сработает то может и несколько получится?
Gero (2004-11-21 09:24:00) [17]Неужели такой сложный вопрос?