Вопрос в следующем - как передать переменную в функцию чтобы переменная изменялась внутри цикла. Т.е у меня будет много кнопок, и каждая передает свой график на GUI, но, код внутри кнопок этих очень похож. Для того чтобы не захламлять код, я хочу создать одну универсальную функцию, куда можно будет передавать различные данные радиуса, радиан и т.д которые должны будут пересчитываться в этой переданной функции. У меня получается только передать одно значение в функцию, но внутри цикла этой функции оно не пересчитывается остается одним и тем же. В данном случае, нужно передать в функцию радиус архимеда так, чтобы он изменялся каждый цикл внутри созданной функции, но, допустим другая кнопка, будет вырисовывать другую фигуру, у нее уже радиус будет совсем другой и радианы другие, и точно так же эти значения должны будут пересчитываться в цикле. Т.е переменную передали, но в ней же должен происходить перерасчет другой переменной.
AutoIt код:
#include <GUIConstants.au3>
#include <Misc.au3>
$a = 0.3
$k2 = 800
$k=3
$Form = GUICreate ("ZipTechnology (С).",($k2+1),($k2+1), -1, -1, -1, $WS_CLIPCHILDREN)
;WinSetTrans($Form, "", 150)
$Button = GUICtrlCreateButton("№1", 10, 10, 130, 30)
$Button1 = GUICtrlCreateButton("№2", 160, 10, 130, 30)
$Button2 = GUICtrlCreateButton("The spiral of Archimedes.", 310, 10, 130, 30)
$Dlina = GUICtrlCreateInput ($a, 290, 15, 20, 20, -1)
$Button3 = GUICtrlCreateButton("№4", 460, 10, 130, 30)
$Dlina2 = GUICtrlCreateInput ($k, 440, 15, 20, 20, -1)
$Button4 = GUICtrlCreateButton("Random", 620, 10, 130, 30)
$Yu = GUICtrlCreateGraphic((($k2/2)+1),(($k2/2)+1))
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0)
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$r = 0
$rad = 0
GUICtrlDelete($Yu)
$Yu = GUICtrlCreateGraphic((($k2/2)+1),(($k2/2)+1))
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0)
$peredacha = GUICtrlRead($Dlina) ; передаем эту переменную в функцию ниже (она будет вместо цикла
For $i = 0 to 2000 Step +1
GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
GUISetState()
$r += GUICtrlRead($Dlina)
$x=Cos($rad)*$r
$y=Sin($rad)*$r
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 1) ;ВОТ ЗДЕСЬ БУДЕТ ФУНКЦИЮ КУДА ПЕРЕДАЛИ т.е figura($peredacha))
GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, -$y, +$x)
GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
$rad += 0.1
if _IsPressed('01') Then
ExitLoop
EndIf
Next
EndSwitch
GUIRegisterMsg($WM_ERASEBKGND, "")
WEnd
Func WM_ERASEBKGND()
Return 0
EndFunc
Func figura($R)
GUICtrlDelete($Yu)
$Yu = GUICtrlCreateGraphic((($k2/2)+1),(($k2/2)+1))
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 1)
GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0)
For $i = 0 to 1500 Step +1
GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
GUISetState()
;сюда передали то, что должно изменяться.
;$r += $R
$x=Cos($rad)*$r
$y=Sin($rad)*$r ;ФУНКЦИЯ КОТОРАЯ ДОЛЖНА ВЫСЧИТЫВАТЬ ВСЕ ДАННЫЕ КОТОРЫЕ ПЕРЕДАЛИ.
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 1)
GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, -$y, +$x)
GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
$rad += 0.01 ;эта переменная должна изменяться в переменной $r т.к в ней она с каждым разом меняется на 0.01
if _IsPressed('01') Then
ExitLoop
EndIf
Next
EndFunc
Сообщение автоматически объединено: