Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 19:26   #1
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
Вопрос Можно ли отключить автонормализацию развёртнутых окон?

Приложение MDIForm, окна MDIChild. Если одно окно развёрнуто на всю MDIForm, то при открытии окна без возможности разворачивания на весь экран (отключена кнопка "развернуть") происходит "нормализация" всех бывших развёрнутыми окон. Можно как-то это убрать? Чтобы развёрнутые окна не "нормализировались", а оставались как есть?
DeveloPerchik вне форума Ответить с цитированием
Старый 06.04.2012, 19:31   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вопрос - а зачем нужна дочерняя MDI-форма без возможности максимизации? Вызывайте модально такую форму
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.04.2012, 19:47   #3
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
По умолчанию

Потому что форма небольшая, габариты указаны заранее, разворачивать на весь экран там нечего. Модально не подходит, тк нужно иметь доступ к другим открытым окнам.
DeveloPerchik вне форума Ответить с цитированием
Старый 06.04.2012, 19:54   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Обычно Menu и ToolBar активной дочерней MDI-формы встраивается в соответствующие области главной MDI-формы при максимизации дочерней. Представте себе как будет выглядеть все это, если часть форм максимизирована, а часть нет. Видимо поэтому на уровне дельфей и поисходит то, что вы упомянули в #1. Очень сомневаюсь, что и winapi даст вам инструмент для разнопланового отображения дочерних MDI-форм
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.04.2012 в 19:59.
Аватар вне форума Ответить с цитированием
Старый 06.04.2012, 20:07   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Очень сомневаюсь, что и winapi даст вам инструмент для разнопланового отображения дочерних MDI-форм
А зря. Даст.
Цитата:
Чтобы развёрнутые окна не "нормализировались", а оставались как есть?
Можно перехватывать и обрабатывать соответствующее соощение.
Вот пример:
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
    procedure wsm(var m:TWMSysCommand); message WM_SysCommand;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.wsm(var m: TWMSysCommand);
begin
 if m.CmdType=SC_MAXIMIZE then begin
  Width:=form1.Width;    Height:=Form1.Height-15;
  Top:=0;Left:=0;
 end else DefWindowProc(Handle,m.Msg,tMessage(m).WParam,tMessage(m).LParam);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2012, 20:37   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Stilet, а попробовать с таким обработчиком создать дочернюю, если другая дочерняя уже создана и максимизирована? И что будет с такой дочерней формой при максимизации другой дочерней? Ради интереса попробовал, поведение явно не адекватное
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.04.2012, 20:42   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не понял... Поясни плиз.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2012, 20:52   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

**** Главная mdi-форма

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ActnList, StdActns;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Menu: TMenuItem;
    Menu1: TMenuItem;
    Menu2: TMenuItem;
    procedure Menu1Click(Sender: TObject);
    procedure Menu2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Menu1Click(Sender: TObject);
begin
  TForm2.Create(Self).Show;
end;

procedure TForm1.Menu2Click(Sender: TObject);
var x: TForm3;
begin
  x:=TForm3.Create(Self);
  X.WindowState:=wsMaximized;
  X.Show;
end;

end.

**** Дочерняя mdi-форма

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit1;

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure wsm(var m:TWMSysCommand); message WM_SysCommand;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.wsm(var m: TWMSysCommand);
begin
 if m.CmdType=SC_MAXIMIZE then begin
    Width:=form1.Width-150;
    Height:=Form1.Height-150;
    Top:=0;Left:=0;
  end
  else DefWindowProc(Handle,m.Msg,tMessage(m).WParam,tMessage(m).LParam);
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

end.

**** Дочерняя mdi-форма

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm3 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

end.
Создаю Form2 первой. максимизирую - поступает согласно ожидаемого. Создаю Form3, максимизирую, Form2 тоже максимизируется. Создаю Form3 первой, максимизирую, затем создаю Form2 - тоже максимизируется, игнорируя wsm
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.04.2012, 21:05   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А так:
Код:
if (m.ActivateWnd=handle)and(m.CmdType=SC_MAXIMIZE) then begin
?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2012, 21:12   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так вообще в игнор, максимизируется по полной программе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отключить использование стилей для окон и кнопок через реестр tarakan1983 Общие вопросы Delphi 0 22.06.2011 03:40
как можно получить имя класса окон? TLabel Общие вопросы Delphi 2 09.06.2011 23:01
Можно ли отключить цвета в Windows XP? fadss Операционные системы общие вопросы 10 02.05.2011 11:17
Можно ли отключить макрос? Busine2009 Microsoft Office Word 5 04.07.2009 09:12
Можно ли макросом, отключить колесико мышки valerij Microsoft Office Excel 8 18.11.2008 16:52