User Tools

Site Tools


creating_20child_20controls_20in_20a_20loop

This is an old revision of the document!


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:

  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

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:

    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

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.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
creating_20child_20controls_20in_20a_20loop.1522502353.txt.gz · Last modified: 2024/01/05 00:18 (external edit)