Autor Beitrag
T.I.L.L.I.
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 04.11.05 19:23 
Hallo,
ich bin dabei einen Messenger zu schreiben.

Nun steht ich vor dem Problem, dass ich nicht weiß, wie ich mit den ganzen einzelnen Chatfenstern umgehen soll.

Ich habe ein Form, welches ein solches Fenster enthält, davon erzeugte Instanzen (mit Application.CreateForm(TChatwindow,ChatWindow);) entstehen zwar, aber wie, soll ich weiter mit denen verfahren?
Mein Problem: alle damit erzeugten Fenster sind vom gleichen Namen :( wie soll ich also DAS spezielle fenster ansprechen, wenn DER Chatpartner gerade eine Nachricht gesendet hat?

das Ganze evtl. in einem Array, ich habe schon ein Userarray, wo alle Chatpartner deren ip, status, usw. drinne stehen, dazu könnte man ein array mit TForm's machen, aber wie???

Bitte helft mir,
danke,
T.I.L.L.I.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 04.11.05 20:09 
Gib doch den Forms den Name des Chatpartners, UIN, etc.
Dann kannst du sie wieder ansprechen.

Ein Array of TForm ist wahrscheinlich das beste.
Und für Name, IP, Status, etc. könntest du einen record verwenden.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
T.I.L.L.I. Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 04.11.05 20:28 
wie bekomme ich aber Form's (TChatFenster) erzeugt und direkt in das array of TForm rein?
also wie bekomme ich die formulare in laufzeit da reinerzeugt?

chatfensterarray[x] := ???
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 04.11.05 20:32 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  MyForms: Array[1..10] of TForm;
begin
  MyForms[1]      := TForm.Create;
  MyForms[1].Name := UserName;
  // ... //
end;

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
T.I.L.L.I. Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 04.11.05 22:51 
vielen Dank, das geht schonmal, aber neue Probleme, ich glaube die sind noch viel schlimmer :|

also ich erstelle mein ChatFenster beim Click auf den Buddy mit
Zitat:
Form1.Messengerframe1.ChatWindows[L_tag] := TChatwindow.CreateParented(GetDesktopWindow);


das geht und ich setze einige Einstellungen dann, über einen Thread, das funktioniert auch, so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure chatthread.SetChatWindowProperties(FChatPartnerHandle : Integer);
begin
  with Form1.Messengerframe1.ChatWindows[FChatPartnerHandle] do
  begin
  Form1.Messengerframe1.ChatWindows[FChatPartnerHandle].ParentWindow := GetDesktopWindow;
  Form1.Messengerframe1.ChatWindows[FChatPartnerHandle].Caption := FChatPartnerNick + ' - Unterhaltung';
//  Form1.Messengerframe1.ChatWindows[FChatPartnerHandle].IP2.Caption := FChatPartnerIP;
  Form1.Messengerframe1.ChatWindows[FChatPartnerHandle].Tag := FChatPartnerTag;
  Form1.Messengerframe1.ChatWindows[FChatPartnerHandle].Visible := True;
  Form1.Messengerframe1.ChatWindows[FChatPartnerHandle].BringToFront;
  end;
end;

die ausgeklammerte Zeile macht das erste Problem, ich kann nicht auf das Label "IP2" zugreifen, da meckert der Debugger, obwohl dieses Label dort aber definitiv existiert, aber eigentlich gibtz wärend dem Compilieren ja das Form noch garnet, wie kann ich das jetzt anders machen?

und ein viel größeres Problem kommt dann auf, wenn das Fenster dann da ist:
- es fehlen Komponenten, wie eine von zwei memo-feldern, eine groupbox, Labels,... anderes wiederrum ist da!!!
- beim maximieren (evtl. bei anderen vorgängen auch) kommt es zu einem Fehler von EOutOfResources, Fehler beim Erstellen des Fenster-Gerätekontextes :|
kann mir darunter garnix vorstellen, im Board über die Suche hab ich was von übermäßig vielen GDI-Objekten gelesen, das ist aber nicht der fall, liegen bei ~100

Bitte kann mir noch einmal einer weiterhelfen?

thx
T.I.L.L.I.