Главная страница
    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.54 MB
Время: 0.005 c
4-1207543866
MultIfleX
2008-04-07 08:51
2009.04.05
Сервис и права доступа


2-1234525803
webbrowser
2009-02-13 14:50
2009.04.05
WebBrowser.OnDocumentComplite


2-1234938715
dolmat
2009-02-18 09:31
2009.04.05
Как добавить в строку знак


15-1233323559
Городской Шаман
2009-01-30 16:52
2009.04.05
Еще один пример научной магии.


2-1235039970
D@nger
2009-02-19 13:39
2009.04.05
ActionMainMenuBar и Border Icon





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский