- Offizieller Beitrag
Wir hatten ja in "Hilfe & Unterstützung" bereits das Thema mit dem erweiterten Tooltip.
Jetzt habe ich mir gedacht, dass es doch ganz nett wäre, wenn man dort auch ein HTML-Dokument anzeigen lassen könnte. Das hätte den Vorteil, dass man nicht auf die eingeschränkte Ausgabe per Editfeld angewiesen ist. Außerdem kann man dann auch Hyperlinks dort anzeigen lassen.
Naja, lange Rede...ich habe das Script noch etwas verbessert.
Und es gibt jetzt eine Funktion: "_Txt2HTML", mit der man eine Textdatei nach HTML wandeln lassen kann.
Diese Funktion bietet außerdem die Möglichkeit bestimmte Schlüsselwörter automatisch als Hyperlinks erstellen zu lassen. Dazu muss man in der Funktion das Array "$aReplace" entsprechend anpassen.
Noch nicht behobene Fehler:
- das Fenster kann nur mit Klick auf den oberen Rand verschoben werden.
Ich kriege den "embedded IE" nicht in den Vordergrund, also vor das transparente Label, deshalb ist das Label jetzt nur 10 Pixel hoch.
Spoiler anzeigen
#NoTrayIcon ; Trayicon erstmal verstecken
#include<WindowsConstants.au3>
#include<GUIConstantsEx.au3>
#include<IE.au3>
Opt('GUIOnEventMode', 1) ; OnEventMode für die GUI
Opt('TrayOnEventMode', 1) ; OnEventMode für das Traymenü
Opt('TrayMenuMode', 1) ; Standard-Traymenü entfernen
$sTitle = 'HTML Tooltip'
$BgColor = 0xFFFFDF ; Hintergrundfarbe
$ShColor = 0x666666 ; Schattenfarbe
$Width = 500 ; Breite des Fensters
$Height = 300 ; Höhe des Fensters
$Left = Int(@DesktopWidth/2-$Width/2) ; Horizontale Position (zentriert)
$Top = Int(@DesktopHeight/2-$Height/2) ; Vertikale Position (zentriert)
$sSourceFile = @ScriptDir & '\beispieltext.txt'
$sDestFile = @ScriptDir & '\beispieltext.html'
$sHTML = _Txt2HTML($sSourceFile) ; Den Text aus der Txt-Datei in HTML umwandeln
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen($sDestFile, 2) ; Zieldatei zum schreiben öffnen
FileWrite($hFile, $sHTML) ; HTML in Datei schreiben
FileClose($hFile) ; Datei schließen
Global Const $WS_EX_COMPOSITED = 0x2000000 ; Windows XP: Paints all descendants of a window in bottom-to-top painting order using double-buffering.
[/autoit] [autoit][/autoit] [autoit]$oIE = _IECreateEmbedded() ; Einen "eingebetteten" IE erstellen
If @error Then Exit MsgBox(16+262144, $sTitle, 'Objekt konnte nicht erstellt werden!') ; Falls dabei ein Fehler auftrat, Programm beenden
$hGui = GUICreate($sTitle, $Width, $Height, $Left, $Top, BitOR($WS_SIZEBOX, $WS_POPUPWINDOW), BitOR($WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED)) ; Anzeigefenster erstellen
GUISetBkColor($BgColor) ; Hintergrundfarbe setzen
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PrimeDown') ; zum bewegen des Fensters
GUICtrlCreateObj($oIE, 10, 15, $Width-20, $Height-25) ; IE in die GUI integrieren
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
_IENavigate($oIE, $sDestFile) ; die HTML-Seite aufrufen
$hContextMenu = GUICtrlCreateContextMenu() ; Kontextmenü erstellen
GUICtrlCreateMenuItem('Minimieren', $hContextMenu) ; Minimieren-Eintrag erstellen
GUICtrlSetOnEvent(-1, '_Minimize') ; dem Eintrag eine Funktion zuweisen
GUICtrlCreateMenuItem('Beenden', $hContextMenu) ; Beenden-Eintrag erstellen
GUICtrlSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen
TrayCreateItem('Wiederherstellen') ; Traymenüeintrag erstellen
TrayItemSetOnEvent(-1, '_Restore') ; dem Eintrag eine Funktion zuweisen
TrayCreateItem('Beenden') ; Traymenüeintrag erstellen
TrayItemSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen
$hShadow = GUICreate('Shadow', $Width, $Height, $Left, $Top, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)) ; Schattenfenster erzeugen
GUISetBkColor($ShColor) ; Farbe des Schattens setzen
WinSetTrans($hShadow, '', 128) ; Transparenz des Schattens einstellen
_ShadowSize() ; Position und Größe des Schatten-Fensters setzen
GUISetState(@SW_SHOW, $hShadow) ; Schatten anzeigen
GUISetState(@SW_SHOW, $hGui) ; GUI anzeigen
WinSetOnTop($hShadow, '', 1) ; Schatten immer im Vordergrund
WinSetOnTop($hGui, '', 1) ; GUI immer im Vordergrund
GUIRegisterMsg($WM_MOVE, '_ShadowMove') ; Funktion zum "Schatten verschieben" registrieren
GUIRegisterMsg($WM_SIZE, '_ShadowSize') ; Funktion zum "Schatten anpassen" registrieren
While True ; Endlosschleife
Sleep(10) ; Prozessor entlasten
WEnd
Func _End()
Exit
EndFunc
Func _PrimeDown() ; Funktion von AspirinJunkie (http://www.autoit.de)
Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Local $WinPos = WinGetPos(@GUI_WinHandle)
Local $MPos = MouseGetPos()
$DifX = $MPos[0] - $WinPos[0]
$DifY = $MPos[1] - $WinPos[1]
While $MouseData[2]
$MPos = MouseGetPos()
$WinPos = WinGetPos(@GUI_WinHandle)
If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
EndIf
Sleep(15)
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
WEnd
EndFunc
Func _Minimize()
GUISetState(@SW_HIDE, $hShadow) ; Schatten verstecken
GUISetState(@SW_HIDE, $hGui) ; GUI verstecken
TraySetState(1) ; Trayicon anzeigen
EndFunc
Func _Restore()
GUISetState(@SW_SHOW, $hShadow) ; Schatten wiederherstellen
GUISetState(@SW_SHOW, $hGui) ; GUI wiederherstellen
TraySetState(2) ; Trayicon verstecken
EndFunc
Func _ShadowMove()
Local $pos = WinGetPos($hGui) ; Fensterposition der GUI holen
WinMove($hShadow, '', $pos[0]+6, $pos[1]+6) ; das Schatten-Fenster entsprechend verschieben
EndFunc
Func _ShadowSize()
Local $pos = WinGetPos($hGui) ; Fensterposition der GUI holen
WinMove($hShadow, '', $pos[0]+6, $pos[1]+6, $pos[2], $pos[3]) ; das Schatten-Fenster entsprechend verschieben
EndFunc
Func _Txt2HTML($sFilename)
If Not FileExists($sFilename) Then Return SetError(1,0,0)
Local $aSource = StringSplit(FileRead($sFilename), @CRLF, 1)
If Not IsArray($aSource) Then Return SetError(2,0,0)
; Das Array $aReplace enthält die Schlüsselwörter und die dazugehörigen URLs
; Diese Schlüsselwörter werden im generierten HTML-Dokument als Links erstellt
Local $aReplace[5][2] = [ _
['AutoIt v3','www.autoitscript.com'], _
['Windows','de.wikipedia.org/wiki/Microsoft_Windows'], _
['Skriptsprache','de.wikipedia.org/wiki/Skriptsprache'], _
['PCs','de.wikipedia.org/wiki/Personal_Computer'], _
['VBScript','de.wikipedia.org/wiki/Visual_Basic_Script'] _
]
Local $HTMLTitle = StringMid($sFilename, StringInStr($sFilename, '\', 0, -1)+1)
Local $sDest = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' & @CRLF & '<html>' & @CRLF
$sDest &= '<head>' & @CRLF & '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">' & @CRLF
$sDest &= '<title>' & $HTMLTitle & '</title>' & @CRLF & '</head>' & @CRLF & '<body bgcolor="#FFFFEE">' & @CRLF
; In der folgenden Schleife werden die einzelnen Zeilen entweder als normaler Absatz
; oder als Überschrift erstellt.
; Wenn eine Zeile als Überschrift erstellt werden soll, darf die Zeile am Ende
; keines der folgenden Zeichen enthalten: ",.:!?" oder horizontales "Whitespace"
For $i = 1 To $aSource[0]
If $aSource[$i] = '' Then
ContinueLoop
ElseIf StringRegExp($aSource[$i], ',|\.|\:|!|\?|\h+\z') Then
$sDest &= '<p align="justify">' & $aSource[$i] & '</p>' & @CRLF
Else
If $i = 1 Then
$sDest &= '<h1>' & $aSource[$i] & '</h1>' & @CRLF
Else
$sDest &= '<h3>' & $aSource[$i] & '</h3>' & @CRLF
EndIf
EndIf
Next
$sDest &= '</body>' & @CRLF & '</html>' & @CRLF
For $i = 0 To UBound($aReplace)-1
$sDest = StringReplace($sDest, $aReplace[$i][0], '<a href="http://' & $aReplace[$i][1] & '" target="_blank">' & $aReplace[$i][0] & '</a>')
Next
Return $sDest
EndFunc
Zum ausprobieren habe ich zusätzlich zum Script noch einen Beispieltext angehängt. So könnt ihr sehen, wie der Text vorher und nachher aussieht.
Der Beispieltext muss sich dabei im gleichen Verzeichnis wie das Script befinden!
Edit: Achso, ja...Screenshot:
FACEbotv1.au3
Edit2: Fenster kann jetzt auf der gesamten Fläche mit der gedrückten linken Maustaste verschoben werden. Außerdem gibt es nun ein Resizing, das heißt: man kann das Fenster beliebig in der Größe verändern/ziehen.