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 Überprüfen, ob ein Formular offen ist (https://www.delphipraxis.net/111786-ueberpruefen-ob-ein-formular-offen-ist.html)

Rifman 9. Apr 2008 11:11


Überprüfen, ob ein Formular offen ist
 
Hallo,

auf MainForm habe ich einen Button und eine Liste erstellt. Wenn auf den Button gedrückt wird, werden je nachdem wieviele einträge in der List sind, auch soviele Forms mit TStringGrid aufgehen.
Wie kann ich das jetzt so machen, dass es vorher überprüft wird ob es Forms schon offen sind, die der Anzahl der Einträge entspricht, wenn ja dann die vorhandenen TStringGrid's löschen, wenn nein dann neu erstellen.
Bisher habe ich das so gemacht:
Delphi-Quellcode:
var
FormArray :array of TForm1;
...
procedure TMainForm.Button1Click(Sender: TObject);
begin
For i := 0 To MBListBox.items.Count - 1 Do
          Begin
            FormArray[i] := TForm1.Create(self);
            FormArray[i].show;
          End;
         
End;
Danke.

[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]

Nuclear-Ping 9. Apr 2008 11:32

Re: Überprüfen, ob einen Formular offen ist
 
Du kannst in FormCreate dein FormArray mit nil initialisieren. Dann prüfst du nur if (FormArray[i] = nil) then Form_Gibts_Noch_Nicht else Form_Gibts_Schon;

Rifman 9. Apr 2008 12:33

Re: Überprüfen, ob ein Formular offen ist
 
Und wie kann ich in FormCreate mein FormArray mit nil initialisieren?

DeddyH 9. Apr 2008 12:37

Re: Überprüfen, ob ein Formular offen ist
 
Schau mal in die Hilfe zu Length() und dynamischen Arrays. Allerdings würde ich wohl statt des Arrays eher eine TObjectList verwenden.

Macci 9. Apr 2008 18:06

Re: Überprüfen, ob ein Formular offen ist
 
Das folgende Beispiel erstellt 20 Eingabefelder. und greift über FindComponent mit den Namen der Eingabefelder auf die neu erstellten Eingabefelder zu.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
const
  NamePrefix = 'MyEdit';
begin
  for i := 1 to 20 do begin
    TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
    with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
    begin
      Left := 10;
      Top := i * 20;
      Parent := self;
    end;
  end;
end;
----

Die entscheiden zwei Punkte sind NAME und FINDCOMPONENT.
Edit: Dein Formular kannst dann über Application.FindComponent wiederfinden.

Viele Grüsse,
Macci

DeddyH 9. Apr 2008 18:08

Re: Überprüfen, ob ein Formular offen ist
 
Das ist aber nicht besonders performant.

Macci 9. Apr 2008 18:12

Re: Überprüfen, ob ein Formular offen ist
 
Wieso nicht? oO
Zugegeben mit einem Array ist es ein wenig performanter, als wenn FindComponent in einer Liste nach einem String suchen muss. Das wars aber auch schon. Selbst wenn sein Proggy ein paar Hundert Forms öffnet, dürfte der Unterschied nicht mal eine Millisekunde ausmachen.

DeddyH 9. Apr 2008 18:16

Re: Überprüfen, ob ein Formular offen ist
 
Ich meinte, was bringt es, ein Objekt zu erzeugen und dieses direkt im Anschluss über FindComponent zu suchen, anstatt die Eigenschaften sofort zu setzen, solange man es eh "am Wickel hat"?

[edit] Schlechtschreibung [/edit]

Macci 9. Apr 2008 18:42

Re: Überprüfen, ob ein Formular offen ist
 
Achso. Nein, ich meinte eher so:

Delphi-Quellcode:
For i := 0 To MBListBox.items.Count - 1 Do
         If Application.FindComponent('Formular'+IntToStr(i)) = nil Then              
           With TForm1.Create(Application) do begin
              Name := 'Formular' + IntToStr(i);
              [andere eigenschaften]
           end;
Greetings,
Macci

DeddyH 9. Apr 2008 18:57

Re: Überprüfen, ob ein Formular offen ist
 
Achso, das ist etwas anderes.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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