![]() |
Kontrolle ob ein Fenster bereits geöffnet ist
Hallo,
ich habe ein kleines Problem, dass ich einfach nicht gelöst kriege. Folgende Situation herscht: Ein User kriegt eine Liste von Inhalten angezeigt. Auf jedes Item dieser Liste kann er klicken und es öffnet sich dann eine Detailansicht. Es soll aber nicht möglich sein, für z.B. Bild 1 die Detailansicht doppelt zu öffnen.
Delphi-Quellcode:
Wie finde ich jetzt heraus, ob der User schon eine Detailsansicht mit dem jeweiligen ItemIndex geöffnet hat? Ich habe auch scohn folgendes probiert gehabt:procedure TForm1.ListView1DblClick(Sender: TObject); var detail: TForm3; begin if Assigned(ListView1.Selected) then begin if (user_id <> '0') then begin detail := TForm3.Create(self); detail.load(ListView1.ItemIndex); detail.Show; end; end; end; Ich habe ein globals Array definiert
Delphi-Quellcode:
Und habe dann mit der gleichen Funktion wie oben (außer das dort keine lokale Variable definiert ist), das Ganze geöffnet.
var
detail : Array [0..100000] of TForm3;
Delphi-Quellcode:
Nun hatte ich mir hier gedacht, dass ich vielleicht irgendwie das Array kontrollieren könnte ob das jeweilige Feld belegt wurde, ich weiß aber nicht wie. Was mich hierbei aber am meisten stört, ist das ich auf ein beschränktes Array angewiesen bin.
procedure TForm1.ListView1DblClick(Sender: TObject);
begin if Assigned(ListView1.Selected) then begin if (user_id <> '0') then begin detail[ListView1.ItemIndex] := TForm3.Create(self); detail[ListView1.ItemIndex].load(ListView1.ItemIndex); detail[ListView1.ItemIndex].Show; end; end; end; SetLength hat hier leider nicht funktioniert, da sich die Liste regelmäßig updated und die Länge daher bei jedem Update beliebig verändert wird. Ich hoffe sehr ihr könnt mir helfen und versteht mein Problem. Gruß Micha PS Weiß jemand, wie es möglich ist, bei Windows 7 in der Startleiste, beim klicken auf das Icon Aktionen anzuzeigen? |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Nur so: Hast du eine Ahnung wie viel Speicherplatz 100000 Formen benötigen?
Nimm lieber ein Dynamisches Array, dann belegst du auch wirklich nur soviel Platz wie du benötigst... |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Hallo,
ja ich weiß, aber ich schreib auch, dass SetLength leider einen Fehler auslöste. // Edit Habe es nochmal probiert, und jetzt funktioniert es mit dem dynamischen Array :-) Die Hauptfrage bleibt weiterhin offen Gruß Micha |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Zitat:
|
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Hallo,
nein das reicht nicht. Das habe ich bewusst so gewählt. Gruß Micha |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Begründe das mal. Eventuell findet sich eine bessere Lösung.
|
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Hallo,
weil es sich hierbei um ein kleines Chatsystem handeln soll und man auch mit mehr als einer Person sprechen können soll ;-) Ist ja nicht so cool, dass man wenn man sich ein anderes Bild angucken will und mit dem Ersteller chatten will, das Chatten mit einem anderen Abrechen muss bzw. von diesem weggerissen wird. Oder? Hatte schon überlegt, das mit Registerkarten zulösen, fand das aber nicht so schön. Gruß Micha |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Da reicht doch ein Formular aus. Für jeden Chatpartner wird es neu dynamisch erstellt mit den zugehörigen Daten für die Chatpartner.
|
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Hallo,
das verstehe ich jetzt nicht. Mehr mache ich doch jetzt auch nicht. Er gibt oben einen Bereich, in dem das Bild ist, darunter ist ein Feld in dem der Chatverlauf steht und darunter ein Eingabeformular. Gruß Micha |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Es gibt also nur eine Formularklasse (mit dem nichtssagenden Namen TForm3 - bitte ändern!) aber davon mehrere Instanzen?
Dann mach's doch so:
Delphi-Quellcode:
// suche Formular
function TForm1.FindMyForm(const value:string):TForm; var i : integer; f : TForm3; begin for i := ComponentCount-1 to 0 do // Suche von "hinten" beginnen,höhere Wahrscheinlichkeit die Formulare schnell zu finden begin if Components[i] is TForm3 then begin f := TForm3(Components[i]); if f.Caption = Value then begin Result := f; exit; end; end; end; Result := nil; end; procedure TForm1.FindOrCreateForm(const value:string); var detail : TForm3; begin detail := FindMyForm(value) as TForm3; if Assigned(detail) then detail.BringToFront // Formular schon vorhanden -> anzeigen else begin // Formular nicht vorhanden -> erzeugen detail := TForm3.Create(self); detail.load(value); // hier String statt Index übergeben detail.Caption := value; detail.Show; end; end; |
Re: Kontrolle ob ein Fenster bereits geöffnet ist
Hallo,
danke für deinen Beitrag. Das werde ich mal versuchen. Gruß Micha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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 by Thomas Breitkreuz