Control für verschiedenfarbige Texte

  • Hallo Community,

    ich programmiere zwar schon viele Jahre, aber erst seit ein paar Tagen mit AutoIT. Ich suchte nach einer geeigneten Sprache, um zu lernen, wie ich Daten per TCP versenden und empfangen kann. So kam ich auf AutoIT mit dem TCP UDF.

    Um zu verstehen, wie es geht, habe ich einen Chat programmiert. Er besteht aus einem Server und einem Client und läuft schon gut als reiner Text-Chat. Also nutzen wir ihn im Büro, damit wir nicht für jede Kleinigkeit eine E-Mail schicken müssen. Und schon kamen Wünsche von meinen Kolleginnen und Kollegen, die ich spontan nicht erfüllen könnte.

    • Jeder Benutzer soll im Chat-Fenster eine eigene Textfarbe haben.
    • Es sollen Smylies mölich sein

    Da ich die Chat-Nachrichten in einem normalen Edit-Control anzeige kann ich so wie ich es verstehe die Textfarbe nur für den ganzen Text festlegen und nicht unterschiedliche Farben für unterschiedliche Textabschnitte. Und natürlich kann ich auch keine Grafiken anzeigen.
    Eine schöne Lösung wäre z.B. ein Control, das HTML wiedergeben kann. Sodass ich mit

    Code
    <font color=red>Dies ist der Text</font>

    eine rote Textzeile produzieren kann. Und natürlich liessen sich dann auch Smylies in Form von kleinen Grafiken einbinden.

    Gibt es sowas, oder hat jemand eine andere Idee, wie ich das umsetzen könnte?

    Bin für jeden Tipp dankbar!

    Gruß
    Nils

  • @TheLuBa: Danke, das scheint genau das richtige zu sein. Leider ist keine Dokumentation dabei, aber da wurschtel ich mich schon durch.

    MoD: Sorry, Thread im falschen Forum aufgemacht, bitte verschieben

  • Du könntest Captcha eine PN schreiben - er hat nämlich einen richtig tollen Chat geschrieben, er wird dir wahrscheinlich helfen können :)

    Denn sein Chat hat Smileys, farbige Texte und Private Nachrichten.

    Ansonst google mal ein bisschen oder warte auf weitere Antworten ;)

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Also, du hast grundsätzlich 2 Möglichkeiten, um verschiedene Textformatierungen in einem Control darzustellen:

    • RichEdits
    • Embedded-IE


    Bei einer eingebetteten IE-Instanz (Embedded-IE) kannst du praktisch nur darstellen, und musst bei jeder Veränderung praktisch alles neu laden/schreiben. Dafür funktioniert alles recht einfach per HTML-Formatierung (Kannst natürlich einen eigenen Wrapper basteln).
    Ein RichEdit wäre auch eine schöne Alternative. Dies ist ein Edit-Feld, wie es auch Word verwendet, sprich du kannst praktisch jede Textformatierung nutzen, die das Rich Text Format (RTF) unterstützt.

    Schau' dir einfach beides mal an und entscheide dann. ;)

    lg chess

  • Oder du nimmst die Chatbox UDF von Oskar
    Dort ist zwar auch keine Dokumentation dabei, aber ein Beispiel, dass eigentlich alles erklärt, ansonsten kannst du auch hier nachfragen, schlagen wird dich deswegen keiner ;)
    Diese Chatbox UDF kann unter anderem

    • Smileys
    • Farben / Fettschrift
    • versch. Schriftgrößen
    • Ein kleines Fenster um die Smileys einfach auszuwählen
  • Erstmal vielen Dank für die wirklich tollen Anregungen. Ich freue mich festzustellen, dass einem hier wirklich geholfen wird.

    Nun ist es aber so, dass ich den Chat prinzipiell nur schreibe, um AutoIT und TCP-Kommunikation zu erlernen. Daher hatte ich nicht vor, auf fertige Chat-Boxen zurück zu greifen. Bitte nicht falsch verstehen, ich finde es super, dass es Leute gibt, die sowas schreiben und kostenlos anbieten. Aber ich will ja was lernen.

    Ich habe jetzt mal ein RichEdit eingebaut, das war ja nicht schwierig und klappt auch. Leider kenne ich mich mit RTF nicht wirklich aus. Wie muss ich denn jetzt eine Zeile formatieren, damit sie z.B. Fett dargestellt wird. Herr Google hat mich bisher im Stich gelassen. Bestimmt habe ich falsch gesucht :(
    Ein paar Tipps oder ein Beispiel bei dem ich abgucken kann, wäre super.

    Gruß
    Nils

  • Doch. Schau dir einfach mal die Hilfe zu _GUICtrlRichEdit_SetCharAttributes() an. :)
    Wenn nichts selektiert ist, wird der als nächstes eingefügte Text die Attribute bekommen.

    [autoit]


    _GUICtrlRichEdit_SetCharAttributes($hRichEdit,"+bo")
    _GUICtrlRichEdit_InsertText($hRichEdit,"Ich bin fett!" & @CRLF)
    _GUICtrlRichEdit_SetCharAttributes($hRichEdit,"-bo")
    _GUICtrlRichEdit_InsertText($hRichEdit,"Ich bin nicht mehr fett!" & @CRLF)

    [/autoit]

    Probier den Code einfach mal aus, dann siehst du, was ich meine! :D

    lg chess

  • OK, irgendwas mache falsch... 2 Probleme habe ich:

    • wenn ich mittels
      Code
      _GUICtrlRichEdit_SetCharColor($ediChat, "990000" )
      _GUICtrlRichEdit_AppendText($ediChat, $msg & @CR)

      neuen Text an meinen bisherigen anfüge, ändert sich leider die Farbe des gesamten Textes und nicht nur die neu eingefügte Zeile.

    • Wie sind diese Zahlenwerte zu verstehen? Ich hatte gefofft es wäre "RRGGBB", aber das ist es nicht. Gibt es da eine einfache Funktion, um das umzurechnen?


    Sicher sind das Fragen, die ihr schon 1000 mal gelesen habt, aber irgendwie werde ich mit der SuFu nicht recht fündig.
    Ich hoffe nochmal auf eure Hilfe...

    Gruß
    Nils

  • Zu der 2:
    Die Farben werden entweder als Dezimal oder Hex angegeben.

    0xFF0000 für Rot
    0x00FF00 Für Grün
    0x0000FF Für Blau

    ODER

    16711680 für Rot (entspricht in Hex 0xFF0000)
    65280 für Grün (entspricht in Hex 0x00FF00)
    255 für Blau (entspricht in Hex 0x0000FF)

  • Danke Make-Grafik, darauf hätte ich nun wirklich selber kommen können *MitDerFlachenHandVorDieStirnHau*
    Das eigentliche Problem, ist damit aber leider noch nicht gelöst...

    edit: Mit Attributen wie fett oder kursiv klappt es wie erwartet, nur mit der Farbe leider nicht

    Einmal editiert, zuletzt von Harry.Fox (30. November 2012 um 17:43)