Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] GUICtrlCreateRadio - как задать прозрачный фон? (http://forum.oszone.net/showthread.php?t=178554)

Centrinar 18-06-2010 19:54 1437008

GUICtrlCreateRadio - как задать прозрачный фон?
 
GUICtrlCreateRadio ("Тест", 10, 55, 90, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

Не работает...

Creat0R 18-06-2010 23:40 1437128

Только так:

Код:

#include <GUIConstantsEx.au3>

GUICreate("Transparent Radio Button", 265, 210, -1, -1, -1, 0x00000218)
GUISetBkColor(0x0)

; Make a group.
$Group = GUICtrlCreateGroup("", 10, 10, 245, 170)

; Radio buttons.
$aRadio1 = _GUICtrlCreateRadio("Radio 1", 20, 30, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0x00FF00) ; Green
$aRadio2 = _GUICtrlCreateRadio("Radio 2", 20, 50, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0xFFFFFF) ; White
$aRadio3 = _GUICtrlCreateRadio("Radio 3", 20, 70, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0xFF0000) ; Red
$aRadio4 = _GUICtrlCreateRadio("Radio 4", 20, 90, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0x0000FF) ; Blue
$aRadio5 = _GUICtrlCreateRadio("Radio 5", 20, 110, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0xCCCCCC) ; Gray
$aRadio6 = _GUICtrlCreateRadio("Radio 6", 20, 130, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0xCC00FF) ; Purple
$aRadio7 = _GUICtrlCreateRadio("Radio 7", 20, 150, 80, 15, $GUI_BKCOLOR_TRANSPARENT, 0x00CCFF) ; Green-Blue

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aRadio1[0] To $aRadio7[0], $aRadio1[1] To $aRadio7[1]
            For $i = 1 To 7
                $vRadio = Execute("$aRadio" & $i & "[0]")

                GUICtrlSetState($vRadio, $GUI_UNCHECKED)

                If $vRadio = $nMsg - 1 Or $vRadio = $nMsg Then
                    GUICtrlSetState($vRadio, $GUI_CHECKED)
                EndIf
            Next
    EndSwitch
Wend

Func _GUICtrlCreateRadio($sText, $iLeft, $iTop, $iLength, $iHieght, $sBackColor = "" , $sTextColor = "")
    Local $aRadioID[2]

    $aRadioID[0] = GUICtrlCreateRadio("", $iLeft, $iTop, 12, 12)
    $aRadioID[1] = GUICtrlCreateLabel($sText, $iLeft + 15, $iTop, $iLength - 15, $iHieght)

    If $sTextColor <> "" And $aRadioID[1] Then
        GUICtrlSetColor($aRadioID[1], $sTextColor)
    EndIf

    If $sBackColor <> "" And $aRadioID[1] Then
        GUICtrlSetBkColor($aRadioID[1], $sBackColor)
    EndIf

    Return $aRadioID
EndFunc


FlatX007 19-06-2010 01:21 1437195

Цитата:

Цитата Centrinar
GUICtrlCreateRadio ("Тест", 10, 55, 90, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
Не работает... »

http://forum.oszone.net/post-1415918-4.html
Не находите ли сходство в функциях =)

Centrinar 21-06-2010 15:38 1438693

Код:

...
$radio_1 = _GUICtrlCreateRadio("Тест", 10, 25, 90, 20, $GUI_BKCOLOR_TRANSPARENT, 0xFFFFFF)
 GUICtrlSetState($radio_1, $GUI_CHECKED)
...

Он не хочет ставить $radio_1 по умолчанию!?

Creat0R 21-06-2010 16:24 1438728

Цитата:

Цитата Centrinar
Он не хочет ставить $radio_1 по умолчанию »

А если заглянуть в функцию (или хотябы в цикл где она обрабатывается)? она возвращает массив, где [0] это идентификатор от Radio, а [1] идентификатор Label'а, соответственно нужно использовать первый элемент:

Код:

$radio_1 = _GUICtrlCreateRadio("Тест", 10, 25, 90, 20, $GUI_BKCOLOR_TRANSPARENT, 0xFFFFFF)
GUICtrlSetState($radio_1[0], $GUI_CHECKED)

Можно конечно поменять их местами в функции:

Код:

Func _GUICtrlCreateRadio($sText, $iLeft, $iTop, $iLength, $iHieght, $sBackColor = "", $sTextColor = "")
    Local $aRadioID[2]

    $aRadioID[0] = GUICtrlCreateLabel($sText, $iLeft + 15, $iTop, $iLength - 15, $iHieght)
    $aRadioID[1] = GUICtrlCreateRadio("", $iLeft, $iTop, 12, 12)

    If $sTextColor <> "" And $aRadioID[0] Then
        GUICtrlSetColor($aRadioID[0], $sTextColor)
    EndIf

    If $sBackColor <> "" And $aRadioID[0] Then
        GUICtrlSetBkColor($aRadioID[0], $sBackColor)
    EndIf

    Return $aRadioID
EndFunc

тогда можно будет использовать -1 как во встроенных функциях.

Centrinar 21-06-2010 18:46 1438832

Создаю окно, задаю цвет прозрачный, задаю фоновую картинку в итоге вогруг $aRadio появляються черные пятна
Код:

GUISetBkColor($GUI_BKCOLOR_TRANSPARENT)
        GUICtrlCreatePic(@ScriptDir & "\test.jpg", 0, 0, 320, 260, $WS_CLIPSIBLINGS)


Creat0R 21-06-2010 22:08 1438950

Цитата:

Цитата Centrinar
в итоге вогруг $aRadio появляються черные пятна
Код: »

Могу ещё предложить отключать WinXP стилизацию для элементов, в принципе из за этого такие проблемы с прозрачностью...

Код:

#include <GUIConstants.au3>
#include <WindowsConstants.au3>

GUICreate("My GUI", 400, 330)

GUICtrlCreatePic(@WindowsDir & "\Web\Wallpaper\Windows XP.jpg", 0, 0, 400, 330, $WS_CLIPSIBLINGS)

_GUICtrlCreateRadio("Radio 1", 10, 10, 120, 15, $GUI_BKCOLOR_TRANSPARENT, 0xFFFFFF)

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Func _GUICtrlCreateRadio($sText, $iLeft, $iTop, $iWidth, $iHeight, $sBackColor = "", $sTextColor = "")
    Local $nID = GUICtrlCreateRadio($sText, $iLeft, $iTop, $iWidth, $iHeight)
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($nID), "wstr", "", "wstr", "")

    If $sTextColor <> "" And $nID Then
        GUICtrlSetColor($nID, $sTextColor)
    EndIf

    If $sBackColor <> "" And $nID Then
        GUICtrlSetBkColor($nID, $sBackColor)
    EndIf

    Return $nID
EndFunc



Время: 17:19.

Время: 17:19.
© OSzone.net 2001-