![]() |
Mehrere Fenster ??
Hallöchen,
kleines ( grosses ) Problem : So ähnlich wie ICQ & Co erstell eich in meinem Programm mehrere Fenster , und zwar so :
Delphi-Quellcode:
MsgForm is ne Unit mit nem Formular drin die von der MainUnit aufegrufen wird.
with TMsgForm.Create(NIL) do begin
Caption:=Nick; lblUIN.Caption:=UIN; reTemp.Text:=Msg; reHist.Lines.Add(''); reHist.Lines.Delete(reHist.Lines.Count-1); for z:=0 to reTemp.Lines.Count-1 do begin reHist.Lines.Add(reTemp.Lines.Strings[z]); end; reTemp.Lines.Clear; Show; end; Die re* sind RichEdit's. Msg ist der Text der darin dargestellt werden soll, der wird in der MainUnit empfangen. So wie der Code oben ist funktioniert das. Das Fenster geht auf und die Msg steht im RichEdit. Problem ist folgendes: Wie fülle ich das RichEdit eines Fensters was es schon gibt ??? Da müsste dann die Nachricht ( Msg ) angehangen werden. Nun weiss ich aber nicht wie ich auf das RichEdit eines schon offenen Fensters zugreifen kann ? Habt Ihr da vielleicht einen Plan ? Dank Euch schon mal Matthias |
Re: Mehrere Fenster ??
du musst dir einfach nur die bereits geöffneten Fenster merken (zum Beispiel in einer TList) und beim schließen des Fensters diese wieder aus der Liste entfernen.
Delphi-Quellcode:
zugreifen auf das Form kann man später mit:
fListe: TList;
[...] var LForm: TMsgForm; begin LForm := TMsgForm.Create(NIL); with LForm do begin Caption:=Nick; lblUIN.Caption:=UIN; reTemp.Text:=Msg; reHist.Lines.Add(''); reHist.Lines.Delete(reHist.Lines.Count-1); for z:=0 to reTemp.Lines.Count-1 do begin reHist.Lines.Add(reTemp.Lines.Strings[z]); end; reTemp.Lines.Clear; Show; end; fListe.Add(LForm); end;
Delphi-Quellcode:
TMsgForm(fListe.Items[Index]).reHist.Lines.Add(NeueNachricht);
|
Re: Mehrere Fenster ??
Hallöchen,
danke für die Antwort und sorry das ich mich jetzt erst melde ! Ich hatte ein bischen vie um die Ohren. In den nächsten Tagen werd ich das ausprobieren und mich dann noch mal melden.... Also danke erst mal.. Ahm..noch was...wie bekomm ich die Form wieder aus der liste ? Geht das einfach mit Delete oder so oder muss ich die danach auch wieder sortieren, damit nix leeres übrig bleibt wie bei einem Record in einer datei ? Matthias |
Re: Mehrere Fenster ??
Zitat:
aus der Liste bekommst Du den Eintrag mit [b].Delete[b]. ABER Du musst vorher dein Objekt wieder freigeben. Darum kümmert sich die TList nicht. Diese ist einfach nur eine Liste mit Pointern. Das ganze sähe dann z.B. so aus:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var flist : TList; myLabel : TLabel; begin flist := TList.Create; // Liste erzeugen myLabel := TLabel.Create(self); // Label erzeugen // [...] flist.Add(myLabel); // In die Liste eintragen; TLabel(flist.Items[0]).Free; // Label freigeben flist.Delete(0); // Aus der Liste löschen end; |
Re: Mehrere Fenster ??
Hallöchen,
also da ist doch tatsächlich noch einer um diese Zeit am Proggen :-) Also ganz ehrlich ... wirklich verstanden hab ich das jetzt nicht. Ich hab das jetzt nur so überflogen, aber .... -> Also mal angenommen ein Fenster ist auf ( gespeichert in der List List.add(form) ) Buton2Click ist mal das Close Ereignis. Dann erstelleich erst wieder eine Liste, mach da einen Label dazu( Frage was und zu was der ist ?? :oops: ) Und dann lösch ich den wieder ??? Ich versteh nur Bahnhof .. sorry :wall: :wall: :wall: Matthias |
Re: Mehrere Fenster ??
Zitat:
Nein, das war doch nur ein Beispiel. In deinem Fall musst Du, bevor Du den Eintrag aus der Liste löschst das Fenster erst wieder freigeben (aus dem Speicher entfernen). Dies darfst Du natürlich nicht machen wenn das Fenster noch aktiv ist sondern musst es in dein MainForm machen. Dor würde dann dieser Code aufgerufen um ein Fenster aus der Liste zu löschen
Delphi-Quellcode:
.
. TMsgForm(fListe.Items[Index]).Free; fListe.Delete(Index); . . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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