Entwickler-Ecke

Internet / Netzwerk - TSocket und Application.processmessages


Jann1k - Do 26.04.07 22:47
Titel: TSocket und Application.processmessages
Also, in einem Spiel von mir, dass man per Netzwerk spielen soll, kann man mittleweile ähnlich wie in wc3, cs o.ä. per Enter-Taste ein Eingabefeld öffnen, Nachrichten eingeben und per Enter an den anderen Spieler wegschicken.

Dieser soll dann die Nachricht für ein paar Sekunden(mit einem label) angezeigt kriegen, nach Ablauf der Zeit soll das label verschwinden.

Das Problem ist nur, dass wenn der 2. Spieler das Label noch sieht, und der erste Spieler etwas macht (einheit bewegen o.ä.), dass dann der befehl, der über das netzwerk gesendet wird (einehit von a nach b bewegen) nciht bearbeitet wird.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure tmain.settext(S:string);
 begin
 mchatlog.lines.add('Spieler 2: '+s);
 mtext.caption:=S;
 mtext.visible:=true;
 delay(5000);
 mtext.visible:=false;
 mtext.caption:='';;
end


mtext ist das label, in dem die textausgabe erfolgen soll.
Die prozedur delay sieht so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure tmain.delay(time:integer);
var start:int64;
begin
    start:=gettickcount;
    while gettickcount-start<time do
    application.processmessages;
end;


falsch weiterer code gewüscnht wird, liefer ich den nach. das probnlem tritt übrigens auch auf, wenn man zweri nachrichten schnell hintereinander sendet.

ich könnte als mögl lösung, weitere aktionen des spielers unterrbinden, wenn er eine nachricht schreibt, aber das wäre doch eine ziemlich unschöne lösung


Narses - Do 26.04.07 22:55

Moin!

Mal ganz blöd: warum kein Timer? :P ;)

cu
Narses


Jann1k - Do 26.04.07 22:58

hmmmm, timer wäre echt ne idee, werdich mal über wochenende ausprobieren, dake schonmal für die idee, falls jmnd noch weitere hat, sind die natürlich auch willkommen


Narses - Do 26.04.07 23:03

Moin!

user profile iconJann1k hat folgendes geschrieben:
hmmmm, timer wäre echt ne idee, werdich mal über wochenende ausprobieren, dake schonmal für die idee,

Was gibt´s denn da "groß" auszuprobieren? ;)

- Nachricht kommt rein
- Label.Caption setzen
- Visible setzen
- Timer starten 5sec

---[Timerereignis]----
- Timer stoppen
- Visible setzen

fertig. :D

user profile iconJann1k hat folgendes geschrieben:
falls jmnd noch weitere hat, sind die natürlich auch willkommen

Die Application.ProcessMessages-Schleife ist keine so grandiose Idee, wenn du eine ereignisorientierte Anwendung mit den Socket-Komponenten schreibst... :? Du kannst hier (ShowMessage-Problem) [http://www.delphi-library.de/topic_65487.html] und hier (Dateiauswahl-Dialog) [http://www.delphi-library.de/topic_66706.html] etwas mehr darüber nachlesen. ;)

cu
Narses


Jann1k - Do 26.04.07 23:06

wenn ich was in einem progrqamm änder ist das immer ausprobieren ^^