![]() |
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 :? |
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ß |
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:
In diesem Fall sollte ein
Self.FMyChild:= TChildForm.Create(Self);
Delphi-Quellcode:
im Hauptformular Aufschluss darüber geben, ob dieses Formular bereits erzeugt worden ist.
Result:= Assigned(Self.FMyChild);
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... |
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:
Hoffe, das Dir diese Info weiterhilft.
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; Gruß, Marcel |
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ß |
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: |
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 |
Re: Abfrage ob Formular created
Ich kann wieder mal meinen eigenen Beitrag nicht editieren :wall:
Schreibfehler: nicht Assign sondern Assigned verwenden! Gruß oki |
Re: Abfrage ob Formular created
jep oki´s variante ist besser, mach es lieber so mit assigned
|
Re: Abfrage ob Formular created
Zitat:
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:25 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