Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

marabu 29. Jul 2005 17:27

Re: Form nach SetParent wieder lösen
 
Hallo padavan,

du hast doch eine VCL application - warum musst du den Container-Wechsel unbedingt über das Win32 API versuchen? Windows.SetParent() ist nicht ganz dasselbe wie TForm.SetParent(), in der VCL werden da schon noch ein paar Dinge mehr abgewickelt, als bloß ein Handle einzusenden. Die VCL-konforme Lösung hatte ich dir ja schon gegeben.

marabu

Robert_G 29. Jul 2005 17:29

Re: Form nach SetParent wieder lösen
 
Zitat:

Zitat von marabu
Hallo padavan,
du hast doch eine VCL application - warum musst du den Container-Wechsel unbedingt über das Win32 API versuchen?

Das frage ich mich schon die ganze Zeit...
Vor allem ist das Suchen eines Fensters nach Namen IMHO nicht sehr schlau, da dir da alles Mögliche unterkommen kann, das genauso heißt. ;) (Zum Beispiel ein Form aus einer anderen Instanz deiner App!)

padavan 29. Jul 2005 18:15

Re: Form nach SetParent wieder lösen
 
Ein Beispiel wäre hilfreich....
:roll:

marabu 29. Jul 2005 18:23

Re: Form nach SetParent wieder lösen
 
Wenn dir mein Beispiel von Heute 07:49 Uhr nicht gefällt, dann sag einfach warum nicht und die kriegst ein Neues.

marabu

padavan 30. Jul 2005 12:41

Re: Form nach SetParent wieder lösen
 
Na weil ich´s nicht gebacken bekommen hab.
:pale:

Habe dein Codefragment offenbar nicht richtig umsetzen können....
Ich versuch´s aber nochmal. Es ist wahrscheinlich genau das, was ich suche.

Zu der Frage oder den Hinweisen die sich wunderten, weshalb ich dieses Problem mit SetParent versucht hatte --> da ich es nicht besser wusste.

Danke

padavan 30. Jul 2005 12:52

Re: Form nach SetParent wieder lösen
 
Ich nochmal
Weiß gar nicht, was es da nicht zu verstehen gab.
Hab´s eben nochmal probiert und es klappte auf anhieb.
procedure TMainForm.CaptureButtonClick(Sender: TObject);
Delphi-Quellcode:
begin
  with FloatingForm do
  if Assigned(Parent)
    then Parent := nil
    else Parent := self;
end;
Hab den Felher gemacht und es direkt in meinem Projekt ausprobiert, wahrscheinlich gab´s Seiteneffekte und deshalb ging´s nicht.

Ich wollte die zweite Form halt in einem Panel fangen, welches auf der ersten Form liegt, damit die Reihenfolge der Komponenten, welche ich festgelegt habe auch weiterhin eingehalten wird. Das heißt, die eingefange Form2 soll dann unter umständer nicht im Vordergrund auf Form1 liegen, je nach Zustand.

Also vielen Dank nochmal!

marabu 30. Jul 2005 13:01

Re: Form nach SetParent wieder lösen
 
Hallo padavan,

die VCL-Lösung ist wirklich einfach. Du kannst sie noch um das eine oder andere feature aufpeppen, wie z.B. Sicherstellung der Sichtbarkeit, Beschränkung auf die client area vom parent, Rahmen wegnehmen beim Einfangen, etc.

Der Code gehört in das Action-Element, mit dem du dann das Einfangen und Lösen der form steuern willst. Die action kannst du dann mit einem button oder menuItem auslösen. Wenn du noch Probleme hast, gib ein Zeichen.

Freundliche Grüße vom marabu

Habe ich jetzt wirklich 10 Minuten für diese paar Zeilen gebraucht? Naja, ich lass den Text mal so stehen, vielleicht ist er ja auch interesant für dich.

padavan 30. Jul 2005 16:28

Re: Form nach SetParent wieder lösen
 
Vielen Dank das du mir nochmal Hilfe anbietest...
(ein unangenehmes Gefühl, wenn man ständig nerven muss.....)

Das einzige was mir jetzt noch fehlt ist, dass ich die 2te Form in eine Panel auf der 1ten Form fangen kann.
Das hab ich jetzt mal so versucht:

Delphi-Quellcode:
  Form_listview.ParentWindow := Form1.Panel_listview.handle;
Aber genau wie bei der SetParent-Sache hab ich auch hier wieder keine Ahnung wie ich´s wieder lösen kann und quasi dem Desktop übergeben kann.
Habe es mit deinem Codefragment versucht:
Delphi-Quellcode:
procedure TMainForm.CaptureButtonClick(Sender: TObject);
begin
  with FloatingForm do
  if Assigned(Parent)
    then Parent := nil
    else Parent := self;
end;
aber da springt dann die Form2 nur zwischen dem Panel in Form1 und der Form1 hin und her.

marabu 30. Jul 2005 19:12

Re: Form nach SetParent wieder lösen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo padavan,

in diesem Forum eine Frage zu stellen muss niemandem unangenehm sein. Du nervst auch nicht. Nerven geht anders...

Im Anhang findest du ein Demo-Projekt, bei dem eine MainForm eine FloatingForm einfängt und auf einem Panel festsetzt. Ich hatte dir schon im letzten Beitrag angedeutet, dass es da vielleicht noch ein paar Dinge zu regeln gibt. Unter anderem willst du gewiss nicht, dass deine Form nach dem Einfangen unsichtbar ist, weil z.B. FloatingForm.Top größer als PinPanel.Height ist...

Schau es dir einfach mal an. Wenn du irgendwas nicht verstehst, dann kann es auch ein Fehler von mir sein. Im Zweifelsfalle einfach nachfragen. Und bedenke es ist nur eine Demo. Aus meiner Sicht fehlt noch Vieles.

marabu

padavan 30. Jul 2005 21:08

Re: Form nach SetParent wieder lösen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo marabu,

Mensch, du hast dich ja ganz schön ins Zeug gelegt.
Auf jeden Fall hab auch ich´s jetzt begriffen.
Vielen Dank nochmal

Falls du mal sehen möchtest, wozu es gut war einfach mal den Anhang runterladen und den Dreamplayer starten.
Wenn du dann ein paar Titel reingeladen hast (oben links) kannst du mit dem Button "TAGList" (rechts unten klein und unscheinbar) "deine Starthilfe" bewundern.

Gruß
Padavan

PS: Das Ding ist nicht sonderlich ausgereift, bin noch ein ziemlicher Anfänger, deshalb auch nicht über die gigantisch hohe Versionsnummer wundern
:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr.
Seite 2 von 3     12 3      

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