GUI mit Schatten

  • ich bin mir niht ganz sicher aber das müsste mit einer dllcall der uxtheme dll realisierbar sein. aber welche funktion der dll das genau ist weiß cih leider auch nicht genau

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Bitte, habe gerade eine Funktion gemacht:

    Spoiler anzeigen
    [autoit]

    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<SendMessage.au3>

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

    $GUI = GUICreate("Drop Shadow", 200, 200, -1, -1)
    _WinSetShadow($GUI)
    $chkShadow = GUICtrlCreateCheckbox("Shadow", 10, 10, 100, 20)
    GUICtrlSetState(-1, 1)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $chkShadow
    If BitAND(GUICtrlRead($chkShadow), 1)=1 Then
    _WinSetShadow($GUI)
    Else
    _WinSetShadow($GUI, '', False)
    EndIf
    EndSwitch
    WEnd

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

    #include<SendMessage.au3>
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinSetShadow
    ; Description ...: Sets the Dropshadow for a window
    ; Syntax.........: _WinSetShadow($hWnd, $sText='', $fShadow=True)
    ; Parameters ....: $hWnd - Handle or title of window
    ; $sText - [optional] Text of window
    ; $fShadow - [optional] Enable or disable shadow (default: True)
    ; Return values .: Success - 1
    ; Failure - 0, sets @error to:
    ; |1 - no window or OS version too low
    ; |2 - error on fetching ClassLong
    ; |3 - error on setting ClassLong
    ; |4 - other error
    ; Author ........: ProgAndy
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ; ===============================================================================================================================
    Func _WinSetShadow($hWnd, $sText='', $fShadow=True)
    ; Author: ProgAndy
    $hWnd = WinGetHandle($hWnd, $sText)
    If Not IsHWnd($hWnd) Or @OSBuild < 2600 Then Return SetError(1,0,0)
    Local $res = DllCall("User32.dll", "ULONG", "GetClassLong", "hwnd", $hWnd, "int", -26)
    If @error Then Return SetError(2,@error,0)
    Local $style = BitOR($res[0], 0x00020000)
    If Not $fShadow Then $style = BitAND($style, BitNOT(0x00020000))
    $res = DllCall("user32.dll", "ulong", "SetClassLong", "hwnd", $hWnd, "int", -26, "long", $style)
    If @error Then Return SetError(3,@error,0)
    ;~ If $res[0] Then _SendMessage($hWnd, 0x48004000+51, 0, 0)
    If $res[0] Then
    If BitAND(WinGetState($hWnd), 2)=2 Then
    WinSetState($hWnd, "", @SW_HIDE)
    WinSetState($hWnd, "", @SW_SHOW)
    EndIf
    Return 1
    EndIf
    Return SetError(4,0,0)
    EndFunc

    [/autoit]
  • funktioniert leider nicht ?( zuminstest nicht auf einer win7 64

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Ich glaube, dass das nicht mit Aero funktionier,. auf WinXP geht es jedenfalls. Was passiert, wenn du Aero abschaltest?

  • Unter Vista x86 funktioniert es jedenfalls auch nicht. (Oder der Schatten ist so schwach, dass ich ihn nicht sehe :D)
    Aero ist hier abgeschaltet. UAC auch, und ich bin als Admin angemeldet wenn das von Interesse ist.
    Und damit ich dir nicht meine kompletten Daten runterrattern muss, bekommst du ne DxDiag.txt von mir :D+

    ich erhalte übrigens @error 0 von der Funktion.