![]() |
Ein Chat und beliebig viele Formulare
Hallo zusammen.... ich weiss noch recht wenig was die Programmierung mit Delphi betrifft... und versucher derzeit einen Chat zu programmieren... die Idee ist das ähnlich wie bei ICQ etc. für jeden neuen Chat mit einem Client auch ein neues Fenster geöffnet wird.
Mit diesem Quelltext :
Delphi-Quellcode:
Erzeuge ich mein Chatfenster sowie eine neue Clientkomponnete...
procedure TChat.NewForm(I : Integer; S : String); // I = Nummer des Forms S = Nummer des Clients
Var aForm: TForm; aRichedit : TRichEdit; aMemo : TMemo; aButton : TButton; aClientSocket : TClientSocket; begin aForm := TForm.Create(Self); with aForm do begin Name := 'Form'+IntToStr(I ); Width := 475; Height := 440; Caption := 'chat' + S; Visible := True; Form[i] := aForm; end; aRichEdit := TRichEdit.Create(Self); with aRichEdit do begin Name := 'RichEdit'+IntToStr(I ); Parent := aForm; Left := 1; Top := 0; Height := 241; Width := 465; RichEdit[i] := aRichEdit; end; aMemo := TMemo.Create(Self); with aMemo do begin Name := 'Memo'+IntToStr(I ); Parent := aForm; Left := 1; Top := 264; Height := 97; Width := 465; Memo[i] := aMemo; end; aClientSocket := TClientSocket.Create(Self); with aClientSocket do begin Name := 'ClientSocket'+IntToStr(I); Port := 6713; Host := '127.0.0.1'; ClientSocket[i] := aClientSocket; end; aButton := TButton.Create(Self); with aButton do begin Name := 'BtSend'+IntToStr(I ); Parent := aForm; Left := 416; Top := 376; Height := 30; Width := 49; OnClick := SocketSend; BtSend[i] := aButton; end; end; Das problem das ich habe ist nun das Onclickereignis auf den Button... Da all diese Komponneten ja erst existiern wenn ein chat zumm client aufgebaut wurde habe ich mir überlegt diese über ARRAYS anzusprechen.... das problem ist jetzt bloss das ich ja wissen muss vom welcher Button der OnClick kam damit ich weiss in welches ArrayFeld ich springen muss um dann den richtigen ClientSocket sowie die Memokomponnente auslesen zu können. Gibt es eine möglichkeit nicht nur die Komponnenten sondern auch eine Prozedur dynamisch zu erzeugen? Oder einen viel einfacheren Weg dynamisch neue Forms zu erzeugen ? Schon mal danke im voraus Holger |
Re: Ein Chat und beliebig viele Formulare
Hi !
Warum erzeugst Du dir das komplette Formular nicht zur Design-Zeit, nimmst es aus der Liste der automatisch erzeugten Formulare (Menü: Projekt-->Optionen-->Reiter: Formulare) raus und erzeugst es einfach, wenn Du es benötigst:
Delphi-Quellcode:
Das müsste doch dem entsprechen, was Du versuchst so super kompliziert zum machen.
try
NewForm := TNewForm.Create(self); NewForm.Show; finally NewForm.Free; end; Es könnte noch Probleme geben, wenn Du für jedes Form die gleiche Variable benutzt. Das kann man aber umgehen, indem Du dir ein Array machst:
Delphi-Quellcode:
Hoffe, das hilft dir weiter.
var
myForms : array[1..10] of TForm; Gruß, Helld |
Re: Ein Chat und beliebig viele Formulare
Hi,
Um es noch mehr ICQ- Like zu machen:
Delphi-Quellcode:
So kannst du beliebig viele Fenster öffnen. So mach ich das bei meinem ChatProgramm auch (an dieser Stelle möchte ich die Präsentation im Freeware - Bereich für irgendwann demnächst ankündigen...), da funktionierts ganz gut.
var
myForms: array of TMyChatForm; formCount: integer; {...} procedure MachNeuForm; begin inc(formCount); SetLength(myForms, formCount); myforms[formCount - 1]:= TMyChatForm.Create(self); myforms[formCount - 1].Show; end; Bis dann, S - tefano |
Re: Ein Chat und beliebig viele Formulare
Geht das auch irgendwie so, dass beim minimieren der Hauptform nicht alle Chatfenster mitminimiert werden?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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