AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Überprüfen, ob ein Formular offen ist

Ein Thema von Rifman · begonnen am 9. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#1

Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 12:11
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]
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#2

Re: Überprüfen, ob einen Formular offen ist

  Alt 9. Apr 2008, 12:32
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;
  Mit Zitat antworten Zitat
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#3

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 13:33
Und wie kann ich in FormCreate mein FormArray mit nil initialisieren?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 13:37
Schau mal in die Hilfe zu Length() und dynamischen Arrays. Allerdings würde ich wohl statt des Arrays eher eine TObjectList verwenden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#5

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 19:06
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 19:08
Das ist aber nicht besonders performant.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#7

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 19:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 19:16
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#9

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 19:42
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Überprüfen, ob ein Formular offen ist

  Alt 9. Apr 2008, 19:57
Achso, das ist etwas anderes.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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