Creating+child+controls+in+a+loop

//by Richard Russell, March 2013//

In Liberty BASIC 4.04 you can use the **MAPHANDLE** statement to, for example, reuse the same code to open multiple windows. The LB4 documentation illustrates how to open three windows using this technique: code format="lb" winName$ = "first second third" for x = 1 to 3 call createWindow word$(winName$, x) next x  wait

sub createWindow title$ texteditor #1.te, 10, 10, 200, 200 open "text "+title$ for window as #1 #1.te "this is the "+title$+" window" #1 "trapclose aboutToClose" handle$ = "#"+title$ maphandle #1, handle$ end sub

sub aboutToClose handle$ confirm "Close "+handle$+"?"; answer if answer = 1 then close #handle$ end sub code It would be extremely useful to be able to use MAPHANDLE in a similar fashion to create multiple **child controls**, but for some reason LB4 will not let you do so. Fortunately this is one of the many limitations that is removed in **LB Booster**.

The code below is adapted from the Alphabet Buttons example on the [|Liberty BASIC Community Wiki] but instead of using a separate BUTTON statement for each button, all 26 are created in a loop: code format="lb" Stylebits #win, 0,_WS_MAXIMIZEBOX,0,0 WindowWidth = 230 WindowHeight = 80 UpperLeftX=int((DisplayWidth-WindowWidth)/2) UpperLeftY=int((DisplayHeight-WindowHeight)/2) for i = 1 to 26 x = 15 * i : y = 5 if x > 195 then x = x - 195 : y = y + 15 Button #win.tmp, CHR$(64+i), sel, UL, x, y, 15,  15 maphandle #win.tmp, "#win." + chr$(64+i) next

Open "Alphabet Buttons" For Window As #win Print #win, "Trapclose quit" wait

sub sel handle$ print "Selected "; handle$ end sub

sub quit handle$ close #handle$ end end sub code If you click a button and watch the mainwin you can see that each button has a separate handle, exactly as was the case in the original program.