Thema: Delphi Forms 'andocken'

Einzelnen Beitrag anzeigen

Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Forms 'andocken'

  Alt 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;
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat