Показать полную графическую версию : [решено] Checkbox с изменяющимися иконками
Centrinar
19-04-2010, 14:10
http://forum.oszone.ru/post-479390.html
тут (http://forum.oszone.ru/post-479390.html) есть пример создания GUI с Checkbox, помогите добавить к чекбоксам изменяющиеся иконки т.е. создаеться список Checkbox и возле каждого Checkbox создаеться иконка, при нажатии "Выполнить" возле Checkbox-а операция которго сейчас выполняеться меняеться иконка и по окончанию выполнения она меняеться еще раз.СПАСИБО
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $iIcon = -5
$hGUI = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("Test Script", 300, 200)
$aCheckBox = _GUICtrlCreateCheckboxEx("CheckBox", 20, 40, -1, -1, "shell32.dll", $iIcon)
$nStart = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)("Выполнить", 20, 170)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW), $hGUI)
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nStart
$iIcon = BitNOT (http://www.autoitscript.com/autoit3/docs/functions/BitNOT.htm)($iIcon)
GUICtrlSetImage (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetImage.htm)($aCheckBox[0], "shell32.dll", $iIcon)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile="", $nIconIndex=0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aRetArr[2]
$aRetArr[0] = GUICtrlCreateIcon (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateIcon.htm)($sIconFile, $nIconIndex, $iLeft + 17, $iTop + $iHeight + 3, 16, 16)
GUICtrlSetState (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetState.htm)(-1, $GUI_DISABLE)
GUICtrlSetBkColor (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetBkColor.htm)(-1, $GUI_BKCOLOR_TRANSPARENT)
$aRetArr[1] = GUICtrlCreateCheckbox (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateCheckbox.htm)(" " & $sText & " ", $iLeft, $iTop, $iWidth, $iHeight, 0x04000000) ;$WS_CLIPSIBLINGS
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aRetArr
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Centrinar
19-04-2010, 19:33
А из-за чего он отображает не те иконки, например я ставлю 246 я уверен что в shell32 это одно а в итоге он показывает другое
из-за чего он отображает не те иконки »
А что в справке к «GUICtrlSetImage» (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetImage.htm) об этом сказано? ;)
Centrinar
19-04-2010, 23:12
В элементе Button изображение заменяет надпись. Изображение можно установить также в Checkbox, если для него применяется стиль $BS_PUSHLIKE. В обоих случаях для изображения требуются стили $BS_ICON или $BS_BITMAP. Внимание. Если эта функция вызывается впервые для TreeView/Item или ListView/Item, то и все остальные добавляемые графы этих управляющих элементов будут по умолчанию использовать индикатор/изображение (icon/image). Но если функцию GUICtrlSetImage вызвать для TreeView или ListView, то все графы этих управляющих элементов поменяют свои изображения на указанные индикатор/изображение (icon/image).
новичек врятли нормально поймет
новичек врятли нормально поймет »
Это потому что справка на русском не обновлена. В английской версии на которую я указал ссылкой, сказано, что положительные числа представляют “строковое имя” иконки в файле, а негативные представляют числовое имя, т.е в последовательности нахождения (позиции) иконки в файле.
Centrinar
20-04-2010, 16:20
Помогите пожалуйста правильно объеденить скрипт этот с http://forum.oszone.net/thread-173577.html
Centrinar, зачем вы ссылки помещаете в тег кода?
Помогите пожалуйста правильно объеденить скрипт этот с »
Не уверен по каким параметрам соеденять скрипты, но вот что получилось, дальше уже сами:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; Только эту строку и нужно править для добавления новых, или удаления пунктов ;)
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sProgs = 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'
;Это так, чтобы проверить столбцы :)
$sProgs &= $sProgs & '|' & $sProgs & '|' & $sProgs & '|' & $sProgs & '|' & $sProgs
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $aProgs = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sProgs, '|')
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $anCheckBoxes[$aProgs[0]+1]
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aCheckedIcons[$aProgs[0]+1]
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aUnCheckedIcons[$aProgs[0]+1]
$Form1 = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("", 500, 500, -1, -1)
$iTop = 10
$iLeft = 20
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aProgs[0]
$aCheckedIcons[$i] = -5
$aUnCheckedIcons[$i] = -4
$anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aProgs[$i], '^.*=', ''), $iLeft, $iTop, -1, 15, "shell32.dll", $aUnCheckedIcons[$i])
$iTop += 20
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iTop > 450 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iTop = 10
$iLeft += 100
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
$nStart = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)("Выполнить", 10, 470, 80, 25)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW))
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$nMsg = GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nMsg
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nStart
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aProgs[0]
$aCheckBox = $anCheckBoxes[$i]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) GUICtrlRead (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlRead.htm)($aCheckBox[1]) = 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
GUICtrlSetImage (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetImage.htm)($aCheckBox[0], "shell32.dll", $aCheckedIcons[$i])
$sProgName = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aProgs[$i], '^.*=', '')
$sProgExe = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aProgs[$i], '=.*$', '')
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, $sProgName, $sProgExe)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
GUICtrlSetImage (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetImage.htm)($aCheckBox[0], "shell32.dll", $aUnCheckedIcons[$i])
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile="", $nIconIndex=0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aRetArr[2]
$aRetArr[0] = GUICtrlCreateIcon (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateIcon.htm)($sIconFile, $nIconIndex, $iLeft + 17, $iTop, 16, 16)
GUICtrlSetState (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetState.htm)(-1, $GUI_DISABLE)
GUICtrlSetBkColor (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetBkColor.htm)(-1, $GUI_BKCOLOR_TRANSPARENT)
$aRetArr[1] = GUICtrlCreateCheckbox (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateCheckbox.htm)(" " & $sText & " ", $iLeft, $iTop, $iWidth, $iHeight, $WS_CLIPSIBLINGS)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aRetArr
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Centrinar
20-04-2010, 23:56
Я добавил что бы он создавала еще 1 или 2 столюца если чекбоксов становиться много
if $iTop > 450 & $iLeft = 20 Then $iTop = 20 & $iLeft = 120
if $iTop > 450 & $iLeft = 120 Then $iTop = 20 & $iLeft = 240
но он почемуто переносит только один чекбокс или вообще не переносит их на след столбец...
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; Только эту строку и нужно править для добавления новых, или удаления пунктов ;)
Global $sProgs = 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'
Global Const $aProgs = StringSplit($sProgs, '|')
Global $anCheckBoxes[$aProgs[0]+1]
Global $aCheckedIcons[$aProgs[0]+1]
Global $aUnCheckedIcons[$aProgs[0]+1]
$Form1 = GUICreate("", 500, 500, -1, -1)
$iTop = 10
$iLeft = 20
For $i = 1 To $aProgs[0]
$aCheckedIcons[$i] = -5
$aUnCheckedIcons[$i] = -4
$anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs[$i], '^.*=', ''), $iLeft, $iTop, 100, 15, "shell32.dll", $aUnCheckedIcons[$i])
$iTop += 20
if $iTop > 450 & $iLeft = 20 Then $iTop = 20 & $iLeft = 120
if $iTop > 450 & $iLeft = 120 Then $iTop = 20 & $iLeft = 240
Next
$nStart = GUICtrlCreateButton("Выполнить", 10, 110, 80, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $nStart
For $i = 1 To $aProgs[0]
$aCheckBox = $anCheckBoxes[$i]
If GUICtrlRead($aCheckBox[1]) = 1 Then
GUICtrlSetImage($aCheckBox[0], "shell32.dll", $aCheckedIcons[$i])
$sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
$sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')
MsgBox(64, $sProgName, $sProgExe)
Else
GUICtrlSetImage($aCheckBox[0], "shell32.dll", $aUnCheckedIcons[$i])
EndIf
Next
EndSwitch
WEnd
Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile="", $nIconIndex=0)
Local $aRetArr[2]
$aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft + 17, $iTop, 16, 16)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$aRetArr[1] = GUICtrlCreateCheckbox(" " & $sText & " ", $iLeft, $iTop, $iWidth, $iHeight, $WS_CLIPSIBLINGS)
Return $aRetArr
EndFunc
добавил что бы он создавала еще 1 или 2 столюца если чекбоксов становиться много »
С чего вы взяли что так можно присваивать значения переменным? :) Справку почитайте.
Я поправил свой предыдущий пример.
Centrinar
21-04-2010, 20:41
Из-за чего может не срабатывать команда GUICtrlSetState ($anCheckBoxes[$i],$GUI_CHECKED) вроде делаю все по справке, но он упорно не хочет отметить все.
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $nButton
For $i = 1 to $aProgs[0]
GUICtrlSetState ($anCheckBoxes[$i],$GUI_CHECKED)
Next
Case $nStart
For $i = 1 To $aProgs[0]
$aCheckBox = $anCheckBoxes[$i]
If GUICtrlRead($aCheckBox[1]) = 1 Then
GUICtrlSetImage($aCheckBox[0], "shell32.dll", $aCheckedIcons[$i])
$sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
$sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')
MsgBox(64, $sProgName, $sProgExe)
Else
GUICtrlSetImage($aCheckBox[0], "shell32.dll", $aUnCheckedIcons[$i])
EndIf
Next
EndSwitch
WEnd
Из-за чего может не срабатывать команда GUICtrlSetState ($anCheckBoxes[$i],$GUI_CHECKED) вроде делаю все по справке, но он упорно не хочет отметить все. »
Потому что $anCheckBoxesх[$i] - это не индефикатор CheckBox'a , а сам является массивом . Надо из него выделить ID
Можно так :
Case $nButton
For $i = 1 to $aProgs[0]
; GUICtrlSetState ($anCheckBoxes[$i],$GUI_CHECKED)
$aArray=$anCheckBoxes[$i]
GUICtrlSetState ($aArray[1],$GUI_CHECKED)
Next
Да, это я забыл упомянуть. Массив содержит в каждом элементе дополнительный массив состоящий из двух элементов, первый (начиная с [0]) это ID создаваемой иконки рядом с Checkbox'ом, а второй это собственно ID самого элемента Checkbox.
Centrinar
25-04-2010, 22:47
ПОЧЕМУ КОГДА Я ЗАДАЮ ФОНОВУЮ КАРТИНКУ GUICtrlCreatePic("002.jpg", 0, 0, 680, 500) ОН НЕ ОТОБРАЖАЕТ НАДПИСИ НА ЧЕКБОКСАХ
Centrinar, не нужно писать всё заглавными буквами.
GUICtrlCreatePic »
Это не имеет отношения к чекбоксам, возможно речь про GUICtrlSetImage. Там просто указывается элементу другая отрисовка графики (ручная), поэтому нужно извращаться и самим рисовать иконки и текст. Кстати вот ещё способ создания чекбоксов:
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _GUICtrlCreateCheckboxEx(ByRef (http://www.autoitscript.com/autoit3/docs/keywords.htm#ByRef) $hImageList, $sText, $iLeft, $iTop, $iWidth=-1, $iHeight=-1, $nStyle=-1, $nExStyle=-1, $sIconFile='', $nIconID=0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $nID = GUICtrlCreateCheckbox (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateCheckbox.htm)($sText, $iLeft, $iTop, $iWidth, $iHeight, $nStyle, $nExStyle)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sIconFile = '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $nID
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $hImageList = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$hImageList = _GUIImageList_Create(16, 16, 5, BitOR (http://www.autoitscript.com/autoit3/docs/functions/BitOR.htm)($ILC_MASK, $ILC_COLOR32), 0, 1)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
_GUIImageList_AddIcon($hImageList, $sIconFile, $nIconID)
_GUICtrlButton_SetImageList($nID, $hImageList)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $nID
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
нужен #include <GuiImageList.au3> и #include <GuiButton.au3>.
Хотя тут будет сложнее изменять потом иконку.
Centrinar
26-04-2010, 00:57
Ты меня не правильно понял. Изночально мы создаем GUI размером 500 на 500 $Form1 = GUICreate("", 500, 500, -1, -1) . Потом мы создаем в нем кнопки, чекбоксы ну и т.д. Я хочу что бы в этом окне которое мы создали изночально, было фоновое изображение, соответственно я использую следующую команду:
$Form1 = GUICreate("", 500, 500, -1, -1)
GUICtrlCreatePic("002.jpg", 0, 0, 500, 500)
В итоге все получаеться но чекбоксы пропадают т.е. их просто не видно из-за чего?
их просто не видно из-за чего? »
Из за того что элемент изображения поверх остальных элементов, его можно "задисейблить":
GUICtrlCreatePic("002.jpg", 0, 0, 500, 500)
GUICtrlSetState(-1, $GUI_DISABLE)
Centrinar
26-04-2010, 01:20
Пробовал, иконки у чекбоксов видны а само название и чекбокс нет
иконки у чекбоксов видны а само название и чекбокс нет »
А какого цвета фоновое изображение?
Centrinar
26-04-2010, 01:36
Белое, ток не говори что название чекбоксов тож меняеться на белое)))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.