-
Здравствуйте, В MDI приложении WindowState := wsMaximized; у Child окна выполняется очень долго. Где могут быть грабли? ЗЫ Ресайз проверил дело не в нем.
-
Скорее вопрос вот в чем.
Допусти было у меня два эмдиай окна. Одному окну я сделал WS = wsMaximized. А второму BringToFront. И при этом первое дочернее окно стало wsNormal. Как это так? Почему так? Как сделать, чтобы сотояние сохранялось?
-
В MDI либо все окна максимизированы, либо все немаксимизированы. Третьего не дано
-
Как же быть? В DMCilent'е просто переключение между окнами происходит очень долго, так как каждый раз окно максимизируется. Если окна не максимизировать, то переключается все влет
-
> В MDI либо все окна максимизированы
То есть я хочу чтобы они были все максимизированы. Но почему-то, где-то (не могу понять где) максимизация теряется
-
-
> Но почему-то, где-то (не могу понять где) максимизация теряется…
Окна случаем не сохраняют свое положение в реестре или где-то еще, и не восстанавливают при показе ?
-
> Окна случаем не сохраняют свое положение в реестре или где- > то еще, и не восстанавливают при показе ?
Обыскался уже. Искал, нигде не нашел, чтобы wsNormal востанавливалось. Даже переопределил это свойство, поставил в сеттер точку. Окна создаются максимизированными. И все равно при DoBringToFront; окно уже нормальное, причем точка в сеттере не срабатывает. Мое имхо тут какое-то волшебство. Искал и сообщение WinAPI тоже не нашел
procedure TDMCChildForm.DoBringToFront;
begin
LockWindowUpdate(MainForm.ClientHandle);
gAllowSizing := False;
try
BorderIcons := [biMaximize];
WindowState := wsMaximized;
BorderIcons := [];
BringToFront;
DoResize;
finally
gAllowSizing := True;
LockWindowUpdate(0);
end;
end; ЗЫ Если захотите глянуть исходники, то они в свн на assembla.com лежат, просто в аську мне напишите, я отправлю приглашение.
-
Интересно что при закрытии вызывается код: procedure TDMCChildForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if GetStopEnabled then
Stop;
MainForm.CloseChild(Self);
Action := caFree;
end; И новое окно показыввается быстро.
-
> [2] Игорь Шевченко © (25.04.08 19:37) > В MDI либо все окна максимизированы, либо все немаксимизированы. > Третьего не дано
Тут вот Knight докопался до «волшебства»: модуль — Forms — 5062
…
if FormStyle = fsMDIChild then
begin
if FWindowState = wsMaximized then
begin
-> SendMessage(Application.MainForm.ClientHandle, WM_MDIRESTORE, Handle, 0);
ShowWindow(Handle, SW_SHOWMAXIMIZED);
end
…
Лыцарь (02:13:31 27/04/2008)
т.е. когда одно разворачивается… остальные сворачиваются. Как же быть? Как можно преодолеть сабж?
-
Разумеется. Windows ничего не знает про WindowState, зато Windows знает, что в MDI-приложении все деорние окна либо максимизированы, либо немаксимизированы. Вот Delphi и пытается как-то связать свое свойство WindowState с механизмом Windows. Мой совет - не делай WindowState := wsMaximized у дочерней формы.
-
> Мой совет не делай WindowState := wsMaximized у дочерней > формы.
Да, так дейсвительно нет тормозов, но какже тогда его растянуть на весь экран?
-
Kolan © (27.04.08 20:53) [11]
> но какже тогда его растянуть на весь экран?
Left, Top, Width, Height
-
> [12] Игорь Шевченко © (27.04.08 23:16)
А почему максимизированные формы в демке текстового редактора \Demos\DelphiWin32\VCLWin32\Doc\TextEdit\ при развёртывании и переключении через меню открытых MDIChild'ов никуда не сворачиваются? А переключаются в развёрнутом виде
кстати, мож подскажете, к какому обработчику события привязаны эти пункты меню.
-
Knight © (28.04.08 01:13) [13]
Потому что им вручную не присваивается WindowState ? Я угадал ?
> кстати, мож подскажете, к какому обработчику события привязаны > эти пункты меню.
Это вообще стандартные пункты меню, которое добавляет Windows. К обработчику сообщения WM_MDIACTIVATE
-
> [14] Игорь Шевченко © (28.04.08 10:08)
Да
намудрили там что-то товарищи разработчики
вылечим %)
-
> Left, Top, Width, Height
Как сделать неясно.
Непонятно как правильно их задать, и что самое главное неясно как сделать, чтобы дочернее окно ресайзилось вслед за основным.
Непонятно как мкрыть полосы прокрутки, которые появляются у гл. окна. Ни SetScrollRange ни ShowScrollBar не помогли.
-
> Left, Top, Width, Height
Как сделать неясно.
Непонятно как правильно их задать, и что самое главное неясно как сделать, чтобы дочернее окно ресайзилось вслед за основным.
Непонятно как мкрыть полосы прокрутки, которые появляются у гл. окна. Ни SetScrollRange ни ShowScrollBar не помогли.
-
Kolan © (28.04.08 19:36) [16]
Оставь это на усмотрение пользователя. Займись лучше функциональностью. Или с функциональностью все хорошо и у тебя осталась только борьба с MDI ?
-
> Оставь это на усмотрение пользователя. Займись лучше функциональностью.
Да, так и решили сделать. > Или с функциональностью все хорошо и у тебя осталась только > борьба с MDI ?
Функциональность мы не трогаем в этой версии, даже чуть чуть чуть сокрашаем. Мы хотим выпустить стабильную версию. ЗЫ http://pda.delphimaster.net/?n=3&id=1209453717
|