Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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"е просто переключение между окнами происходит очень долго, так как каждый раз окно максимизируется. Если окна не максимизировать, то переключается все влет&#133


 
Kolan ©   (2008-04-25 19:46) [4]

> В MDI либо все окна максимизированы

То есть я хочу чтобы они были все максимизированы. Но почему-то, где-то (не могу понять где) максимизация теряется&#133


 
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 тоже не нашел&#133

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
&#133
      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
&#133

Лыцарь (02:13:31 27/04/2008)
т.е. когда одно разворачивается&#133 остальные сворачиваются.


Как же быть? Как можно преодолеть сабж?


 
Игорь Шевченко ©   (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"ов никуда не сворачиваются? А переключаются в развёрнутом виде&#133 кстати, мож подскажете, к какому обработчику события привязаны эти пункты меню.


 
Игорь Шевченко ©   (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)

Да&#133 намудрили там что-то товарищи разработчики&#133 вылечим %)


 
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.52 MB
Время: 0.014 c
2-1234427731
Mishenka
2009-02-12 11:35
2009.04.05
Как отменить автоматическое сохранение в DBRichEdit ?


2-1234781661
mozgan
2009-02-16 13:54
2009.04.05
ProgressBar как таблетки в Windows


2-1234950495
b@v
2009-02-18 12:48
2009.04.05
Excel в Access


1-1209384948
GreyWolf
2008-04-28 16:15
2009.04.05
Отладка такой ситуации


15-1233473207
oleg_babenko
2009-02-01 10:26
2009.04.05
Как в Delphi 2006 сделать горячие клавиши как в Delphi6