Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abfrage ob Formular created (https://www.delphipraxis.net/12262-abfrage-ob-formular-created.html)

Praktikant 24. Nov 2003 08:48


Abfrage ob Formular created
 
Eigentlich was ganz simples:
Wie frage ich ab ob ein Formular created ist.

Erstelle zur Laufzeit ein paar Childformulare, wenn diese geöffnet sind soll im Timer was ausgeführt werden.

Tja, aber entweder gibt's eine Verletzung während der Laufzeit oder es ist schon ein Syntax Fehler :?

Tyrael Y. 24. Nov 2003 08:56

Re: Abfrage ob Formular created
 
Hi,

wie wäre es wenn du in der Create Methode der Child Formulare eine Boolean Variable setzt.
Diese Variable prüfst du dann im Hauptformular.

Sollte so klappen. Vielleicht gibst es auch was geschickteres.

Gruß

choose 24. Nov 2003 09:56

Re: Abfrage ob Formular created
 
Hallo Praktikant,

wenn Du die Formulare dynamisch zur Laufzeit erstellst, solltest Du doch in Form von Variablen Referenzen auf diese Fenster haben, also in etwa
Delphi-Quellcode:
Self.FMyChild:= TChildForm.Create(Self);
In diesem Fall sollte ein
Delphi-Quellcode:
Result:= Assigned(Self.FMyChild);
im Hauptformular Aufschluss darüber geben, ob dieses Formular bereits erzeugt worden ist.
Die Lösung setzt vorraus, dass Du für jedes Fenster eine Variable verwendest (siehe auch TObjectList) und das Fenster nicht wieder Freigegeben wird, ohne dass das Hauptfenster darüber informiert und die Variable wieder auf nil gesetzt wird. Falls Dir diese "Benachrichtigung" zu umständilich erscheint, könntest Du das Fenster vielleicht einfach verstecken und diesen Umstand beim Testen auf das Fenster bzw beim Erzeugen berücksichtigen...

Marcel Gascoyne 24. Nov 2003 10:39

Re: Abfrage ob Formular created
 
Wenn Du auf die Kindfenster innerhalb einer MDI Anwendung zugreifen willst solltest Du die Eigenschaften MDIChildCount und MDIChildren des Hauptformulars verwenden. Verwende einen Timer in Deinem MDI Hauptformular und benutze folgenden Code im OnTimer Event:

Delphi-Quellcode:
procedure TYourMDIForm.Timer1Timer(Sender: TObject);
var
  Idx: Integer;
begin
  for Idx := 0 to Self.MDIChildCount - 1 do
  begin
    { Suche nach MDI Kindfenster }
    if Self.MDIChildren[Idx].Name = 'MyFormName' then
    begin
      { Form gefunden, also Timer1 deaktivieren }
      Timer1.Enabled := False;
      { hier Deinen Code rein }
     
    end;
  end;
end;
Hoffe, das Dir diese Info weiterhilft.

Gruß,
Marcel

Tyrael Y. 24. Nov 2003 10:42

Re: Abfrage ob Formular created
 
@Marcel Gascoyne , hältst du das für geschickt im Timer das vorhandensein eines Formulars zu prüfen?
Reicht es nicht einmal ne Prüfung ducrhzuführen statt in Intervallen?

Ich persönlich würde sowas nie in den Timer stecken. Dann sogar lieber ne Schleife.

Gruß

Praktikant 24. Nov 2003 11:14

Re: Abfrage ob Formular created
 
danke für die Tipps, teste mal aus wie ich es zum laufen bekomme.
Ansonten die einfachste Methode verwenden, eine Variable setzen... :zwinker:

oki 24. Nov 2003 11:42

Re: Abfrage ob Formular created
 
Hi Praktikant,

die Lösung mit der Variablen ist die komplizierte Methode.

nimmst du sie public in deine Form, bekommst du beim Zugriff eine Exception wenn die Form nicht existiert. Führst du sie global, mußt du dich konsequent um die pflege kümmern (Zuordnung zum passenden Fenster, variable Anzahl etc.).

Assign ist der einfache Weg. Prüfe mit Assign das Vorhandensein der Instanz und verzweige auf nichts tun bei False.

Gruß oki

oki 24. Nov 2003 12:38

Re: Abfrage ob Formular created
 
Ich kann wieder mal meinen eigenen Beitrag nicht editieren :wall:

Schreibfehler: nicht Assign sondern Assigned verwenden!

Gruß oki

Tyrael Y. 24. Nov 2003 13:29

Re: Abfrage ob Formular created
 
jep oki´s variante ist besser, mach es lieber so mit assigned

Marcel Gascoyne 24. Nov 2003 14:02

Re: Abfrage ob Formular created
 
Zitat:

Zitat von Tyrael Y.
@Marcel Gascoyne , hältst du das für geschickt im Timer das vorhandensein eines Formulars zu prüfen?

@Tyrael: Wollt ich den Timer benutzen oder Praktikant ?

Ich würd die Prüfung sonst natürlich in einen Loop nach der Erstellung der Child Formulare oder ins Show Event der MDI Form legen... Nur wann erstellt er die Formulare ? Im Create Event ?

Gruß,
Marcel


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr.
Seite 1 von 2  1 2      

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