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

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

При максимизации MDI нужно чтобы оно оставалось в виде окна [D7]


Vladix ©   (2006-10-13 15:31:00) 

Хотелось бы, чтобы при максимизации MDIChild окна оно не "встраивалось" в родительское, а оставалось окном, только растянутым во весь размер родителя. Как это сделать? Или может, есть какие -то компонентя для реализации подобных целей?


Игорь Шевченко   (2006-10-13 16:27:00) [1]

Vladix ©   (13.10.06 16:21) [4]


> Может быть, Вы видели "1С:Предприятие 8.0"? Вот там это
> реализовано примерно так как мне хотелось бы. Интересно,
>  каких усилий это стоило разработчикам


Не видел, и не могу предполагать.


> стоит ли загоняться в этом направлении?


А зачем ? Сделать, разумеется, можно, вопрос только сколько времени сил и знаний это потребует.


Vladix   (2006-10-13 16:21:00) [2]

Может быть, Вы видели "1С:Предприятие 8.0"? Вот там это реализовано примерно так как мне хотелось бы. Интересно, каких усилий это стоило разработчикам и стоит ли загоняться в этом направлении?


Игорь Шевченко   (2006-10-13 16:15:00) [3]

Vladix ©   (13.10.06 16:10) [2]


> Насколько я знаю, нужно еще изменить состояние окна в MAXIMIZED,
>  сделать кнопку "Восстановить" вместо "Максимизировать",
>  запретить перемещение и растягивание окна...


А это вряд ли выйдет c дочерними MDI-окнами.


Vladix   (2006-10-13 16:10:00) [4]

Спасибо! но...
Насколько я знаю, нужно еще изменить состояние окна в MAXIMIZED, сделать кнопку "Восстановить" вместо "Максимизировать", запретить перемещение и растягивание окна... Это все нужно делать вручную?


Игорь Шевченко   (2006-10-13 15:50:00) [5]


> Хотелось бы, чтобы при максимизации MDIChild окна оно не
> "встраивалось" в родительское, а оставалось окном, только
> растянутым во весь размер родителя


Перехватывай сообщение WM_SYSCOMMAND с параметром SC_MAXIMIZE, устанавливай сам нужные размеры окна.

Например, так:

unit Child;

interface

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

type
 TForm2 = class(TForm)
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   procedure WMSysCommand (var Message: TMessage); message WM_SYSCOMMAND;
   procedure MyMaximize;
 end;

var
 Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.MyMaximize;
var
 Rect: TRect;
begin
 GetWindowRect (Application.MainForm.ClientHandle, Rect);
 Height := Rect.Bottom - Rect.Top - GetSystemMetrics(SM_CXFRAME);
 Width := Rect.Right - Rect.Left - GetSystemMetrics(SM_CXFRAME);
end;

procedure TForm2.WMSysCommand(var Message: TMessage);
begin
 if (Message.WParam and $FFF0) = SC_MAXIMIZE then
   MyMaximize
 else
   inherited;
end;

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

end.


unit main;

interface

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

type
 TForm1 = class(TForm)
   MainMenu1: TMainMenu;
   File1: TMenuItem;
   New1: TMenuItem;
   procedure New1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation
uses
 Child;

{$R *.dfm}

procedure TForm1.New1Click(Sender: TObject);
begin
 with TForm2.Create(Application) do
   Show;
end;

end.


Наверх

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