ToolTip mit Schatten

  • Hallo,

    kennt jemand eine professionelle Lösung, wie man einen GUI mit Schatten erstellen kann? Die GUI hab ich schon fertig, aber das mit dem Schatten bekomme ich nicht genauso wie auf dem Bild hin:

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    • Offizieller Beitrag

    Ich hatte mal so einen erweiterten Tooltip gemacht (allerdings ohne Bild):

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon ; Trayicon erstmal verstecken
    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<IE.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEventMode für die GUI
    Opt('TrayOnEventMode', 1) ; OnEventMode für das Traymenü
    Opt('TrayMenuMode', 1) ; Standard-Traymenü entfernen

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

    $sTitle = 'ExTooltip'
    $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)

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

    $sSourceFile = @ScriptDir & '\beispieltext.txt'
    $sDestFile = @ScriptDir & '\beispieltext.html'
    $sIconPath = @SystemDir & '\shell32.dll'

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

    $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

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

    Global Const $WS_EX_COMPOSITED = 0x02000000 ; 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

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

    $hGui = GUICreate($sTitle, $Width, $Height, $Left, $Top, BitOR($WS_SIZEBOX, $WS_POPUPWINDOW, $WS_CLIPCHILDREN), BitOR($WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED)) ; Anzeigefenster erstellen
    GUISetBkColor($BgColor) ; Hintergrundfarbe setzen

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

    GUICtrlCreateObj($oIE, 10, 15, $Width-20, $Height-25) ; IE in die GUI integrieren
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    _IENavigate($oIE, $sDestFile) ; die HTML-Seite aufrufen

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

    $hLabel = GUICtrlCreateLabel('', 0, 0, $Width, $Height, Default, $GUI_WS_EX_PARENTDRAG) ; transparentes Label zum bewegen des Fensters

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

    $hContextMenu = GUICtrlCreateContextMenu($hLabel) ; 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

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

    TraySetClick(8)
    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

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

    $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

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

    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

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

    GUIRegisterMsg($WM_MOVE, '_ShadowMove') ; Funktion zum "Schatten verschieben" registrieren
    GUIRegisterMsg($WM_SIZE, '_ShadowSize') ; Funktion zum "Schatten anpassen" registrieren

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

    While True ; Endlosschleife
    Sleep(10) ; Prozessor entlasten
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Minimize()
    GUISetState(@SW_HIDE, $hShadow) ; Schatten verstecken
    GUISetState(@SW_HIDE, $hGui) ; GUI verstecken
    TraySetIcon($sIconPath, -24)
    TraySetState(1+4) ; Trayicon anzeigen
    EndFunc

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

    Func _Restore()
    GUISetState(@SW_SHOW, $hShadow) ; Schatten wiederherstellen
    GUISetState(@SW_SHOW, $hGui) ; GUI wiederherstellen
    TraySetState(2) ; Trayicon verstecken
    EndFunc

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

    Func _ShadowMove()
    Local $pos = WinGetPos($hGui) ; Fensterposition der GUI holen
    WinMove($hShadow, '', $pos[0]+6, $pos[1]+6) ; das Schatten-Fenster entsprechend verschieben
    EndFunc

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

    Func _ShadowSize()
    Local $pos = WinGetPos($hGui) ; Fensterdaten der GUI holen
    WinMove($hShadow, '', $pos[0]+6, $pos[1]+6, $pos[2], $pos[3]) ; das Schatten-Fenster entsprechend anpassen
    EndFunc

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

    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="#FFFFCC">' & @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

    [/autoit]


    Da gibt's auch einen Schatten. Basiert im Prinzip auf einer zweiten GUI, die man mit der ersten verschiebt.