chat
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 ?
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 ?
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
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

*aufuhrgugg*
*textangugg*
Hmmm, könnte stimmen *hoff*

RaVeN
AMD Athlon64 3000+, 1024MB DDR-RAM, Geforce 8600GT, WinXP SP2, DirectX 9.0c, PureBasic 3.94
-
- Beiträge: 630
- Registriert: 05.05.2005 19:06
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
http://www.purearea.net/pb/CodeArchiv/G ... Styles2.pb
Gruss
PMTheQuick

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
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
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
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
Maikel hat geschrieben:also ich hab es so aber das geht ja nichtCode: 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