Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
Delphi XE2 Professional
|
Re: Forms 'andocken'
30. Mai 2006, 19:58
Moin moin,
Zitat von trockentaucher:
... allerdings verhindert WM_WINDOWPOSCHANGED die übermittlung der neuen Position?!
Nein. Die bekommst du im 2. Parameter der Message übergeben...
Delphi-Quellcode:
// ...
TmpForm : TForm;
procedure MyFormClose(Sender: TObject; var Action: TCloseAction);
procedure PosChanged(var Msg: TWmWindowPosChanged); message WM_WINDOWPOSCHANGED;
public
{ Public-Deklarationen }
end;
//...
procedure TForm1.MyFormClose(Sender: TObject; var Action: TCloseAction);
begin
TmpForm := nil;
Action := caFree;
end;
procedure TForm1.PosChanged(var Msg: TWmWindowPosChanged);
begin
Canvas.FillRect(Rect(10,10,110,110));
Canvas.TextOut(10, 10, 'Left:'); Canvas.TextOut(80, 10, IntToStr(Msg.WindowPos.x));
Canvas.TextOut(10, 30, 'Top:'); Canvas.TextOut(80, 30, IntToStr(Msg.WindowPos.y));
Canvas.TextOut(10, 50, 'Width:'); Canvas.TextOut(80, 50, IntToStr(Msg.WindowPos.cx));
Canvas.TextOut(10, 70, 'Height:'); Canvas.TextOut(80, 70, IntToStr(Msg.WindowPos.cy));
if Assigned(TmpForm) then begin
SetWindowPos(TmpForm.Handle,
Msg.WindowPos.hwndInsertAfter,
Msg.WindowPos.x + 150,
Msg.WindowPos.y,
Msg.WindowPos.cx,
Msg.WindowPos.cy,
SWP_SHOWWINDOW);
end;
Msg.Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TmpForm := TForm2.Create(nil);
TmpForm.OnClose := MyFormClose;
TmpForm.Left := Left + 150;
TmpForm.Top := Top;
TmpForm.Show;
end;
|
|
Zitat
|