AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Programminternem Chat

Ein Thema von 5etH · begonnen am 8. Dez 2008 · letzter Beitrag vom 8. Dez 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 14:05
das mit dem senden habe ich eben selbst bemerkt und geändert

aber ich brauch das einen client ohne geht das doch garnet

soll ich einfach statt self ... form2 übergeben ?
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 14:13
Zitat von 5etH:
das mit dem senden habe ich eben selbst bemerkt und geändert

aber ich brauch das einen client ohne geht das doch garnet

soll ich einfach statt self ... form2 übergeben ?
Dat Client-Ding ist ein abgespecktes Server-Ding, der Server kann alles was der Client kann (senden, empfangen) und etwas mehr also nicht notwendig

aber nicht form2 übergeben sondern du erzeugst ja mit TForm2.Create ein Form und die Referenz auf das Object!
also FormIndex := FormList.Add( TForm2.Create ) dann kannst du mit TForm2( FormList[ FormIndex ] ) weiterarbeiten (den genauen Zugriff findest du über die Online-Hilfe zu TObjectList, kein Delphi grad offen )

Dem Formular solltest du auch noch die Daten vom Partner übergeben (Steht im Recieve-Event Socket), damit du darauf auch antworten kannst.
Um zu antworten einfach aus dem Form2 den ServerSocket benutzen und an den übergeben Empfänger zurückschicken.

Sollten sich da mehrere Empfänger pro Raum/Private Nachricht aufhalten, dann musst du in dem Chat-Fenster auch eine ClientListe führen (analog zu der FormListe) und dann an alle senden.

cu

Oliver

EDIT:

Schau dir mal die Funktionsweise von Skype (o.ä.) an, das Haupt-Fenster zeigt dir nur die Buddy-Liste an, der Chat selbst geht über ein eigenes Chat-Fenster also so wie hier vorgeschlagen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 14:22
bei dem befehl sacht er mir das ich nicht genügend wirkliche parameter übergebe aber in der hilfe steht das er nicht mehr will als den ???

counter := FormList.Add(TForm2.Create);
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 14:44
FormList.Add will keine weiteren Parameter aber TForm2.Create braucht einen Parameter
Da kannst du nil nehmen, musst dich aber dann um das Entfernen des Forms selber kümmern, was in diesem Fall auch besser ist, weil das Form ja in der FormList enthalten ist.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 14:59
also ich kann immernoch nur eine nachricht schicken dann nixmehr ... nehme an das es mit der objectlist zusammenhängt ... wahrscheinlich kein abgleich

da werde ich mal jetzt genauer debuggen

habs aber totzdem nochmal hier hochgeladen falls dir ja was auffällt

aber auf jedenfall schonmal vielen vielen vielen dank das du dir so viel zeit für mich genommen hast

gruß manu
Angehängte Dateien
Dateityp: rar testchatter_156.rar (237,0 KB, 5x aufgerufen)
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 15:10
mir ist aufgefallen das in DATA onclientread das receivetext in zeile 69 leer ist ????

wie kann das denn sein ?
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 15:14
Du benutzt ja immer noch den ClientSocket im ChatForm.
Verleg den ganzen Verwaltungskram für den Chat nach DATA.pas (schon wegen der Trennung Anzeige, Verarbeitung)

Wofür brauchst du die Variable counter in der Klasse? Die Variable wird doch nur in der Function benutzt, kann also dort deklariert werden, und vor allem nicht in Form1 (s.o.). Wenn du wissen willst wieviele Forms in FormList sind, dann kannst du das über FormList.Count abfragen!
Und dann würde ich die Variable auch FormIndex nennen, weil in der Variable ja nix gezählt werden soll
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 15:15
Zitat von 5etH:
mir ist aufgefallen das in DATA onclientread das receivetext in zeile 69 leer ist ????

wie kann das denn sein ?
Weil du immer noch mit diesem komischen ClientSocket arbeitest! Mach den weg und lass alles zentral über den ServerSocket laufen!

EDIT:

Pro Chat-Fenster hast du ja sonst eine Verbindung stehen, was völlig überflüssig ist. Auch die Anzahl der Ports (jeder ClientSocket belegt einen) ist begrenzt, sind zwar ne Menge aber begrenzt. Ein ServerSocket -> Ein Port fertig.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 15:27
also meiner meinung nach brauche ich einen client weil ich sonst ja garkeine verbindung erstellen kann

aber nagut kannst mich ja überzeugen ... hab den jetzt komplett raus und jetzt siehts echt düster aus weil jetzt schickt er garnichts mehr

hier nochmal das aktuelle programm ohne Client
Angehängte Dateien
Dateityp: rar testchatter_116.rar (237,5 KB, 4x aufgerufen)
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

Re: Problem mit Programminternem Chat

  Alt 8. Dez 2008, 16:00
in der DATA.pas
Delphi-Quellcode:
procedure TDataModule3.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
Den Socket den du da bekommst, den übergib mit an das Form2 (ja, da musst du eine entsprechende Variable anlegen, damit das darin gespeichert werden kann), sagen wir mal MySock : TCustomWinSock;
In der Form2 kannst du dann mit MySock.SendText() die Nachricht schicken!

Der Code in der DATA.pas sieht grauenvoll aus.

Du erzeugst eine TForm2 (Zeile 43) und dann erzeugst du wieder eine TForm2 (Zeile 56) und die übergibst du dann???
Die erste Form wird angezeigt (Zeile 59) die zweite Form bleibt im Nirwana.

Form1.Counter wird gesetzt (Zeile 56) und dann nochmal einen hochgezählt (Zeile 61) ist aber für nix gut!

Über das Form1.StringGrid1 holst du dir die Anzahl und hoffst, dass das auch mit FormList passt ( Zeile 65-68 )!

Es ist alles sehr konfus ...

Also mach TForm2 als Klasse mit einem Memo1 und einem MySocket : TCustomWinSocket.
Das Form1.StringGrid1 kannst du eigentlich vergessen (oder wenn du magst als Anzeige für den Inhalt vom FormList nehmen).

Die Überprüfung kannst du dann wie folgt machen (FormList gehört in DATA.pas und nicht nach Form1)
Delphi-Quellcode:
for
  i := 0 to
  FormList.Count - 1
do
  if
    Socket.RemoteAddress = TForm2( FormList[ i ] ).MySocket.RemoteAddress
  then
    TForm2( FormList[ i ] ).Memo1.Lines.Add( Socket.ReceiveText );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz