Текущий архив: 2009.04.05;
Скачать: CL | DM;
Вниз
В MDI приложение WindowState := wsMaximized; происходит долго&#133 Найти похожие ветки
← →
Kolan © (2008-04-25 18:32) [0]Здравствуйте,
В MDI приложенииWindowState := wsMaximized;
у Child окна выполняется очень долго.
Где могут быть грабли?
ЗЫ
Ресайз проверил — дело не в нем.
← →
Kolan © (2008-04-25 19:17) [1]Скорее вопрос вот в чем.
Допусти было у меня два эмдиай окна. Одному окну я сделал WS = wsMaximized.
А второму BringToFront. И при этом первое дочернее окно стало wsNormal.
Как это так? Почему так? Как сделать, чтобы сотояние сохранялось?
← →
Игорь Шевченко © (2008-04-25 19:37) [2]В MDI либо все окна максимизированы, либо все немаксимизированы.
Третьего не дано
← →
Kolan © (2008-04-25 19:42) [3]Как же быть? В DMCilent"е просто переключение между окнами происходит очень долго, так как каждый раз окно максимизируется. Если окна не максимизировать, то переключается все влет…
← →
Kolan © (2008-04-25 19:46) [4]> В MDI либо все окна максимизированы
То есть я хочу чтобы они были все максимизированы. Но почему-то, где-то (не могу понять где) максимизация теряется…
← →
Kolan © (2008-04-25 22:25) [5]Может поступить как-то так:
http://delphiworld.narod.ru/base/child_fill_entire_main.html
И вообще убрать максимизацию?
← →
Игорь Шевченко © (2008-04-26 00:45) [6]
> Но почему-то, где-то (не могу понять где) максимизация теряется…
Окна случаем не сохраняют свое положение в реестре или где-то еще, и не восстанавливают при показе ?
← →
Kolan © (2008-04-26 08:19) [7]> Окна случаем не сохраняют свое положение в реестре или где-
> то еще, и не восстанавливают при показе ?
Обыскался уже. Искал, нигде не нашел, чтобы 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 лежат, просто в аську мне напишите, я отправлю приглашение.
← →
Kolan © (2008-04-26 22:19) [8]Интересно что при закрытии вызывается код:
procedure TDMCChildForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if GetStopEnabled then
Stop;
MainForm.CloseChild(Self);
Action := caFree;
end;
И новое окно показыввается быстро.
← →
Kolan © (2008-04-27 12:17) [9]> [2] Игорь Шевченко © (25.04.08 19:37)
> В MDI либо все окна максимизированы, либо все немаксимизированы.
> Третьего не дано
Тут вот Knight докопался до «волшебства»:модуль — Forms — 5062
…
if FormStyle = fsMDIChild then
begin
{ Fake a size message to get MDI to behave }
if FWindowState = wsMaximized then
begin
-> SendMessage(Application.MainForm.ClientHandle, WM_MDIRESTORE, Handle, 0);
ShowWindow(Handle, SW_SHOWMAXIMIZED);
end
…
Лыцарь (02:13:31 27/04/2008)
т.е. когда одно разворачивается… остальные сворачиваются.
Как же быть? Как можно преодолеть сабж?
← →
Игорь Шевченко © (2008-04-27 15:54) [10]Разумеется. Windows ничего не знает про WindowState, зато Windows знает, что в MDI-приложении все деорние окна либо максимизированы, либо немаксимизированы. Вот Delphi и пытается как-то связать свое свойство WindowState с механизмом Windows.
Мой совет - не делай WindowState := wsMaximized у дочерней формы.
← →
Kolan © (2008-04-27 20:53) [11]
> Мой совет — не делай WindowState := wsMaximized у дочерней
> формы.
Да, так дейсвительно нет тормозов, но какже тогда его растянуть на весь экран?
← →
Игорь Шевченко © (2008-04-27 23:16) [12]Kolan © (27.04.08 20:53) [11]
> но какже тогда его растянуть на весь экран?
Left, Top, Width, Height
← →
Knight © (2008-04-28 01:13) [13]> [12] Игорь Шевченко © (27.04.08 23:16)
А почему максимизированные формы в демке текстового редактора\Demos\DelphiWin32\VCLWin32\Doc\TextEdit\
при развёртывании и переключении через меню открытых MDIChild"ов никуда не сворачиваются? А переключаются в развёрнутом виде… кстати, мож подскажете, к какому обработчику события привязаны эти пункты меню.
← →
Игорь Шевченко © (2008-04-28 10:08) [14]Knight © (28.04.08 01:13) [13]
Потому что им вручную не присваивается WindowState ? Я угадал ?
> кстати, мож подскажете, к какому обработчику события привязаны
> эти пункты меню.
Это вообще стандартные пункты меню, которое добавляет Windows.
К обработчику сообщения WM_MDIACTIVATE
← →
Knight © (2008-04-28 10:32) [15]> [14] Игорь Шевченко © (28.04.08 10:08)
Да… намудрили там что-то товарищи разработчики… вылечим %)
← →
Kolan © (2008-04-28 19:36) [16]> Left, Top, Width, Height
Как сделать неясно.
Непонятно как правильно их задать, и что самое главное — неясно как сделать, чтобы дочернее окно ресайзилось вслед за основным.
Непонятно как мкрыть полосы прокрутки, которые появляются у гл. окна.
Ни SetScrollRange ни ShowScrollBar не помогли.
← →
Kolan © (2008-04-28 19:36) [17]> Left, Top, Width, Height
Как сделать неясно.
Непонятно как правильно их задать, и что самое главное — неясно как сделать, чтобы дочернее окно ресайзилось вслед за основным.
Непонятно как мкрыть полосы прокрутки, которые появляются у гл. окна.
Ни SetScrollRange ни ShowScrollBar не помогли.
← →
Игорь Шевченко © (2008-04-29 09:21) [18]Kolan © (28.04.08 19:36) [16]
Оставь это на усмотрение пользователя. Займись лучше функциональностью.
Или с функциональностью все хорошо и у тебя осталась только борьба с MDI ?
← →
Kolan © (2008-04-29 11:29) [19]> Оставь это на усмотрение пользователя. Займись лучше функциональностью.
Да, так и решили сделать.
> Или с функциональностью все хорошо и у тебя осталась только
> борьба с MDI ?
Функциональность мы не трогаем в этой версии, даже чуть чуть чуть сокрашаем. Мы хотим выпустить стабильную версию.
ЗЫ
http://delphimaster.net/view/15-1209453717/
← →
имя (2008-05-03 11:15) [20]Удалено модератором
← →
имя (2008-05-03 11:15) [21]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2009.04.05;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.005 c