Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Form nach SetParent wieder lösen (https://www.delphipraxis.net/50635-form-nach-setparent-wieder-loesen.html)

padavan 28. Jul 2005 18:34


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:
  windows.SetParent(findwindow(nil,PCHar('Form_Listview')),Form1.Handle);
Funktioniert auch wunderbar.
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:

Luckie 28. Jul 2005 18:37

Re: Form nach SetParent wieder lösen
 
Im PSDK steht auch nichts. Aber was passiert, wenn du 0 übergibst als Handle?

SirThornberry 28. Jul 2005 18:39

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;

padavan 29. Jul 2005 06:12

Re: Form nach SetParent wieder lösen
 
Leider hatte ich kein Glück mit

Delphi-Quellcode:
  windows.SetParent(findwindow(nil,PCHar('Form_Listview')),0);
Und wer das Handle vorher hatte, hab ich auch nicht rausbekommen, da mir der dafür passende Befehl noch nicht untergekommen ist..

Delphi-Quellcode:
  GetHandle(...
war so ein Ansatz bzw.

Delphi-Quellcode:
  GetParentHandle(...
Ein seltsamen Effekt hatte der Versuch mit 0 als Handle übergeben allerdings.
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:

marabu 29. Jul 2005 06:49

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:
procedure TMainForm.CaptureButtonClick(Sender: TObject);
begin
  with FloatingForm do
  if Assigned(Parent)
    then Parent := nil
    else Parent := self;
end;
Grüße vom marabu

SirThornberry 29. Jul 2005 08:04

Re: Form nach SetParent wieder lösen
 
SetParent liefert dir doch das vorherige Handle zurück

padavan 29. Jul 2005 08:37

Re: Form nach SetParent wieder lösen
 
aha,
gut, dann werde ich dass mal checken.


Vielen Dank für die schnellen Antworten
:hi:

chaosben 29. Jul 2005 12:55

Re: Form nach SetParent wieder lösen
 
Alternative probiers mit
Delphi-Quellcode:
SetParent(DeinFensterHandle,GetDesktopWindow());
MfG
Ben

SirThornberry 29. Jul 2005 13:10

Re: Form nach SetParent wieder lösen
 
desweiteren gibt es auch die Funktion GetParent

padavan 29. Jul 2005 17:01

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:
procedure zum Lösen
  windows.SetParent(findwindow(nil,PCHar('Form_Listview')),Handler);
Compilieren geht ohne gemecker, aber leider ohne Funktion leider noch nicht gegeben


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz