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 23:03
Moin!
Jann1k 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
Jann1k 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