Размеры/позиция формы (Delphi&Kylix)
Заранее прошу пардона за некоторую путаность и нетривиальность вопроса. Ну, уж какой есть... :(
Короче постанова такая. Есть наследник от TForm. Он, кроме всего прочего, умеет сохранять/восстанавливать из реестра свои размеры/позицию. Все работает зачепись, НО!
Если мы имеем дело с MDI-Child формой, то при создании оной ее размеры/позиция назначаются VCL-кой автоматом. Т.е., если я в событии OnCreate загружу размер, он все равно будет перекрыт в момент первого показа формы.
Это можно обойти, загрузив размер в OnShow, но тогда я получу неслабый глюк, если на форме есть контролы с установленным НЕ по-умолчанию свойством Anchors (т.е., <> [akLeft, kTop]). А именно, расстояние между "привязанным" краем контрола будет не то, что я видел в процессе дизайна.
[SIZE=1]Если это непонятно, просто возьмите на веру - конкретный и противный глючара. Проверить очень просто. Создайте проект с MDI-Parent и MDI-Child формами, на последнюю киньте TEdit, растяните его вдоль верхнего края формы (не применяя Align) и установите для него Anchors = [akLeft,akTop,akRight]. Запустите проект - видите, что случилось с Edit'ом? рсстояние от правого края контрола до правого края формы совсем не то![/SIZE]
Короче, выход я нашел. В OnShow я делаю PostMessage(Handle, MSG_FIRSTSHOW, 0, 0), где MSG_FIRSTSHOW - моя константа и в моем-же методе обработки этого сообщения и производится загрузка размера (т.е., когда форма уже окончательно создана/показана и все внутренние подстройки Align'ов и Anchor'ов уже завершены).
Только здесь один неприятный бок - форма "мигает" при загрузке. Т.е., она сначала получает-таки размер/позицию по умолчанию, отрисовывется, а потом только загружает размер. Я пытаюсь избежать этой ненужной прорисовки с помощью WM_SETREDRAW, но этот флаг блокирует перерисовку только самого окна, но не его дочерних окон (т.е. контролов).
Итак вопрос: как заставить винду полностью заблокировать отрисовку некоторого окна со всеми его дочерними контролами?
Как я уже написал, WM_SETREDRAW не помогает. Не работает также и блокировка сообщений типа WM_PAINT, WM_ERASEBKGND, WM_NCPAINT. Подскажите, плиз.