powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / MDIChild maximize
6 сообщений из 6, страница 1 из 1
MDIChild maximize
    #39683626
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте !!!
Помогите пожалуйста решить задачу со странным поведением форм.
Есть приложение из трёх форм, одна со стилем MDIForm и две Normal.

вот код.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TForm1.N11Click(Sender: TObject);
begin
  Form2.Free;
  Form2 := TForm2.Create(application);
  Form2.FormStyle := fsMDIChild;
  Form2.Show;
  SendMessage(Form2.Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0)
end;

procedure TForm1.N21Click(Sender: TObject);
begin
  Form3.Free;
  Form3 := TForm3.Create(application);
  Form3.FormStyle := fsMDIChild;
  Form3.Show;
  SendMessage(Form3.Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0)
end;



Что получается ?
Кликаем на первый пункт меню, создаётся форма и максимизируется внутри главной формы, кликаем на второй пункт меню создаётся форма и максимилизируется ГЛАВНАЯ форма на весь экран. Можно кликнуть в обратной последовательности, эффект тот же. Первый клик максимизирует дочернюю форму, второй - ГЛАВНУЮ.

Как сделать чтобы главная не максимизировалась ???
...
Рейтинг: 0 / 0
MDIChild maximize
    #39683629
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему Send, а не Post?
Почему не windowstate := wsMaximized?
...
Рейтинг: 0 / 0
MDIChild maximize
    #39683660
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему Send, а не Post?
Ничего не меняется
почему не windowstate := wsMaximized?
Потому что на момент создания формы не известно в каком приложении MDI или SDI она создаётся.
...
Рейтинг: 0 / 0
MDIChild maximize
    #39683719
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrПотому что на момент создания формы не известно в каком приложении MDI или SDI она создаётся.
Это код вообще-то. :)
...
Рейтинг: 0 / 0
MDIChild maximize
    #39683746
_Den_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Сталкивался с похожей ситуацией несколько лет назад, если правильно помню состояния вроде MAXIMIZE действуют на все дочерние формы сразу и если они уже maximized то повторно вызывать их смысла нет.
Уже точно не вспомню, но по моему обходил это проверкой вроде :
Код: pascal
1.
if Assigned(ActiveMDIChild) and (ActiveMDIChild.WindowState <> wsMaximized) then
...
Рейтинг: 0 / 0
MDIChild maximize
    #39683752
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нарисовал такой костыль, чувствую что бред, но по другому не выходит
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    if ClassType = TCustomForm then begin
      if AName = 'MAXIMALIZE' then begin
        if Application.MainForm.FormStyle = fsMDIForm then begin
          if Assigned(Application.MainForm.ActiveMDIChild) and (Application.MainForm.ActiveMDIChild.WindowState = wsMaximized)
            then PostMessage(Application.MainForm.Handle, WM_MDIMAXIMIZE, TCustomForm(Instance).Handle, 0)
            else PostMessage(TCustomForm(Instance).Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0)
        end
        else PostMessage(TCustomForm(Instance).Handle,WM_SYSCOMMAND,SC_MAXIMIZE,0);
      end else
    end else
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / MDIChild maximize
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]