-
Форме MDIChild надо проставить определенные стартовые размеры и позицию внутри главной формы. Прописал их в OnCreate, но они успешно игнорируются. Насколько помню, это обычное поведение - стартовые размеры и позицию окон MDIChild система устанавливает сама.
Тем не менее, есть ли способ задать свои стартовые размеры и позицию форме MDIChild?
-
> Юрий Зотов © (14.03.18 10:43)
Попробуй позицию устанавливать в OnCreate (или в конструкторе) MDIChild. Т.е.
procedure TForm2.FormCreate(Sender: TObject); var crect: TRect; begin Windows.GetClientrect( application.mainform.clienthandle, crect ); SetBounds( (crect.right - width ) div 2, (crect.bottom - height ) div 2, width, height ); end;
-- Regards, LVT.
-
Да, Леонид, спасибо. До этого я уже сам додумался (есть еще порох в пороховницах). Но возникла другая проблема - форма MDIChild стартует в максимизированном состоянии, хотя ее никто об этом не просил (WindowState = wsNormal). Что не есть гуд.
Перехват WM_SYSCOMMAND гиганта мысли не спас.
-
-
unit Child;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TfChild = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
FInstanceCount: Integer;
public
constructor Create (AOwner: TComponent; AInstanceCount: Integer); reintroduce;
end;
implementation
constructor TfChild.Create(AOwner: TComponent; AInstanceCount: Integer);
begin
FInstanceCount := AInstanceCount;
inherited Create (AOwner);
end;
procedure TfChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TfChild.FormShow(Sender: TObject);
begin
if (FInstanceCount mod 2) = 0 then
begin
Left := 5;
Top := 5;
Width := 200;
Height := 200;
end;
end;
end. Вызов procedure TForm1.New1Click(Sender: TObject);
begin
with TfChild.Create(Self, MDIChildCount) do
Show;
end; Работает
-
> Юрий Зотов © (14.03.18 11:57) [2]
> Перехват WM_SYSCOMMAND гиганта мысли не спас.
WM_MDIRESTORE ?
-- Regards, LVT.
-
Я это делаю так (форма - создана, ничего кроме FormStyle := fsMDIChild не менял).
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
protected procedure CreateParams(var Params: TCreateParams); override; final;
end;
implementation
procedure TForm2.CreateParams;
begin
inherited;
Params.X := Left;
Params.Y := Top;
Params.Width := Width;
Params.Height := Height;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Left := 10;
Top := 100;
Width := 400;
Height := 200;
end;
end.
|