Показать полную графическую версию : запуск GUICtrlSetData в цикле
bugmenotagain
03-08-2012, 12:53
http://forum.oszone.net/post-1963371-28.html
в справке конечно же не предусмотрено такой информации, гугл тоже молчит, подскажите если кто-нибудь знает.
может это For...In...Next?
спасибо
bugmenotagain
03-08-2012, 13:41
; Массив
Dim $aArray[4]
$aArray[0]="a"
$aArray[1]=0
$aArray[2]=1.3434
$aArray[3]="test"
$string = ""
For $element In $aArray
$string = $string & $element & @CRLF
Next
MsgBox(4096,"For..In тест, массив","Результат: " & @CRLF & $string)
чет не понятно как-то написано, что это значит и как это приспособить для GUICtrlSetData?
Вот пример
#include <GUIConstantsEx.au3>
Example()
Func Example()
Local $MESSAGE = "The following buttons have been clicked"
Local $add, $clear, $mylist, $close, $msg
GUICreate("My GUI list") ; will create a dialog box that when displayed is centered
$add = GUICtrlCreateButton("Add", 64, 32, 75, 25)
$clear = GUICtrlCreateButton("Clear", 64, 72, 75, 25)
$mylist = GUICtrlCreateList("buttons that have been clicked", 176, 32, 121, 97)
GUICtrlSetLimit(-1, 200) ; to limit horizontal scrolling
GUICtrlSetData(-1, $MESSAGE)
$close = GUICtrlCreateButton("my closing button", 64, 160, 175, 25)
Dim $Array[4]
$Array[0]="Верхний левый"
$Array[1]="Нижний левый"
$Array[2]="Верхний правый"
$Array[3]="Нижний правый"
GUISetState()
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $add
For $i= 0 To 3
GUICtrlSetData($mylist, $Array[$i])
Next
Case $msg = $clear
GUICtrlSetData($mylist, "")
Case $msg = $close
MsgBox(0, "", "the closing button has been clicked", 2)
Exit
EndSelect
WEnd
EndFunc ;==>Example
bugmenotagain
04-08-2012, 11:05
ferget, нет не получается
в GUICtrlSetData($list, $Array[$i]) выдается ошибка и не получается выдать $Array[$i]
вообще команда или описание с ошибкой, читаем описание
GUICtrlSetData ( controlID, data [, default] )
controlID Идентификатор элемента возвращаемый функцией GUICtrlCreate....
$list это не идентификатор никакой (ошибка команды)
data список пунктов задан $Array[$i], но не выдается (ошибка описания, видимо)
bugmenotagain
04-08-2012, 14:11
ferget, собсно обычный код из примера, совмещенный с другим кодом из другого примера
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <ListBoxConstants.au3>
;
$mainwindow1 = GUICreate ( "Пример", 450, 350, -1, -1, -1, -1)
;
;Local $background
;Local $backgroundFile = @ScriptDir & "\444.jpg"
Local $read, $Reg, $Reglist
Dim $Array[3]
$Array[0]=1
$Array[1]=2
$Array[2]=3
$Button1 = GUICtrlCreateButton("Продолжить", 135, 310, 80)
$Button2 = GUICtrlCreateButton("Закончить", 235, 310, 80)
$read = GUICtrlCreateButton("Смотреть", 20, 20, 150)
;
GUISetState(@SW_SHOW)
;
GUISetState()
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $read
For $i= 0 To 3
$Reg = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)
$Reglist = GUICtrlCreateList("", 180, 30, 190, 200, $GUI_SS_DEFAULT_LIST + $LBS_NOINTEGRALHEIGHT)
GUICtrlSetData($Reglist, Array[$i])
GUICtrlSetLimit(-1, 200) ; ограничить прокрутку по горизонтали
Next
EndSelect
WEnd
;
While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $Button1
MsgBox(0, "Нажали кнопку1", "Вы нажали OK!")
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow1
MsgBox(0, "Событие GUI", "Вы нажали ЗАКРЫТЬ в главном окне! Завершаем...")
ExitLoop
Case $msg[0] = $Button2 And $msg[1] = $mainwindow1
MsgBox(0, "Событие GUI", "Вы нажали ЗАКРЫТЬ в главном окне! Завершаем...")
ExitLoop
EndSelect
WEnd
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <ListBoxConstants.au3>
;
$mainwindow1 = GUICreate ( "Пример", 450, 350, -1, -1, -1, -1)
;
;Local $background
;Local $backgroundFile = @ScriptDir & "\444.jpg"
Local $read, $Reg, $Reglist
Dim $Array[10]
$Array[0]=""
$Button1 = GUICtrlCreateButton("Продолжить", 135, 310, 80)
$Button2 = GUICtrlCreateButton("Закончить", 235, 310, 80)
$read = GUICtrlCreateButton("Смотреть", 20, 20, 150)
$Reglist = GUICtrlCreateList("", 180, 30, 190, 200, $GUI_SS_DEFAULT_LIST + $LBS_NOINTEGRALHEIGHT)
GUICtrlSetLimit(-1, 200) ; ограничить прокрутку по горизонтали
;
GUISetState(@SW_SHOW)
For $i= 1 To 3
$var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)
If @error Then ExitLoop
$Array[$i]=$var
Next
;
GUISetState()
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $read
For $i= 1 To 3
GUICtrlSetData($Reglist, $Array[$i])
Next
EndSelect
WEnd
bugmenotagain
04-08-2012, 15:41
ferget,
Dim $Array[10]
$Array[0]=""
почему именно так? в примере это делалось по другому. такое вообще в справке есть?
все остальное вроде понятно, но опять же справка и примеры умалчивают эти способы и возможности, хорошо что есть форум.
Это просто на всякий случай
массивы нумеруются от 0
а все циклы начинаются с 1
bugmenotagain
04-08-2012, 16:10
да и почему то в предлагаемом скрипте кнопка закрыть в главном окошке срабатывает только со 2 раза, это так и должно быть?
если в ваш скрипт http://forum.oszone.net/post-1964616-7.html дописать
While 1
$msg = GUIGetMsg(1)
Select
.....и так далее.....
то оно будет работать? у меня это не дает никакого результата, почему такое может быть? я все правильно задал по примеру.
что значит While $msg <> $GUI_EVENT_CLOSE ?
что значит While $msg <> $GUI_EVENT_CLOSE ? »
Это значит делать пока $msg не равна $GUI_EVENT_CLOSE
у вас тут смешаны два метода построения Gui, в данном случае лучше делать так
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <ListBoxConstants.au3>
;
$mainwindow1 = GUICreate ( "Пример", 450, 350, -1, -1, -1, -1)
;
;Local $background
;Local $backgroundFile = @ScriptDir & "\444.jpg"
Local $read, $Reg, $Reglist,$msg
Dim $Array[10]
$Array[0]=""
$Button1 = GUICtrlCreateButton("Продолжить", 135, 310, 80)
$Button2 = GUICtrlCreateButton("Закончить", 235, 310, 80)
$read = GUICtrlCreateButton("Смотреть", 20, 20, 150)
$Reglist = GUICtrlCreateList("", 180, 30, 190, 200, $GUI_SS_DEFAULT_LIST + $LBS_NOINTEGRALHEIGHT)
GUICtrlSetLimit(-1, 200) ; ограничить прокрутку по горизонтали
;
GUISetState(@SW_SHOW)
For $i= 1 To 3
$var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)
If @error Then ExitLoop
$Array[$i]=$var
Next
;
GUISetState()
Do
$msg = GUIGetMsg()
Select
Case $msg = $read
For $i= 1 To 3
GUICtrlSetData($Reglist, $Array[$i])
Next
Case $msg = $Button1
MsgBox(0, "Нажали кнопку1", "Вы нажали OK!")
Case $msg = $Button2
MsgBox(0, "Событие GUI", "Вы нажали ЗАКРЫТЬ в главном окне! Завершаем...")
exit
EndSelect
Until $msg = $GUI_EVENT_CLOSE
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.