Текущий архив: 2002.02.25;
Скачать: CL | DM;
Вниз
Форма в dll Найти похожие ветки
← →
BlankAlex © (2002-02-07 14:58) [1](* ГЛАВНОЕ *)
TfmNetMain = class(TForm)
procedure FormResize(Sender: TObject);
private
{ Private declarations }
Procedure WMMove(var M: TMessage);message WM_Move;
public
{ Public declarations }
end;
{При изменении размеров главной формы изменим размеры дочерней}
procedure TfmNetMain.FormResize(Sender: TObject);
Var
F:TForm ;
Rect:TRect ;
begin
F:=FindForm(TfmOpenProject) ;
If F <> nil Then With F Do Begin
Rect:=GetFormClientRect(Self) ;
If WindowState = wsMaximized Then Begin
Left:=Rect.Left+2;
Top:=Rect.Top+2;
Width:=Rect.Right-Left-2 ;
Height:=Rect.Bottom-Top-2 ;
End ;
End ;
end;
{При передвижении главной формы переместим менеджер проектов}
Procedure TfmNetMain.WMMove(var M: TMessage);
Var
F:TForm ;
Rect:TRect ;
begin
F:=FindForm(TfmOpenProject) ;
If F <> nil Then With F Do Begin
Rect:=GetFormClientRect(Self) ;
If WindowState = wsMaximized Then Begin
Left:=Rect.Left+2;
Top:=Rect.Top+2;
Width:=Rect.Right-Left-2 ;
Height:=Rect.Bottom-Top-2 ;
End ;
End ;
end;
(* ДОЧЕРНЕЕ*)
TfmOpenProject = class(TForm)
private
{ Private declarations }
Procedure WMMoving(var M: TMessage);message WM_Moving;
Procedure WMGetMinMaxInfo(var M: TWMGetMinMaxInfo); message WM_GetMinMaxInfo;
Procedure WMSysCommand(var Message:TMessage); message WM_SYSCOMMAND ;
public
{ Public declarations }
end;
{Если окно максимизировано, то мы не можем двигать его}
Procedure TfmOpenProject.WMMoving(var M: TMessage);
Var
Rect:TRect ;
Begin
If WindowState = wsMaximized Then Begin
Rect:=GetFormClientRect(fmNetMain) ;
PRect(M.LParam)^.Left:=Rect.Left +2 ;
PRect(M.LParam)^.Top:=Rect.Top +2 ;
PRect(M.LParam)^.Right:=Rect.Right-2 ;
PRect(M.LParam)^.Bottom:=Rect.Bottom -2 ;
End ;
End ;
{Установка координат раскрытия окна}
procedure TfmOpenProject.WMGetMinMaxInfo(var M: TWMGetMinMaxInfo);
Var
Rect:TRect ;
begin
Rect:=GetFormClientRect(fmNetMain) ;
M.MinMaxInfo.ptMaxPosition.x := Rect.Left +2 ;
M.MinMaxInfo.ptMaxPosition.y := Rect.Top +2 ;
M.MinMaxInfo.ptMaxTrackSize.x:= Rect.Right-Rect.Left-4 ;
M.MinMaxInfo.ptMaxTrackSize.y:= Rect.Bottom-Rect.Top-4 ;
End ;
{Определение размеров клиентской области}
Function GetFormClientRect(F:TForm):TRect ;
Begin
Windows.GetWindowRect(F.ClientHandle,Result) ;
End ;
Единственное, я обрабатывал все только для случая, когда псевдодочерняя форма максимизирована,
т.е. она в максимизированном состоянии не может выйти за пределы родительской и перемещается вместе с ней, тебе нужно еще обрабатывать, когда форма не максимизирована.
И еще, стиль псевдочайлд формы fsStayOnTop, правда я не пользуюсь стандартным, а использую APi-шные функции для этого.
Страницы: 1 вся ветка
Текущий архив: 2002.02.25;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.012 c