- Offizieller Beitrag
Mach es doch einfach so, dass Du den übertragenen String testest. Wenn keine Leerzeichen enthalten sind, dann nach x Zeichen splitten und getrennt mit _Chatbox_SetData in die Chatbox schreiben.
Mach es doch einfach so, dass Du den übertragenen String testest. Wenn keine Leerzeichen enthalten sind, dann nach x Zeichen splitten und getrennt mit _Chatbox_SetData in die Chatbox schreiben.
Sitmmt, das könnte ich mal ausprobieren.
Vielleicht lasse ich es auch so.
Hätte ja sein können, dass man das einfach
wie mit GuiCtrlSetStyle() oder so einstellen
kann.
Danke!
MfG
qixx
Es gibt jetzt eine neue Version (siehe Post #1). Ein paar Bugs wollten entfernt werden.
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!
Das mit der vertikalen Scrollbar ist relativ einfach zu lösen. Einfach die Funktion _Chatbox_Create() gegen diese hier austauschen:
;===============================================================================
; 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
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.
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).
Schade das es mit dem Text anhängen nicht so einfach geht, dann muß ich mir irgendwas einfallen lassen
Aber danke für die Funktion, das hilft mir auch schon etwas weiter!
Grüsse!
Was möchtest Du denn erreichen? Vielleicht kann man das anders lösen...
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
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
Grüsse!
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.
;===============================================================================
; 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
Du bist Super
Danke!
Es gibt eine neue Version (Post #1).
Die Funktion _Chatbox_ReadHTML() war fehlerhaft (der falsche IE-Befehl).
Kurze frage,
Was is den die mindestversion vom IE die dafür laufen muss bzw installiert sein muss?
Schwierige Frage...
Also unter IE6.x läuft es jedenfalls.
Ob's auch mit noch älteren Versionen funktioniert weiß ich nicht.
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:
Func _Chatbox_SetData(ByRef $ahChat, $sMsg, $iColor = 0x000000, $iSize = 2, $sFont = "Arial", $iImgSize = 19, $fAppend = False)
und
$sMsg = '<p><font color="#' & Hex($iColor, 6) & '" size="' & $iSize & '" face="' & $sFont & '">' & $sMsg & '</font></p>'
geändert.
Die Idee ist gut. Habe sie in die UDF integriert. Danke!
Zusätzlich habe ich dann gleich auch noch den BB-Code "face" eingebaut. So kann man auch innerhalb einer Zeile eine andere Schriftart auswählen.
Neue Version in Post #1.
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:
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
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)
Geht ja.
Aber
$Edit1 = _Chatbox_Create($Main_GUI, 0, 80, 657, 417, 0xffffaa)
GUICtrlSetState ( $Edit1,$GUI_Hide)
Sleep(2000)
GUICtrlSetState ( $Edit1,$GUI_Show)
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.
ah scheiße THX^^
War mal wieder zu einfach als das man es selber sieht^^
Wie wäre es mit einer Admin Funktion ?:D