• Moin, und erstmal ein Dickes Lob für deine UDF!
    Sooo, also ich habe sie in benutzung und würde auch gerne damit weiterarbeiten aber mir tut sich da ein Problem auf, und zwar benötige ich das ich Texte an den vorhanden anhängen kann. Wenn ich jetzt mit
    _Chatbox_SetData($item, $text, 0xffffff, 2) einen Text setzte, erscheint er ja in einer neuen Zeile... Gibt es da eine Möglichkeit dieses so abzuändern, das es auch möglich ist ein neues Stück Text an das vorhandene anzusetzten.

    Und gibt es noch die Möglichkeit das die Vertikale Scrollbar irgendwie verschwindet?!?

    Aber sonst ist sie echt Gut, gerade das mit dem Html Codes find ich Klasse!


    Grüsse!

    • Offizieller Beitrag

    Das mit der vertikalen Scrollbar ist relativ einfach zu lösen. Einfach die Funktion _Chatbox_Create() gegen diese hier austauschen:

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ; Function Name: _Chatbox_Create($hWnd, $iLeft, $iTop, $iWidth, $iHeight[, $iBgColor][, $sLogfile][, $sImgPath][, $sScrollbar])
    ; Description:: erstellt eine Chatbox
    ; Parameter(s): $hWnd = Handle des Fensters, auf dem die Box erstellt werden soll
    ; $iLeft, $iTop = Position der Box
    ; $iWidth, $iHeight = Größe der Box
    ; $iBgColor = Hintergrundfarbe der Box
    ; $sLogfile = Logfile-Dateiname (inkl. Pfad). Ergebnis ist eine HTML-Datei.
    ; $sImgPath = Verzeichnispfad zu den Smiley-PNGs, Standard: @ScriptDir & '\png\'
    ; $sScrollbar = Vertikale Scrollbar anzeigen?
    ; auto = nur wenn benötigt
    ; yes = ja, immer
    ; no = nie anzeigen
    ; Requirement(s): #include <IE.au3>
    ; Return Value(s): bei Erfolg = Array, für den Aufruf der anderen Funktionen
    ; bei Fehler = Rückgabe: Null
    ; und @error = 1 (embedded IE konnte nicht erstellt werden)
    ; 2 (das GUI-Objekt für den IE konnte nicht erstellt werden)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _Chatbox_Create($hWnd, $iLeft, $iTop, $iWidth, $iHeight, $iBgColor = 0xffffff, $sLogfile = '', $sImgPath = '', $sScrollbar = 'auto')
    Local $ahChat[5], $sTempFile, $oBody
    $ahChat[0] = _IECreateEmbedded()
    If @error Then Return SetError(1, 0, 0)
    GUISwitch($hWnd)
    $ahChat[1] = GUICtrlCreateObj($ahChat[0], $iLeft, $iTop, $iWidth, $iHeight)
    GUICtrlSetResizing(-1, 1)
    If $ahChat[1] = 0 Then Return SetError(2, 0, 0)
    If Not FileExists($sImgPath) Then $sImgPath = @ScriptDir & '\png\'
    If StringRight($sImgPath, 1) <> '\' Then $sImgPath &= '\'
    $ahChat[2] = '<html>' & @CRLF & '<head>' & @CRLF & '<title>Chatbox</title>' & @CRLF & '<style type="text/css">body { background-color:#' & Hex($iBgColor, 6)
    $ahChat[2] &= '; padding:0px; margin:4px; } p { margin:4px; }</style>' & @CRLF & '</head>' & @CRLF
    $ahChat[2] &= '<body scroll="' & $sScrollbar & '">' & @CRLF & '</body>' & @CRLF & '</html>'
    $sTempFile = @TempDir & '\ChatboxTemp.html'
    $hFile = FileOpen($sTempFile, 2)
    FileWrite($hFile, $ahChat[2])
    FileClose($hFile)
    _IENavigate($ahChat[0], $sTempFile)
    $ahChat[3] = ''
    If $sLogfile <> '' Then
    If FileCopy($sTempFile, $sLogfile, 9) Then $ahChat[3] = $sLogfile
    EndIf
    FileDelete($sTempFile)
    $ahChat[4] = $sImgPath
    Return $ahChat
    EndFunc ;==>_Chatbox_Create

    [/autoit]

    Das mit dem Text anhängen hatte ich auch schon fertig (dachte ich), bis ich feststellen musste, das _IEDocInsertHTML() immer einen Zeilenumbruch hinzufügt, obwohl da keiner im HTML ist.
    Im Logfile wird es (mit der neuen Funktion) richtig geschrieben, aber im Embedded IE wird es mit Zeilenumbruch dargestellt. :huh:
    Alternative wäre, dass ich das HTML-Dokument auf Platte schreibe und _IENavigate benutze, aber dann flackert das, weil die Seite neu geladen wird (schon ausprobiert). :S

  • Schade das es mit dem Text anhängen nicht so einfach geht, dann muß ich mir irgendwas einfallen lassen :S
    Aber danke für die Funktion, das hilft mir auch schon etwas weiter!

    Grüsse!

  • Im prinzip wird eine Dos Eingabe im Text-Gui simuliert. Ich hatte schon ein normales Edit und das Richedit probiert, lief auch alles gut aber ich benötige auch noch einige Farben. Deswegen kam ich auch zu deiner UDF :D
    Es erscheint ein bunter Text 'root@sos:~# ' und dahinter soll Buchstabe für Buchstabe ein Befehl auftauchen 'startx' ist dieser Fertig soll erst der Zeilenumbruch kommen. Ich habe schon einige Funktionen dafür geschrieben und die laufen auch alle, sogar mit Tastaturklicken. Ich kriege das eben nur mit deiner Chatbox nicht hin, weil ich keinen Text anfügen kann... Sonst muß ich das wieder mit dem Richedit lösen, so ganz Trist und ohne schöne Farben :S
    :D

    Grüsse!

    • Offizieller Beitrag

    Mit dieser geänderten Version von _Chatbox_SetData musst Du am Ende ein @crlf mitschicken, damit ein Zeilenumbruch stattfindet (habe <p> und </p> weggelassen).
    Damit ist das generierte HTML-Dokument zwar nicht ganz regelkonform, aber es wird im IE trotzdem richtig angezeigt und für Deinen Zweck reicht es. In der UDF (Post #1) werde ich es aber so lassen wie vorher.

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ; Function Name: _Chatbox_SetData($ahChat, $sMsg[, $iColor][, $iSize][, $iImgSize])
    ; Description:: Funktion zum schreiben in die Chatbox
    ; Parameter(s): $ahChat = das Rückgabe-Array von _Chatbox_Create()
    ; $sMsg = die Textzeile, die in die Chatbox geschrieben werden soll
    ; $iColor = Schriftfarbe (Standard = 0x000000, schwarz)
    ; $iSize = Größe der Schrift (Werte von 1 bis 7, Standard = 2)
    ; $iImgSize = Größe der Smilies (Standard = 19 pixel)
    ; Requirement(s): #include <IE.au3>
    ; Return Value(s): bei Erfolg = 1
    ; bei Fehler = 0
    ; und @error = 1 ($ahChat ist kein Array)
    ; 2 ($ahChat besitzt nicht die richtigen Array-Dimensionen)
    ; 3 (Logfile konnte nicht geschrieben werden)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _Chatbox_SetData(ByRef $ahChat, $sMsg, $iColor = 0x000000, $iSize = 2, $iImgSize = 19, $fAppend = False)
    If Not IsArray($ahChat) Then Return SetError(1, 0, 0)
    If UBound($ahChat) <> 5 Then Return SetError(2, 0, 0)
    Local $hFile, $oBody
    $sMsg = StringRegExpReplace($sMsg, '(?s)<.*?>', '')
    $sMsg = StringRegExpReplace($sMsg, '(?s)(?i)\[hr\]', '<hr>')
    $sMsg = StringRegExpReplace($sMsg, '(?s)(?i)\[(\/*b|\/*i|\/*u)\]', '<$1>')
    $sMsg = StringRegExpReplace($sMsg, '(?s)(?i)\[(color=.+?)\](.*?)\[\/(color)\]', '<font $1>$2</font>')
    $sMsg = StringRegExpReplace($sMsg, '(?s)(?i)\[(size=.+?)\](.*?)\[\/(size)\]', '<font $1>$2</font>')
    $sMsg = '<font color="#' & Hex($iColor, 6) & '" size="' & $iSize & '">' & $sMsg & '</font>'
    $sMsg = StringReplace($sMsg, @CRLF, '<br>')
    $sMsg = _Chatbox_ConvertSmilies($sMsg, $ahChat[4], $iImgSize)
    $sMsg = _Chatbox_ConvertMailto($sMsg)
    $sMsg = _Chatbox_ConvertHyperlink($sMsg)
    $oBody = _IETagNameGetCollection($ahChat[0], 'body', 0)
    _IEDocInsertHTML($oBody, $sMsg)
    $oBody.scrollTop = 0x5FFFFFFF
    If $ahChat[3] <> '' Then
    $ahChat[2] = StringRegExpReplace($ahChat[2], '(?s)(.+<body.+?>.*)(</body>.+</html>)', '$1' & $sMsg & @CRLF & '$2')
    $hFile = FileOpen($ahChat[3], 2)
    If $hFile = -1 Then Return SetError(3, 0, 0)
    FileWrite($hFile, $ahChat[2])
    FileClose($hFile)
    EndIf
    Return 1
    EndFunc ;==>_Chatbox_SetData

    [/autoit]
  • Kurze frage,
    Was is den die mindestversion vom IE die dafür laufen muss bzw installiert sein muss?

  • Nochmal dank an Oscar auch wenn es schon älter ist - auf IE9 gibt es keine Probleme.

    Noch ein Vorschlag zur Verbesserung (den ich mir eingebaut habe) wäre die Auswahl der Schriftart.
    Das "News Times Roman" passte bei mir nicht zur Ausgabe, ich habe mir deshalb ein

    $sFont = "Arial"

    mit eingbaut:

    Code
    Func _Chatbox_SetData(ByRef $ahChat, $sMsg, $iColor = 0x000000, $iSize = 2, $sFont = "Arial", $iImgSize = 19, $fAppend = False)

    und

    Code
    $sMsg = '<p><font color="#' & Hex($iColor, 6) & '" size="' & $iSize &  '" face="' & $sFont & '">' & $sMsg & '</font></p>'

    geändert.

  • Mhh ich hatte nun noch Ärger wenn ich das Fenster minimiert und dann wieder hergestellt habe. Allein mit $WS_CHILPCHILDREN lies sich das nicht beheben (abgeshene das dann meine Gruppenboxen in der GUI bescheiden aussahen).
    Habe ich auch mehr aus Zufall beim Testen bemerkt.

    Behoben habe ich es in dem ich mir eine weitere Funktion geschrieben habe:

    Code
    Func _Chatbox_Update(ByRef $ahChat)
    	_IENavigate($ahChat[0], $ahChat[3])
    EndFunc   ;==>_Chatbox_Update

    mit der ich die verwendete HTML Seite einfach einmal neu lade .... wenn ich nun noch herausfinde wie ich das fenster wieder ans Ende Scrollen lassen kann .....

    Aber ich nehme damit wohl richtig an das ich die Verbindung zur Temp-Datei verliere? Wenn ich versuche auf die zu refreshen / reloaden / navigieren gibt es einen Fehler

    Ansonsten noch mal Dank an Oscar - meine Textausgaben sind so sehr viel schöner geworden :)

    Einmal editiert, zuletzt von XanXan (14. Mai 2011 um 22:49)

  • Mal ne kurz frage ^^

    [autoit]

    $Edit1 = _Chatbox_Create($Main_GUI, 0, 80, 657, 417, 0xffffaa)
    GUICtrlSetState ( -1,$GUI_Hide)
    Sleep(2000)
    GUICtrlSetState ( -1,$GUI_Show)

    [/autoit]


    Geht ja.
    Aber

    [autoit]

    $Edit1 = _Chatbox_Create($Main_GUI, 0, 80, 657, 417, 0xffffaa)
    GUICtrlSetState ( $Edit1,$GUI_Hide)
    Sleep(2000)
    GUICtrlSetState ( $Edit1,$GUI_Show)

    [/autoit]

    geht bei mir grad nicht^^ kannd as irgendwer bestätigen oder nochbesser wiederlegen ^^

  • Das geht nicht, weil die Funktion keine ControlID zurückgibt. Sie gibt soweit ich sehen kann, ein Array zurück, dass verschiedene Daten über das IE Objekt und das Objekt Control enthält. In Array Element 1 müsste die ControlID für das Objekt sein.