Seite 2 von 3
Verfasst: 05.01.2007 03:00
von Gast
ja der schick es an alle die auf dem selben port liegen.
und wegen dem setgadgetcolor(), ich dachte mir auch das zu erseetzen, aber ich kann ja bei RichEditTextColor() nicht angeben welchen text er färben soll, oder doch ? weil bei setgadgetcolor() kann ich das ja angeben, aber dann färbt er ja den ganzen text.
was soll ich denn deiner meinung nach anstelle von editorgadget benutzen ?
Verfasst: 05.01.2007 03:19
von RaVeN99
OpenRichEdit(Parent WindowID.l, RichEdit control ID, x position from parent window.l, y position from parent window.l, width.l, height.l, text.s)
Das solltest du benutzen, da du sonst keinen richedit befehl anwenden kannst. In dem Fall solltest du es dann so machen, dass du bei jedem mal wo ein user schreibt die Farbe änderst, auch wenn man selbst schreibt. Verwendet ein user schwarz, dann setzt du den Text trotzdem auf schwarz. Wenn ich mich nicht täusche wird durch den "RichEditTextColor(farbe)" Befehl nur der nachfolgende Text farblich geändert.
Also hätten wir das quasi wie folgt:
User schreibt mit standardfarbe seinen text und sendet ihn ab. Bevor der text bei ihm im Fenster erscheint wird die textfarbe auf seine Farbe geändert (haben wir ja in einer Variable gespeichert). An alle anderen user wird zeitgleich - versteckt natürlich - der verwendete farbwert geschickt, in einer variable gespeichert (am besten innerhalb einer structure), und bevor der text ausgegeben wird, wird hier auch die textfarbe auf den von dem user der den text geschickt hat, verwendeten farbwert gesetzt. Antwortet nun ein user mit einem abweichenden farbwert, passiert genau das gleiche wie eben schon beschrieben: Garbe wird beim tippenden user geändert, Farbwert wird versteckt verschickt, textfarbe wird geändert, text wird ausgegeben.
Um Traffic zu sparen (ja, auch im LAN sollte mans tun

), kannste auch nur immer dann die Farbe schicken, wenn sie verändert wurde, ansonsten wird sie halt aus der variable gelesen. Zu beginn wird einfach bei jedem user eine Standardfarbe gesetzt.
*aufuhrgugg*
*textangugg*
Hmmm, könnte stimmen *hoff*
RaVeN
Verfasst: 05.01.2007 09:06
von PMTheQuick
Ich weiss, du hast dich anscheinend für RTF entschieden, aber falls du doch ein Editor-Gadget benutzen willst:
http://www.purearea.net/pb/CodeArchiv/G ... +Styles.pb
http://www.purearea.net/pb/CodeArchiv/G ... Styles2.pb
Gruss
PMTheQuick

Verfasst: 05.01.2007 13:47
von Gast
ok das problem mit dem text färben wäre dank euch gelöst, jetzt müsste ich nur noch wissen wie ich die farbe zu den anderen clienten sende ?
Verfasst: 05.01.2007 14:05
von sen-me
???
Aber einer muss doch der Server sein oder Oo
Verfasst: 05.01.2007 14:06
von Gast
ne da ich UDP benutze brauche ich kein server
Verfasst: 05.01.2007 14:14
von a14xerus
also zum senden der farbe.
wie schon angesprochen bracht man dafür wohl ein "protokoll".
meine protokolle laufen imemr gleich.
alle sachen die gesendet werden können werden mit nem "vorbefehl" gesendet
also schreibt einer zb was in das gadget und sendet es, schickt das programm folgendes ab :"/msg|"+getgadgettext(...)+"|"
änderst jemand die farbe zb das:
"/color|"+str(farbwert.l)+"|"
udn der empfänger untersucht mit findstring() [zb suche nach "/color"] ein vorkommen und wertet mit stringfield() [trennzeichen : "|" ] aus
Verfasst: 05.01.2007 14:20
von Gast
könntest du vllt ein codeschnipsel oder so estwas schreiben und hier zeigen ?
Vielleicht wird es mir verstädlicher. Aber trozdem danke
Verfasst: 05.01.2007 14:25
von Gast
also ich hab es so aber das geht ja nicht
Code: Alles auswählen
...
farbei = GetGadgetColor(2,#PB_Gadget_FrontColor)
R$ = Str(Red(farbei))
G$ = Str(Green(farbei))
B$ = Str(Blue(farbei))
...
SendUDPBroadcast(port,R$+","+G$+","+G$)
...
If sevent = 2
Text = Space(5000)
ReceiveNetworkData(clientid, @Text, 5000)
ReceiveNetworkData(clientid, @Name, 5000)
Editor_Select(e,1,1,e-1,-1)
Editor_Color(1, RGB(Val(R$),Val(G$),Val(B$)))
AddGadgetItem(1,e-1,Text)
EndIf
Verfasst: 05.01.2007 14:28
von a14xerus
Code: Alles auswählen
;----------- Senden
; [...]
Select EventGadget()
Case #btn_ok ;senden buton gedrückt
text.s = GetGadgetText(#btn_ok)
SetGadgetText(#txt_eingabe,"") ;textfeld leer machen
SendNetworkString(id,"/msg|"+text+"|") ; wie das mit der id bei serverlosem upd funktioniert weiß ich nicht
; [...]
EndSelect
;----------- empfangen
#ByteLenght = 32
Select NetworkClientEvent
Case #PB_NetworkEvent_Data
Debug "Data"
tmp$ = ""
Repeat ;meine art dateien zu empfangen (unbeschränkte größe - bis speicher überlauft :freak: )
*mem = AllocateMemory(#ByteLenght)
erg = ReceiveNetworkData(id,*mem,#ByteLenght)
t.s = PeekS(*mem,#ByteLenght)
tmp$ + t
FreeMemory(*mem)
Until erg <> #ByteLenght
Debug tmp$
If FindString(tmp$,"/msg") ;eine "/msg" empfangen
EMPFANG.s = StringField(tmp$,2,"|")
Debug EMPFANG
EndIf
EndSelect
ich hoffe du wirst aus diesen minischnipseln schlau
Maikel hat geschrieben:also ich hab es so aber das geht ja nicht
Code: Alles auswählen
...
farbei = GetGadgetColor(2,#PB_Gadget_FrontColor)
;R$ = Str(Red(farbei))
;G$ = Str(Green(farbei))
;B$ = Str(Blue(farbei))
...
;SendUDPBroadcast(port,R$+","+G$+","+B$)
sendupdbroadcast(port,"/color|"+farbei+"|")
...
If sevent = 2
Text = Space(5000)
ReceiveNetworkData(clientid, @Text, 5000)
ReceiveNetworkData(clientid, @Name, 5000)
Editor_Select(e,1,1,e-1,-1)
Editor_Color(1, RGB(Val(R$),Val(G$),Val(B$)))
AddGadgetItem(1,e-1,Text)
; beim empfangen dann uperpfüfen ob text "/color" enthält und dann ist die farbe im 2. stringfield vom textgespeichert
EndIf