Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

В 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.007 c
2-1234423007
Влади мир
2009-02-12 10:16
2009.04.05
StringGrid1.Free;


15-1233594113
Кое кто
2009-02-02 20:01
2009.04.05
Предложение по составу...


10-1153825601
AlexeyMir
2006-07-25 15:06
2009.04.05
Регистрация ActX библиотеки из своей программы


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


3-1217426760
baklazan
2008-07-30 18:06
2009.04.05
Сумма чисел в колонке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский