Что нового

Окна, Диалоги Установить параметры DROPSHADOW для окна

musicstashall

Знающий
Сообщения
322
Репутация
7
Всем добра. Мне подкинули код AutoHotkey , который устанавливает параметры тени для окон (больше, меньше), хотелось бы попробовать на Autoit реализовать. Кому не лень, плиз, набросайте код по образцу:

AutoHotkey:
#NoEnv
CS_DROPSHADOW := 0x00020000
ClassStyle := GetGuiClassStyle()
Gui, New, +hwndHGUI
SetGuiClassStyle(HGUI, ClassStyle | CS_DROPSHADOW)
Gui, Show, x100 y100 w250 h200, Test 1
SetGuiClassStyle(HGUI, ClassStyle)
Gui, New
Gui, Show, x400 y100 w250 h200, Test 2
Gui, New, +hwndHGUI
SetGuiClassStyle(HGUI, ClassStyle | CS_DROPSHADOW)
Gui, Show, x700 y100 w250 h200, Test 3
SetGuiClassStyle(HGUI, ClassStyle)
Return

GuiClose:
GuiEscape:
ExitApp

GetGuiClassStyle() {
   Gui, GetGuiClassStyleGUI:Add, Text
   Module := DllCall("GetModuleHandle", "Ptr", 0, "UPtr")
   VarSetCapacity(WNDCLASS, A_PtrSize * 10, 0)
   ClassStyle := DllCall("GetClassInfo", "Ptr", Module, "Str", "AutoHotkeyGUI", "Ptr", &WNDCLASS, "UInt")
                 ? NumGet(WNDCLASS, "Int")
                 : ""
   Gui, GetGuiClassStyleGUI:Destroy
   Return ClassStyle
}

SetGuiClassStyle(HGUI, Style) {
   Return DllCall("SetClassLong" . (A_PtrSize = 8 ? "Ptr" : ""), "Ptr", HGUI, "Int", -26, "Ptr", Style, "UInt")
}
Сообщение автоматически объединено:

Из всего заключил только следующее:
Код:
_WinAPI_SetClassLongEx($hWnd, $GCL_STYLE, BitOR(_WinAPI_GetClassLongEx($hWnd, $GCL_STYLE), 0x00020000))


Но я не замечаю ничего из ожидаемого
 

Вложения

  • _b87f4344b5f6c658b188821afbc1aee7.png
    _b87f4344b5f6c658b188821afbc1aee7.png
    559 КБ · Просмотры: 9
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
с официального форума
Код:
Func _GuiSetDropShadow($hWnd, $iTurnOnDropshadow = 1)
    If Not IsHWnd($hWnd) Or WinGetProcess($hWnd) <> @AutoItPID Then Return SetError(1, 0, 0)
    Local $aRes, $OldStyle
    $aRes = DllCall("user32.dll", "int", "SystemParametersInfo", "int", 0x1024, "int", 0, "int*", 0, "int", 0) ;$SPI_GETDROPSHADOW
    If @error Or Not IsArray($aRes) Then Return SetError(2, 0, 0)
    If Not $aRes[3] Then ;if 'Show shadows under menus' option not set, try activating it.
        If $iTurnOnDropshadow Then ;turn on drop shadows
            $aRes = DllCall("user32.dll", "int", "SystemParametersInfo", "int", 0x1025, "int", 0, "int", True, "int", 0) ;$SPI_SETDROPSHADOW
            If @error Or Not IsArray($aRes) Or (IsArray($aRes) And $aRes[0] <> 1) Then
                Return SetError(3, 0, 0)
            EndIf
        Else
            Return SetError(4, 0, 0)
        EndIf
    EndIf
    $OldStyle = _WinAPI_GetClassLongEx($hWnd, -26) ;$GCL_STYLE
    If @error Then Return SetError(5, 0, 0)
    If _WinAPI_SetClassLongEx($hWnd, -26, BitOR($OldStyle, 0x00020000)) = $OldStyle Then ;$CS_DROPSHADOW
        Return 1
    Else
        Return SetError(6, 0, 0)
    EndIf
EndFunc   ;==>_GuiSetDropShadow

использовал для создания тени окнам со стилем POPUP
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
использовал для создания тени окнам со стилем POPUP

Странно, я как раз этот метод и пробую, не получаю никаких результатов. Вот же, тоже самое:

Код:
Func _GuiSetDropShadow($hwnd, $fDisrespectUser = True)
    If Not IsHWnd($hwnd) Then Return SetError(1, 1, 0)
    
    If Not IsDeclared("SPI_GETDROPSHADOW") Then Local Const $SPI_GETDROPSHADOW = 0x1024
    If Not IsDeclared("SPI_SETDROPSHADOW") Then Local Const $SPI_SETDROPSHADOW = 0x1025
    If Not IsDeclared("CS_DROPSHADOW") Then Local Const $CS_DROPSHADOW = 0x00020000
    If Not IsDeclared("GCL_STYLE") Then Local Const $GCL_STYLE = -26
    
    Local $aResult = _WinAPI_SystemParametersInfo($SPI_GETDROPSHADOW, 0, 0, 0)
    ;if 'Show shadows under menus' option not set, try activating it.
    If Not $aResult And $fDisrespectUser Then
    ;turn on drop shadows
        $aResult = _WinAPI_SystemParametersInfo($SPI_SETDROPSHADOW, 0, True, 0)
        If @error Then Return 
    EndIf
    
    _WinAPI_SetClassLongEx($hWnd, $GCL_STYLE, BitOR(_WinAPI_GetClassLongEx($hWnd, $GCL_STYLE), $CS_DROPSHADOW))
EndFunc  ;==>_GuiSetDropShadow


Причем, если я выполняю это _WinAPI_SystemParametersInfo($SPI_SETDROPSHADOW, 0, True, 0), то у меня все тени отключаются
Сообщение автоматически объединено:

А, всё понял. К PopUp окнам добавляется тень. Разобрался. Но вопрос в другом, я бы хотел менять параметры тени — шире/уже, как это делают на AutoHotkey, на скринах видно.
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
$Form1 = GUICreate("Form1")
_GuiSetDropShadow($Form1)
GUISetState()

Сообщение автоматически объединено:

Разобрался. Но вопрос в другом, я бы хотел менять параметры тени — шире/уже, как это делают на AutoHotkey, на скринах видно.
не увидел шире-уже.
скачал автохоткей, скомпилировал код
второе и третье окно имеют одинакового размера тень
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    15.7 КБ · Просмотры: 5
Верх