Войти

Показать полную графическую версию : запуск 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?

ferget
03-08-2012, 13:48
Вот пример


#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], но не выдается (ошибка описания, видимо)

ferget
04-08-2012, 11:54
Покажите ваш код

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

ferget
04-08-2012, 14:39
#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]=""

почему именно так? в примере это делалось по другому. такое вообще в справке есть?

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

ferget
04-08-2012, 15:59
Это просто на всякий случай

массивы нумеруются от 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 ?

ferget
04-08-2012, 16:30
что значит 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