![]() |
Forms 'andocken'
Hallo!
Beim klick auf einen Button meines Projektes erscheint ein neues Formular, das ich unabhängig von MainForm bewegen kann - der Standart halt. Was muss ich tun, damit das Form2 am Rand des Form1 andockt und sich nicht mehr alleine verschieben lässt sondern mit dem Form1 verschoben wird? |
Re: Forms 'andocken'
Wenn Form2 an der linken Seite von Form1 andocken soll, dann musst du in einen Timer mit möglichst kleinem Intervall folgendes schreiben:
Delphi-Quellcode:
Ich bin mir aber nicht sicher, ob das geht. Du kannst es ja mal ausprobieren.
procedure TForm1.Timer1Timer(Sender: TObject);
begin Form2.Left := Form1.Left-Form2.Width; Form2.Top := Form1.Top; end; |
Re: Forms 'andocken'
Moin moin,
Zitat:
Delphi-Quellcode:
//...
private { Private-Deklarationen } procedure PosChange(var Msg: TWmWindowPosChanging); message WM_WINDOWPOSCHANGING; //... procedure TForm1.PosChange(var Msg: TWmWindowPosChanging); begin if Assigned(Form2) then begin if Form2.Visible then begin Form2.Left := 0; Form2.Top := 0; end; end; Msg.Result := 0; end; procedure TForm1.Button1Click(Sender: TObject); begin Form2.Parent := Form1; Form2.Show; end; |
Re: Forms 'andocken'
Zitat:
Ciao, trocki |
Re: Forms 'andocken'
Hallo,
Zitat:
![]() ![]() Gruß xaromz |
Re: Forms 'andocken'
Zitat:
mfg, trocki |
Re: Forms 'andocken'
Moin moin,
Zitat:
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; |
Re: Forms 'andocken'
Machs doch ganz einfach so, sieht vlt. bissi Q & D aus aber funzt!
Delphi-Quellcode:
private
{ Private declarations } procedure WMMove(var Msg: TWMMOVE); message WM_MOVE; public { Public declarations } end; var Form1: TForm1; implementation uses unit2; {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin Form2.Show; end; procedure TForm1.WMMove(var Msg: TWMMOVE); begin if Form2 <> Nil then MoveWindow(Form2.Handle, Form1.Left + Form1.Width + 5, Form1.Top, Form2.Width, Form2.Height, True); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz