PureBasic Forum
https://www.purebasic.fr/english/

Gadget arrays?
https://www.purebasic.fr/english/viewtopic.php?f=22&t=73716
Page 1 of 1

Author:  ozzie [ Wed Oct 02, 2019 5:42 am ]
Post subject:  Gadget arrays?

Having started with PureBasic in the days before Form Designer was available, I hard-coded my form layouts. But I've decided it's time I had a look at Form Designer, and what I've found so far I like. However, something I need often is to have arrays of gadgets within a ScrollAreaGadget. These typically include a mixture of string gadgets, combobox gadgets and possibly also a button gadget. I know I can set up one row of these in Form Designer, then select them all, then and copy and paste them multiple times. But all these gadgets will have unique names. What I want is to have the generated code create gadget arrays, and a loop that contains just one subscripted instance of each gadget in the row. This is necessary to simplify populating and processing the rows. Is this possible using Form Designer?

Author:  mk-soft [ Thu Oct 03, 2019 10:26 am ]
Post subject:  Re: Gadget arrays?

I don't know any designer who can create arrays.

But if you use constants (not PB_Any) you can use the tab order.
The FormDesigner can handle this if you change the order of the gadgets in the OpenWindow procedure.
Switch to code view and sort the gadgets. Then switch back to Designer View and save it so that the designer can recreate the enumeration.

Code:
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;

Enumeration FormWindow
  #Window_0
EndEnumeration

Enumeration FormGadget
  #Text_0
  #Text_1
  #Text_2
  #String_0
  #String_1
  #String_2
EndEnumeration


Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
  OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu)
  TextGadget(#Text_0, 10, 10, 80, 30, "")
  TextGadget(#Text_1, 10, 50, 80, 30, "")
  TextGadget(#Text_2, 10, 90, 80, 20, "")
  StringGadget(#String_0, 100, 10, 120, 30, "")
  StringGadget(#String_1, 100, 50, 120, 30, "")
  StringGadget(#String_2, 100, 90, 120, 30, "")
EndProcedure

Code:
IncludeFile "Form1.pbf"

Global Dim sVal.s(3)
sVal(0) = "String 1"
sVal(1) = "String 2"
sVal(2) = "String 3"

Procedure Main()
  Protected i, index
 
  OpenWindow_0()
 
  If WindowID(#Window_0)
   
    For i = #String_0 To #String_2
      index = i - #String_0
      SetGadgetText(i, sVal(index))
    Next
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
         
      EndSelect
    ForEver
   
  EndIf
 
EndProcedure : Main()

Author:  ozzie [ Fri Oct 04, 2019 2:07 am ]
Post subject:  Re: Gadget arrays?

Thanks, mk-soft. That's very helpful. Being able to reorder the gadgets in the OpenWindow procedure and having Form Designer accept the new order is definitely a workable solution.

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/