Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Parent oder Nicht Parent (https://www.delphipraxis.net/84389-parent-oder-nicht-parent.html)

DerMike 16. Jan 2007 12:17


Parent oder Nicht Parent
 
Hallo,

ich hoffe ich poste im richtigen Forum.

Ich habe eine kleine Anwendung erstellt mit einem Panel. Dieses Panel ist Parent von einem Formular. Wenn ich jetzt auf einen anderen Menüpunkt klicke, möchte ich, dass ermittelt wird ob mein Panel bereits Parent von einem Formular ist. Wenn ja, dann möchte ich dieses Formular schließen.

Ist soetwas möglich??

Also nochmal....

Delphi-Quellcode:
        ModulForm := TfrmSTG.Create(frmMain);
        ModulForm.Parent := frmMain.pnlMainModul;
        ModulForm.Height := frmMain.pnlMainModul.Height;
        ModulForm.Width := frmMain.pnlMainModul.Width;
        ModulForm.Show;
Dann ermitteln ob Formular geöffnet wurde, und geöffnetes Formular schließen....

chrisw 16. Jan 2007 12:22

Re: Parent oder Nicht Parent
 
Ich denke so in etwa (ungetestet)!

Delphi-Quellcode:
var i : Integer;
begin
  for i := 0 to frmMain.ComponentCount -1 do
    if (frmMain.Components[i] is TForm)
        and ((frmMain.Components[i] as TForm).Parent = pnlMainModul)) then      
           TForm(frmMain.Components[i]).Close;
end;


Besser wäre es aber eine Klasse von TPanel abzuleiten, die eine Property ClientForm hat !

JasonDX 16. Jan 2007 12:30

Re: Parent oder Nicht Parent
 
Zitat:

Zitat von DerMike
Delphi-Quellcode:
ModulForm.Parent := frmMain.pnlMainModul;

Bei diesem Aufruf geschieht folgendes:
Zum einen wird ModulForm.Parent auf frmMain gesetzt, und gleichzeitig wird ModulForm in die Liste der Controls ein gefuegt, die Kinder von frmMain sind. Diese Liste ist mit Controls zugaenglich.
D.h. wenn du wissen willst, ob ein Formular Kind eines anderen ist, so guckst du in der Liste des Wahrscheinlichen Vaters nach, ob das Formular in seiner Sammlung von Kindern steckt.
Auf Delphisch:
Delphi-Quellcode:
for i := 0 to frmMain.ControlCount - 1 do
  if frmMain.Controls[i] is TForm then
    //Dieser Fall trifft ein, wenn ein Kind vom frmMain ein Formular ist, sprich von TForm abgeleitet ist
    (frmMain.Controls[i] as TForm).Close();
greetz
Mike

DerMike 16. Jan 2007 12:42

Re: Parent oder Nicht Parent
 
Danke, genau das habe ich gesucht ....


lg
Mike

marabu 16. Jan 2007 12:53

Re: Parent oder Nicht Parent
 
Hallo Mike,

solange immer nur ein ChildForm existiert, würde ich mir dieses in einer Form-Variable der MainForm merken.

Delphi-Quellcode:
type
  TMainForm = class(TForm)
  private
    FChildForm: TForm;
    procedure SetChildForm(childForm: TForm);
  published
    ChildForm: TForm read FChildForm write SetChildForm;
  end;

procedure TMainForm.SetChildForm(childForm: TForm);
begin
  FChildForm.Free;
  FChildForm := childForm;
end;
Bei jeder neuerlichen Zuweisung wird das vorhergehende ChildForm zerstört, mit NIL kannst du das letzte ChildForm dann auch noch zerstören.

Vielleicht interessiert dich auch dieser thread: klick

Grüße vom marabu

DerMike 16. Jan 2007 13:04

Re: Parent oder Nicht Parent
 
Hallo,

ich danke dir marabu. Diese Lösung gefällt mir sogar sehr gut. So kann ich sicherstellen, dass ich mir immer das aktuelle Formular merke. Ich habe das jetzt so eingebaut und es funktioniert wunderbar.

lg
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.

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