Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В MDI приложение WindowState := wsMaximized; происходит долго&#133


Страницы:   1 2

Kolan ©   (2008-04-25 18:32:00) 

Здравствуйте,
 В MDI приложении WindowState := wsMaximized;у Child окна выполняется очень долго.
Где могут быть грабли?
ЗЫ
 Ресайз проверил — дело не в нем.


  (2008-05-03 11:15:00) [1]

Удалено модератором


  (2008-05-03 11:15:00) [2]

Удалено модератором


Kolan   (2008-04-29 11:29:00) [3]

> Оставь это на усмотрение пользователя. Займись лучше функциональностью.

Да, так и решили сделать.


> Или с функциональностью все хорошо и у тебя осталась только
> борьба с MDI ?

Функциональность мы не трогаем в этой версии, даже чуть чуть чуть сокрашаем. Мы хотим выпустить стабильную версию.

ЗЫ
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1209453717


Игорь Шевченко   (2008-04-29 09:21:00) [4]

Kolan ©   (28.04.08 19:36) [16]

Оставь это на усмотрение пользователя. Займись лучше функциональностью.
Или с функциональностью все хорошо и у тебя осталась только борьба с MDI ?


Kolan   (2008-04-28 19:36:00) [5]

> Left, Top, Width, Height

Как сделать неясно.

Непонятно как правильно их задать, и что самое главное — неясно как сделать, чтобы дочернее окно ресайзилось вслед за основным.

Непонятно как мкрыть полосы прокрутки, которые появляются у гл. окна.
Ни SetScrollRange ни ShowScrollBar не помогли.


Kolan   (2008-04-28 19:36:00) [6]

> Left, Top, Width, Height

Как сделать неясно.

Непонятно как правильно их задать, и что самое главное — неясно как сделать, чтобы дочернее окно ресайзилось вслед за основным.

Непонятно как мкрыть полосы прокрутки, которые появляются у гл. окна.
Ни SetScrollRange ни ShowScrollBar не помогли.


Knight   (2008-04-28 10:32:00) [7]

> [14] Игорь Шевченко ©   (28.04.08 10:08)

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


Игорь Шевченко   (2008-04-28 10:08:00) [8]

Knight ©   (28.04.08 01:13) [13]

Потому что им вручную не присваивается WindowState ? Я угадал ?


> кстати, мож подскажете, к какому обработчику события привязаны
> эти пункты меню.


Это вообще стандартные пункты меню, которое добавляет Windows.
К обработчику сообщения WM_MDIACTIVATE


Knight   (2008-04-28 01:13:00) [9]

> [12] Игорь Шевченко ©   (27.04.08 23:16)

А почему максимизированные формы в демке текстового редактора
\Demos\DelphiWin32\VCLWin32\Doc\TextEdit\
при развёртывании и переключении через меню открытых MDIChild'ов никуда не сворачиваются? А переключаются в развёрнутом виде… кстати, мож подскажете, к какому обработчику события привязаны эти пункты меню.


Игорь Шевченко   (2008-04-27 23:16:00) [10]

Kolan ©   (27.04.08 20:53) [11]


> но какже тогда его растянуть на весь экран?


Left, Top, Width, Height


Kolan   (2008-04-27 20:53:00) [11]


> Мой совет — не делай WindowState := wsMaximized у дочерней
> формы.

Да, так дейсвительно нет тормозов, но какже тогда его растянуть на весь экран?


Игорь Шевченко   (2008-04-27 15:54:00) [12]

Разумеется. Windows ничего не знает про WindowState, зато Windows знает, что в MDI-приложении все деорние окна либо максимизированы, либо немаксимизированы. Вот Delphi и пытается как-то связать свое свойство WindowState с механизмом Windows.
Мой совет - не делай WindowState := wsMaximized у дочерней формы.


Kolan   (2008-04-27 12:17:00) [13]

> [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)
т.е. когда одно разворачивается… остальные сворачиваются.


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


Kolan   (2008-04-26 22:19:00) [14]

Интересно что при закрытии вызывается код:

procedure TDMCChildForm.FormClose(Sender: TObject;
 var Action: TCloseAction);
begin
 if GetStopEnabled then
   Stop;
 MainForm.CloseChild(Self);
 Action := caFree;
end;


И новое окно показыввается быстро.


Kolan   (2008-04-26 08:19:00) [15]

> Окна случаем не сохраняют свое положение в реестре или где-
> то еще, и не восстанавливают при показе ?

Обыскался уже. Искал, нигде не нашел, чтобы 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 лежат, просто в аську мне напишите, я отправлю приглашение.


Игорь Шевченко   (2008-04-26 00:45:00) [16]


> Но почему-то, где-то (не могу понять где) максимизация теряется…


Окна случаем не сохраняют свое положение в реестре или где-то еще, и не восстанавливают при показе ?


Kolan   (2008-04-25 22:25:00) [17]

Может поступить как-то так:
http://delphiworld.narod.ru/base/child_fill_entire_main.html

И вообще убрать максимизацию?


Kolan   (2008-04-25 19:46:00) [18]

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

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


Kolan   (2008-04-25 19:42:00) [19]

Как же быть? В DMCilent'е просто переключение между окнами происходит очень долго, так как каждый раз окно максимизируется. Если окна не максимизировать, то переключается все влет…


Игорь Шевченко   (2008-04-25 19:37:00) [20]

В MDI либо все окна максимизированы, либо все немаксимизированы.
Третьего не дано


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо