![]() |
Form nach SetParent wieder lösen
Guten Abend Delphianer,
ich habe ein Hauptformular auf welchem ich bei Bedarf ein weiteres Fenster öffnen kann. Ich möchte ein Feature programmieren, dass dieses zweite Fenster in meinem Hauptformular gefangen ist, oder bei Bedarf auch gelöst werden kann. Das Fangen habe ich so realisiert:
Delphi-Quellcode:
Funktioniert auch wunderbar.
windows.SetParent(findwindow(nil,PCHar('Form_Listview')),Form1.Handle);
Hehe, jetzt weiß ich nur nicht, wie das Formular (welches übrigens zur Laufzeit erst generiert wird) wieder aus meinem Hauptformular lösen kann und es quasi wieder an den Desktop übergebe. Hat jemand ne Idee? :gruebel: |
Re: Form nach SetParent wieder lösen
Im PSDK steht auch nichts. Aber was passiert, wenn du 0 übergibst als Handle?
|
Re: Form nach SetParent wieder lösen
schau doch einfach mal was der parent ist bevor du ihn neu setzt.
Desweiteren kannst du auch einfach machen
Delphi-Quellcode:
FormListView.Parent := Form1;
|
Re: Form nach SetParent wieder lösen
Leider hatte ich kein Glück mit
Delphi-Quellcode:
Und wer das Handle vorher hatte, hab ich auch nicht rausbekommen, da mir der dafür passende Befehl noch nicht untergekommen ist..
windows.SetParent(findwindow(nil,PCHar('Form_Listview')),0);
Delphi-Quellcode:
war so ein Ansatz bzw.
GetHandle(...
Delphi-Quellcode:
Ein seltsamen Effekt hatte der Versuch mit 0 als Handle übergeben allerdings.
GetParentHandle(...
Nachdem ich das Versucht hatte und feststelle, dass es nicht funzt, habe ich den urspünglichen Zustand wiederhergestellt. Leider ohne Erfolg, jetzt ließ sich das 2te Formular gar nicht fangen. Eigenartig, oder? Hab dann langsam an meinem Verstand gezweifelt und es mit einem anderen Formular versucht, welches ich Testweise erzeugt hab - damit ging´s. Aber das, welchem ich 0 übergeben hab, dass will sich nicht mehr fangen lassen :wall: |
Re: Form nach SetParent wieder lösen
Hallo padavan,
wenn es nur um das Einfangen und Freigeben geht, dann würde ich das so machen:
Delphi-Quellcode:
Grüße vom marabu
procedure TMainForm.CaptureButtonClick(Sender: TObject);
begin with FloatingForm do if Assigned(Parent) then Parent := nil else Parent := self; end; |
Re: Form nach SetParent wieder lösen
SetParent liefert dir doch das vorherige Handle zurück
|
Re: Form nach SetParent wieder lösen
aha,
gut, dann werde ich dass mal checken. Vielen Dank für die schnellen Antworten :hi: |
Re: Form nach SetParent wieder lösen
Alternative probiers mit
Delphi-Quellcode:
MfG
SetParent(DeinFensterHandle,GetDesktopWindow());
Ben |
Re: Form nach SetParent wieder lösen
desweiteren gibt es auch die Funktion GetParent
|
Re: Form nach SetParent wieder lösen
leider kein Glück bisher.
Als erstem mal weiß ich jetzt weshalb des SetParent auf einmal nicht mehr ging. Nach dem ich 0 übergeben hab, als Versuch die Form_listview wieder zu lösen, war auf einmal die Caption gelöscht, das heißt die Form hatte keinen Namen mehr und wurde deshalb auch nicht mehr gefunden. Ich hab die Caption wieder eingeben, aber vergebens, wird wieder gelöscht. Dann hab ich´s zur Laufzeit zugewiesen immer direkt vor SetParent --> dann gings. ABER: Mein ursprüngliches Problem hab ich immernoch nicht lösen können. Habe folgendes Versucht:
Delphi-Quellcode:
var Handler: HWND //global
Delphi-Quellcode:
procedure zum Fangen
Handler := Windows.GetParent(findwindow(nil,PChar('Form_Listview'))); windows.SetParent(findwindow(nil,PCHar('Form_Listview')),Panel_Listview.Handle);
Delphi-Quellcode:
Compilieren geht ohne gemecker, aber leider ohne Funktion leider noch nicht gegeben
procedure zum Lösen
windows.SetParent(findwindow(nil,PCHar('Form_Listview')),Handler); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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-2025 by Thomas Breitkreuz