Sign in to follow this  
Followers 0
erebus

Functions and variables (feature)

8 posts in this topic

Hello all,

I wanted to write a function which will draw some GUI groups on a window and put some buttons in each of these groups (anyway my question has nothing to do with the GUI part of AutoIT and that's why I send my post here). However the problem with that function it that from this I also wanted to create some new variables based on a for...next loop. For example:

Func WinDraw($left, $top, $wins)
     For $i = 1 to $wins
         GUICtrlCreateGroup("pc-" & $i, $left, $top, 120, 120)
         Global $control & $i = GUICtrlCreateButton($text & $i, $left + 20, $top + 20, 80, 40)
     Next
EndFunc

Ok, I know that $control & $i and $text & $i doesn't make any sense but I wanted to find a way to create a new variable name combining a fix name and a for...next based $i number so as to create new variables ending to a new number each time. Is there any way, or could such a feature be added in a future release?

Thanks a lot.

Share this post


Link to post
Share on other sites



It is added in the beta version. The function is called Assign.

Check the help file for more info about the function.

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

That's great! Thanks a lot for your help.

Edited by erebus

Share this post


Link to post
Share on other sites

Ok... after testing a bit I found a serious limitation of the new "Assign" command. There is no way for the script to automatically know the new name after "assigning" a for...next variable to a fix variable name... For example in my code with the Assign command this should be:

Local $control, $text
         GUICtrlCreateGroup("pc-" & $i, $l2, $t2, 120, 120)
         Assign($control, $i, 2) = GUICtrlCreateButton(Assign($text, $i, 2), $l3, $t3, 80, 40)

...so as to translate this as:

$control1 = ...$text1...
$control2 = ...$text2...
$control3 = ...$text3...

...until the for...next loop finish.

What I mean is that I search for a way to declare a variable name + a variable name automatically in the script. Maybe something such as $name($i)...

Share this post


Link to post
Share on other sites

You're using it wrong, which is why. Assign(NAME, DATA, scope). The name field is the name you want the variable to have, this is what is on the left side of the equals sign; however, it is a string, not a variable. The data is the... data. It is what would be on the right side.

Example:

Assign("control" & $i, GUICtrlCreateButton("WTH were you doing here?", $l3, $t3, 80, 40), 2)

I obviously stripped something from the example as I have no clue what the hell you were doing with that line.

Share this post


Link to post
Share on other sites

You're using it wrong, which is why.

Oh... my bad, I'm sorry :/

I obviously stripped something from the example as I have no clue what the hell you were doing with that line.

Nothing more than trying to assign a GUICtrlCreateButton to a variable so as to control its state later. The idea is to have a dynamically created variable name so as to eliminate code in the function. Thanks a lot, you are a life saver!

Anyway I apologize if my questions seem stupid... :/

Share this post


Link to post
Share on other sites

You could use an array.... Not sure exactly what you want, but this should show you the syntax.

GuiCreate("Example")
GuiSetState()
WinDraw(10, 10, 5)
While GuiGetMsg() <> -3
WEnd

Func WinDraw($left, $top, $wins)
   Global $control[$wins+1];the plus one is so that the largest array element index == $wins
   For $i = 1 to $wins
      GUICtrlCreateGroup("pc-" & $i, $left, $top, 320, 320)
      $control[$i] = GUICtrlCreateButton("text" & $i, $left + 40*$i, $top + 40*$i, 80, 40)
   Next
EndFunc

Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!

Share this post


Link to post
Share on other sites

Excellent and simple idea, I was so tired yesterday that I couldn't ever have thought of this...

Thank you all guys, what is new for me to love in AutoIT now is this great community!

You all are really amazing! :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0