tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
689
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alcatraz Alcatraz ist offline Rookie
    Registriert seit
    Oct 2005
    Beiträge
    7
    Hi!

    Ich möchte einen Instant Messenger programmieren, und nun habe ich ein Problem um die Chatfenster, die ich mehrmals aufgerufen habe einzeln anzusteuern:

    Code :
    1
    2
    3
    
      frmMsg:=TfrmMsg.Create(frmMsg);
      frmMsg.Caption:=lbuseronline.items[lbuseronline.itemindex];
      frmMsg.show;

    Die frmMsg wird von einem frmMain aufgerufen, wo sich die Socket-Komponenten befinden.
    Ich möchte einzelne Felder der frmMsg ansteuern (ein redMain -> RichEdit).
    Die Felder, die sich bilden heissen "frmMsg_1", "frmMsg_2" und so weiter.

    Gibt es eine Möglichkeit diese dynamisch anzusteuern, um z.B. etwas ins RichEdit zu schreiben.

    Code :
    1
    
    'frmMsg_'+inttostr(1).redMain.lines.Append('TEST');

    Funktionniert nicht

    Danke im Voraus für Hilfe.
    Oder hat jemand eine andere Idee, wie man das realisieren könnte

    mfG;
    ~ The Alcatraz ~
     

  2. #2
    vop vop ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Beiträge
    676
    Hi

    Du kannst direkt auf die TComponent's eines Components zugreifen.

    Schau mal in der Hilfe unter TComponent.FindComponent
    TComponent.Components

    Sowie unter TForm.Parent (übergeordnetes Fenster)

    TApplication.MainForm (oberstes Fenster)

    Damit solltest Du weiter kommen

    Gruß vop
     

  3. #3
    Alcatraz Alcatraz ist offline Rookie
    Registriert seit
    Oct 2005
    Beiträge
    7
    das funktionniert alles nicht.
    ich glaube, du hast meine frage nicht richtig verstanden.
    Oder ich deine antwort nicht.

    Ich will auf eine Komponente auf einem Formular aufrufen, welches mehrere male kréiert wurde. Und zwar auf EINEM bestimmtenen dieser offenen formulare.

    mfG;
    ~ The Alcatraz ~
     

  4. #4
    vop vop ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Beiträge
    676
    Hi also ich habe dich so verstanden:

    Du hast (z.b.) drei Fenster erzeugt, die alle vom Typ TfrmMsg sind.

    Nun möchtest du bspw. vom zweiten Fenster den Wert einer seiner Komponenten ändern.

    RedMain.Lines.Append('irgendwas');

    Soweit klar.

    Was Dir nur noch fehlt ist der Zugriff auf das richtige Fenster. Diese sind allesamt Kindelemente des Hauptfensters Application.MainForm und damit (glaube ich) in der Komponentenliste dieses Fenster zu finden.

    Was Du brauchst ist eine Variable vom Typ TFrmMsg, die durch gezielte Auswahl auf das gewünschte Fenster zeigt.

    Dann kannst du es einfach ansprechen.

    Such doch mal nach dynamischer Fenstererzeugung oder so

    vop
     

  5. #5
    vop vop ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Beiträge
    676
    Ich glaube ich habe da eine gute Idee!

    Verwende doch ein Array in deinem Hauptfenster vom Typ TFrmMsg;

    MeineFenster : array [0..50] of TFrmMsg;

    Später erzeugst Du dynamisch mehrere Forms:

    MeineFenster[0]:=TFrmMsg.Create(.....

    MeineFenster[27]:=TFrmMsg.Create(.....

    anstelle von frmMsg:=....

    Dann kannst Du jederzeit auf das Fenster mit
    MeineFenster[ Index ].redMain.Lines.Append('blabla');

    zugreifen.

    Wenn Du dann noch einen Zähler hast, der dir sagt, wievielw Fenster du gerade hast, dann kannst Du prima in einer Schleife alle Fenster durchgehen.

    Und das mit den Components vergiß wieder.

    vop
     

  6. #6
    reyjr reyjr ist offline Mitglied
    Registriert seit
    Nov 2004
    Beiträge
    17
    Hey das klingt super

    Ich probier das mal.

    Vielen Dank erstmal.
    Ich halte dich am laufenden.

    mfG;
    ~ The Alcatraz ~
     

  7. #7
    Alcatraz Alcatraz ist offline Rookie
    Registriert seit
    Oct 2005
    Beiträge
    7
    Hm, das funktionniert doch nicht
    Er sagt was von "Undefinierter Bezeichner"...

    Was muss ich tun, dass das funktionniert?
     

  8. #8
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    Zitat Zitat von Alcatraz
    Gibt es eine Möglichkeit diese dynamisch anzusteuern, um z.B. etwas ins RichEdit zu schreiben.

    Code :
    1
    
    'frmMsg_'+inttostr(1).redMain.lines.Append('TEST');
    Ich habs weder ausprobiert noch kann ich sagen, ob es überhaupt funktionieren könnte. Normalerweise kann man aber auf Komponenten über FindComponent zugreifen. Wie das genau geht, steht in der Delphi-Hilfe.
    Genrell hätte ich aber auch gedacht, dass das dynamische Erzeugen funktioniert. Welches ist denn der undefinierte Bezeichner?

    lg Hellie
    Geändert von Hellie (31.10.05 um 17:42 Uhr)
     

  9. #9
    Alcatraz Alcatraz ist offline Rookie
    Registriert seit
    Oct 2005
    Beiträge
    7
    Hey!

    Code :
    1
    
    var MessageWindow: array[1..50] of TfrmMsg;
    Undefinierter Bezeichner ist angeblich "TfrmMsg".
    Wenn ich es LOKAL (in einer Prozedur) deklariere, funktionniert es. (Also: keine Fehlermeldung).

    Code :
    1
    2
    3
    4
    5
    6
    
    procedure TfrmMain.Test1Click(Sender: TObject);
      var MessageWindow: array[1..50] of TfrmMsg;
    begin
      MessageWindow[1]:=TfrmMsg.Create(frmMsg);
      MessageWindow[1].show;
    end;

    Jetzt so funktionniert es.

    Ich muss das "MessageWindow" aber global dekladieren, sonst funktionniert es nicht
    Was könnte das sein

    mfG;
    ~ The Alcatraz ~
    Geändert von Alcatraz (31.10.05 um 18:48 Uhr)
     

Ähnliche Themen

  1. [C#] Dynamische Buttons einzeln handeln
    Von Blackhawk50000 im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 13.10.08, 19:19
  2. Antworten: 4
    Letzter Beitrag: 23.03.08, 02:41
  3. Dynamische <Divs> => Dynamische Ereignisse!?
    Von Geflügel im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 05.09.07, 21:17
  4. Frames in PopUp einzeln ansteuern
    Von KoMtuR im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 06.01.04, 15:06
  5. MC's einzeln ansteuern
    Von erzwo im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 21.11.01, 14:15