User Tools

Site Tools


prop_vlbproc.htm
Navigation:  Language Reference App C - PROP: Runtime Properties Complete Property List  ====== PROP:VLBproc and PROP:VLBval ====== Previous pageReturn to chapter overviewNext page

PROP:VLBProc sets the source procedure for a “Virtual List Box” LIST or COMBO control without a FROM attribute. This procedure provides the control with the data to display.

The procedure's prototype must take three parameters:

VLBProc PROCEDURE(LONG,LONG,SHORT),STRING

where the first LONG is either SELF (indicating the procedure is a method of a CLASS) or the value set for PROP:VLBval. The second LONG passes the row number of the virtual list box to affect. There are three “special” values for this parameter, -1 asks for the number of records to display in the list, -2 asks for the number of fields in the nominal Queue (data and color/tree/icon fields) to display in the list, and -3 asks if there are any changes to display. The SHORT parameter specifies the column number of the virtual list box to affect.

PROP:VLBVal sets the source object for a “Virtual List Box” LIST or COMBO control without a FROM attribute. This can be any 32-bit unique value to identify the specific list box, but is generally the return value of ADDRESS(SELF) when the PROP:VLBProc procedure is a CLASS method.

Example:

 PROGRAM
    MAP
      Main
    END
  StripedListQ  QUEUE,TYPE
  S              STRING(20)
                END
  StripedList   CLASS,TYPE
  Init           PROCEDURE(WINDOW w, SIGNED feq, StripedListQ Q)
  VLBproc        PROCEDURE(LONG row, SHORT column),STRING,PRIVATE
                 !Required first parameter is implicit in a CLASS method
  Q              &StripedListQ,PRIVATE
  ochanges       LONG,PRIVATE
                END
    CODE
    Main

  StripedList.Init  PROCEDURE(WINDOW w, SIGNED feq, StripedListQ Q)
    CODE
    SELF.Q &= Q
    SELF.ochanges = CHANGES(Q)
    w $ feq{PROP:VLBval} = ADDRESS(SELF)               !Must assign this first
    w $ feq{PROP:VLBproc} = ADDRESS(SELF.VLBproc)      ! then this
 
   StripedList.VLBproc PROCEDURE(LONG row, SHORT col)  !Required first parameter is implied
   nchanges LONG
    CODE
    CASE row
    OF -1                    ! How many rows?
      RETURN RECORDS(SELF.Q)
    OF -2                    ! How many columns?
      RETURN 5             ! 1 data, four color fields in the "nominal Q"
    OF -3                    ! Has it changed
      nchanges = CHANGES(SELF.Q)
      IF nchanges <> SELF.ochanges THEN
        SELF.ochanges = nchanges
        RETURN 1
      ELSE
        RETURN 0
      END
    ELSE
      GET(SELF.Q, row)
      CASE col
      OF 1               !Data field
        RETURN WHAT(SELF.Q,1)
      OF 3               !Background color field
        RETURN CHOOSE(BAND(row,1), COLOR:none, 0c00000H)
      ELSE               !All other fields
        RETURN COLOR:None          ! Use default color
      END
    END
   
  Main PROCEDURE
  window  WINDOW('Caption'),AT(,,153,103),GRAY,SYSTEM
                LIST,AT(33,12,80,80),USE(?List1),FORMAT('20L*')
         END
  Q      QUEUE(StripedListQ)
         END
  SL     StripedList
  i      SIGNED
    CODE
    LOOP i = 1 TO 20
      Q.s = 'Line ' & i
      ADD(Q)
    END
    OPEN(window)
    SL.Init(window, ?list1, Q)
    ACCEPT
    END
prop_vlbproc.htm.txt · Last modified: 2021/04/15 13:30 (external edit)