ViSiToR

Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору sproxy 03:29 29-11-2008 Цитата: есть ли решение создания нормальных кнопко с иконками | Есть, решении есть несколько. Например создать кнопку из Lable'ов, для отражения контура выделения можно использовать библиотеку GUISetOnHover. Но есть метод через API, он вроде попроще, но меньше возможностей (хотя...): Код: #include <GUIConstants.au3> Global Const $ILC_MASK = 0x0001 Global Const $ILC_COLOR32 = 0x0020 Global Const $BCM_FIRST = 0x1600 Global Const $BCM_SETIMAGELIST = $BCM_FIRST + 0x0002 Global Const $BUTTON_IMAGELIST_ALIGN_LEFT = 0 Global Const $BUTTON_IMAGELIST_ALIGN_RIGHT = 1 Global Const $BUTTON_IMAGELIST_ALIGN_TOP = 2 Global Const $BUTTON_IMAGELIST_ALIGN_BOTTOM = 3 Global Const $BUTTON_IMAGELIST_ALIGN_CENTER = 4 ; Doesn't draw text $hGUI = GUICreate("Button With Icons + Text") $btn1 = _GUICtrlCreateButton("Button1", 10, 10, 90, 25, -1, -1, "shell32.dll", 6, $BUTTON_IMAGELIST_ALIGN_LEFT) $btn2 = _GUICtrlCreateButton("Button2", 10, 50, 90, 25, -1, -1, "shell32.dll", 21, $BUTTON_IMAGELIST_ALIGN_RIGHT) $btn3 = _GUICtrlCreateButton("Button3", 10, 90, 50, 50, -1, -1, "shell32.dll", 32, $BUTTON_IMAGELIST_ALIGN_TOP) $btn4 = _GUICtrlCreateButton("Button4", 10, 140, 50, 50, -1, -1, "shell32.dll", 14, $BUTTON_IMAGELIST_ALIGN_BOTTOM) GUISetState() While GUIGetMsg() <> $GUI_EVENT_CLOSE WEnd Exit Func _GUICtrlCreateButton($sText,$iLeft,$iTop,$iWidth=-1,$iHeight=-1,$nStyle=-1,$nExStyle=-1,$sIconFile='', $nIconID=0, $nAlign=-1) Local $nID = GUICtrlCreateButton($sText, $iLeft, $iTop, $iWidth, $iHeight, $nStyle, $nExStyle) If $sIconFile = '' Then Return $nID Local $hIL = ImageList_Create(16, 16, BitOr($ILC_MASK, $ILC_COLOR32), 0, 1) Local $stIcon = DllStructCreate("int") ExtractIconEx($sIconFile, $nIconID, DllStructGetPtr($stIcon), 0, 1) ImageList_AddIcon($hIL, DllStructGetData($stIcon, 1)) DestroyIcon(DllStructGetData($stIcon, 1)) Local $stBIL = DllStructCreate("dword;int[4];uint") DllStructSetData($stBIL, 1, $hIL) DllStructSetData($stBIL, 2, 1, 1) DllStructSetData($stBIL, 2, 1, 2) DllStructSetData($stBIL, 2, 1, 3) DllStructSetData($stBIL, 2, 1, 4) DllStructSetData($stBIL, 3, $nAlign) GUICtrlSendMsg($nID, $BCM_SETIMAGELIST, 0, DllStructGetPtr($stBIL)) Return $nID EndFunc Func ImageList_Create($nImageWidth, $nImageHeight, $nFlags, $nInitial, $nGrow) Local $hImageList = DllCall('comctl32.dll', 'hwnd', 'ImageList_Create', _ 'int', $nImageWidth, _ 'int', $nImageHeight, _ 'int', $nFlags, _ 'int', $nInitial, _ 'int', $nGrow) Return $hImageList[0] EndFunc Func ImageList_AddIcon($hIml, $hIcon) Local $nIndex = DllCall('comctl32.dll', 'int', 'ImageList_AddIcon', _ 'hwnd', $hIml, _ 'hwnd', $hIcon) Return $nIndex[0] EndFunc Func ImageList_Destroy($hIml) Local $bResult = DllCall('comctl32.dll', 'int', 'ImageList_Destroy', _ 'hwnd', $hIml) Return $bResult[0] EndFunc Func ExtractIconEx($sIconFile, $nIconID, $ptrIconLarge, $ptrIconSmall, $nIcons) Local $nCount = DllCall('shell32.dll', 'int', 'ExtractIconEx', _ 'str', $sIconFile, _ 'int', $nIconID, _ 'ptr', $ptrIconLarge, _ 'ptr', $ptrIconSmall, _ 'int', $nIcons) Return $nCount[0] EndFunc Func DestroyIcon($hIcon) Local $bResult = DllCall('user32.dll', 'int', 'DestroyIcon', _ 'hwnd', $hIcon) Return $bResult[0] EndFunc |
---------- ViSiToR a.k.a CreatoR CreatoR это не ник, CreatoR это стиль жизни! |
|