Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mehrere Fenster ?? (https://www.delphipraxis.net/32929-mehrere-fenster.html)

goose33 29. Okt 2004 19:52


Mehrere Fenster ??
 
Hallöchen,

kleines ( grosses ) Problem :

So ähnlich wie ICQ & Co erstell eich in meinem Programm mehrere Fenster , und zwar so :

Delphi-Quellcode:
   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;
MsgForm is ne Unit mit nem Formular drin die von der MainUnit aufegrufen wird.
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

SirThornberry 29. Okt 2004 20:59

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:
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;
zugreifen auf das Form kann man später mit:
Delphi-Quellcode:
TMsgForm(fListe.Items[Index]).reHist.Lines.Add(NeueNachricht);

goose33 31. Okt 2004 04:57

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

Sharky 31. Okt 2004 05:08

Re: Mehrere Fenster ??
 
Zitat:

Zitat von goose33
....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 ?....

Hai Matthias,
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;

goose33 31. Okt 2004 05:18

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

Sharky 31. Okt 2004 05:29

Re: Mehrere Fenster ??
 
Zitat:

Zitat von goose33
... mach da einen Label dazu(...

Uff... ;-)

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