Smileys im RichEdit

  • ? Das Bild wird bei _GUICtrlRichEdit_Appendtext an das Ende Ende eingefügt. Schau dir einfach die Funktionsbeschreibeungen an. Es gibt noch _GUICtrlRichEdit_insertText und um Die Schreibposition festzulegen _GUICtrlRichEdit_SetSel

  • Ja, also mit StringInStr will ich denn entschprechenden Text eben suchen, und der Gibt mir ja die Position an, wo das ist, also will ich dann mit der Information da das Bild einfügen!

    mfg. Jam00

  • Dann mach _GUICtrlRichEdit_SetSel in der RichEdit und dann _GUICtrlRichEdit_InsertText oder so ähnlich ;)

  • Ich habe es hinbekommen :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 414, 502, 303, 219)
    $Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 403, 361,BitOR($ES_WANTRETURN, $ES_SUNKEN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    _GUICtrlRichEdit_SetOLECallback($Edit)
    $Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91)
    $Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Text =_GUICtrlRichEdit_GetText($Edit)
    $Suche = StringInStr ($Text,":-)")
    If $Suche <> 0 Then
    _GUICtrlRichEdit_SetSel($Edit, $Suche-1,$Suche +2)
    ToolTip ($Suche)
    _GUICtrlRichEdit_InsertText($Edit,_RTF_GetBMPRTF(@ScriptDir & "\1.bmp"))
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Senden()
    EndSwitch
    WEnd
    Func _RTF_GetBMPRTF($BMPFile)
    If Not (StringRight($BMPFile,4) = ".bmp") Then Return SetError(1, 0, "")
    Local $Data = FileOpen($BMPFile, 16)
    If FileRead($Data, 2) <> "0x424D" Then Return SetError(1, 0, "")
    FileRead($Data, 12)
    Local $RTF = '{\rtf1{\pict\dibitmap ' & Hex(FileRead($Data)) & '}}'
    FileClose($Data)
    Return $RTF
    EndFunc ;==>_RTF_GetBMPRTF
    Func _Senden()
    Local $Read = GUICtrlRead ($Edit2)
    GUICtrlSetData ($Edit2,"")
    _GUICtrlRichEdit_AppendText($Edit,$Read)
    EndFunc

    [/autoit]

    EDIT:
    Irgendwie gibt es da Probleme wenn ich @CRLF nehme, SetSel zählt das anscheinen nicht mal zeichen, StringInStr aber anscheinnent schon!
    Kann man irgendwie die Zeilen Zählen?

    mfg. Jam00

    2 Mal editiert, zuletzt von Jam00 (31. Januar 2009 um 00:12)

  • Okay, hab es hinbekommen :thumbup: :thumbup: :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 414, 502, 303, 219)
    $Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 403, 361,BitOR($ES_WANTRETURN, $ES_SUNKEN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_Readonly))
    _GUICtrlRichEdit_SetOLECallback($Edit)
    $Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91,$WS_VSCROLL+$ES_SUNKEN)
    $Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
    Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button1]]
    GUISetAccelerators($Form1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Text =_GUICtrlRichEdit_GetText($Edit)
    $Suche = StringInStr ($Text,":-)")
    If $Suche <> 0 Then
    $Zeilen = StringSplit ($Text,@CR)
    $Suche2 = $Suche - $Zeilen[0] +2
    _GUICtrlRichEdit_SetSel($Edit, $Suche2 -1,$Suche2 +2)
    _GUICtrlRichEdit_InsertText($Edit,_RTF_GetBMPRTF(@ScriptDir & "\1.bmp"))
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Senden()
    EndSwitch
    WEnd
    Func _RTF_GetBMPRTF($BMPFile)
    If Not (StringRight($BMPFile,4) = ".bmp") Then Return SetError(1, 0, "")
    Local $Data = FileOpen($BMPFile, 16)
    If FileRead($Data, 2) <> "0x424D" Then Return SetError(1, 0, "")
    FileRead($Data, 12)
    Local $RTF = '{\rtf1{\pict\dibitmap ' & Hex(FileRead($Data)) & '}}'
    FileClose($Data)
    Return $RTF
    EndFunc ;==>_RTF_GetBMPRTF
    Func _Senden()
    Local $Read = GUICtrlRead ($Edit2)
    GUICtrlSetData ($Edit2,"")
    _GUICtrlRichEdit_AppendText($Edit,$Read & @CR)
    EndFunc

    [/autoit]

    mfg. Jam00

  • Kann ich es auch irgendwie hinbekommen, das der Text dableibt, und das Bild einfach über dem Text ist? Weil ich es so machen wollte, das die Smylies schon erscheinen wenn man es eingibt, aber dann fehlt ja der text! Oder gibt es irgendeine möglichkeit die Bilder auszulesen und wieder in Text umzuwandeln?

    Wie kann ich es machen, das ich die Bilder nicht bearbeiten kann? Also das man die Größe nicht verändern kann und so, $ES_READONLY geht nicht, dann kann man sie zwar nicht mehr löschen und auch keine dazumachen, aber man kann die Größe immernoch ändern:-(

    mfg. Jam00

  • Das, was du willst, geht sicher in c(++) , z.B. Miranda macht es ja auch. Ich weiß aber nicht, wie man das in AutoIt umsetzen könnte.

  • Und wie soll das mi HTML gehen? Hab da garkeine Ahnung! Also ich habe nichts gegen eine richedit! Kann ich denn den Text der richedit so auslesen das ich wenn da ein bild einfach da der dateinahme steht? Also wenn dadrin steht: "Hallo das ist ein Test :D " Dann ist das die Datei 2.bmp, kann ich das dann so auslesen: "Hallo das ist ein Test 3.bmp?

    mfg. Jam00

  • Nein. Wenn du es unbedingt haben willst, schu dir den Quellcode von z.B. TabSRMM in Miranda an. Möglicherweise findest du einen Weg, das in AutoIt umzusetzen, aber das ist echt ne Menge Arbeit.

    Wofür willst du das eigentlich als Texteingabe oder als Ausgabe? Für die Ausgabe ist HTML einfacher zu handhaben. ( _IECreateEmbedded, _IEWriteHTML ... )

  • Oki, damit werde ich mich dann irgendwann mal beschäftigen, aber ich denke, ich mache den Chat erstmal mit RichEdit!
    Dann hab ich da noch 2 Fragen:
    1. Wie kann ich den Stayle von den Sroolbalken ändern?

    2. Wie kann ich es verhindern, das die Bneutzer am bild in der RichEdit irgendas ändern können?

    mfg. Jam00

  • Keine Ahnung, wie das geht. Schau dir den Quellcode von einem Chat mit RichEdit an, dann findest du vielleicht was.