chat

Anfängerfragen zum Programmieren mit PureBasic.
Gast

Beitrag 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 ?
RaVeN99
Beiträge: 310
Registriert: 29.08.2004 15:26
Wohnort: Weiden i.d.OPF
Kontaktdaten:

Beitrag 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
AMD Athlon64 3000+, 1024MB DDR-RAM, Geforce 8600GT, WinXP SP2, DirectX 9.0c, PureBasic 3.94
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag 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 ;)
Gast

Beitrag 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 ?
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

???
Aber einer muss doch der Server sein oder Oo
Bild
Gast

Beitrag von Gast »

ne da ich UDP benutze brauche ich kein server
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Gast

Beitrag von Gast »

könntest du vllt ein codeschnipsel oder so estwas schreiben und hier zeigen ?
Vielleicht wird es mir verstädlicher. Aber trozdem danke
Gast

Beitrag 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
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Antworten