Почитал я Help, посмотрел приложенный пример и сделал такую программку:
Код: Выделить всё
  PROGRAM
  MAP
    Main
  END
Colon_NameQ   Queue, Type
NN              String(20)
              .
Que_Data      QUEUE, Type
R                 long
C                 Short
S                 String(20)
                .
StripedList   CLASS,TYPE
Init            PROCEDURE(WINDOW w, SIGNED feq)
Kill            Procedure()
VLBproc         PROCEDURE(LONG row, SHORT column),STRING,PRIVATE
Add_Q           PROCEDURE(LONG row, SHORT column, String Data)
Add_Qn          PROCEDURE(String Data)
                !Required first parameter is implicit in a CLASS method
Qn              &Colon_NameQ,PRIVATE
Q               &Que_Data,PRIVATE
ochanges        LONG,PRIVATE
Rows_Q          long,PRIVATE
              .
  CODE
  Main
StripedList.Init  PROCEDURE(WINDOW w, SIGNED feq)
  CODE
  Self.Q &= New(Que_Data)
  Self.Qn &= New(Colon_NameQ)
  Self.Rows_Q = 0
  SELF.ochanges = CHANGES(Self.Q)
 w $ feq{PROP:VLBval}  = ADDRESS(SELF)              !Это должно быть присвоено сперва
 w $ feq{PROP:VLBproc} = ADDRESS(SELF.VLBproc)      ! затем это
StripedList.Kill  Procedure()
  Code
  Clear(Self.Q)
  DISPOSE(Self.Q)
  Clear(Self.Qn)
  DISPOSE(Self.Qn)
StripedList.VLBproc PROCEDURE(LONG row, SHORT col)  !Подразумевается первый обязательный параметр
nchanges LONG
Any1     Any
Any2     Any
  CODE
  CASE row
  OF -1                    ! Сколько строк?
    RETURN SELF.Rows_Q
  OF -2                    ! Сколько колонок?
    RETURN Records(Self.Qn)  ! 1 данные, четыре поля цвета в <номинальной очереди>
  OF -3                    ! Это изменения
    nchanges = CHANGES(SELF.Q)
    IF nchanges <> SELF.ochanges THEN
      SELF.ochanges = nchanges
      RETURN 1
    ELSE
      RETURN 0
    .
  ELSE
!    Return 'R' & row & ' C' & col
    If row > SELF.Rows_Q
      Return ''
    .
    If col > RECORDS(SELF.Qn)
      Return ''
    .
    Any1 &= WHAT(Self.Q, 1)
    Any2 &= WHAT(Self.Q, 2)
    Any1 = row
    Any2 = col
    GET(SELF.Q, '+R,+C')
    RETURN What(SELF.Q, 3)
  .
StripedList.Add_Q Procedure(LONG row, SHORT column, String Data)
  Code
  Self.Q.R = row
  Self.Q.C = column
  Self.Q.S = Data
  Add(Self.Q, '+R,+C')
  Clear(Self.Q)
  If row > Self.Rows_Q
    Self.Rows_Q = row
  .
StripedList.Add_Qn Procedure(String Str)
  Code
  Self.Qn.NN = Str
  Add(Self.Qn)
  Clear(Self.Qn)
Main PROCEDURE
window WINDOW('Caption'),AT(,,279,103),STATUS,SYSTEM,GRAY,MAX,DOUBLE
       LIST,AT(5,3,271,98),USE(?List1),HVSCROLL,FORMAT('20L(2)|M')
     END
SL     StripedList
i      SIGNED
j      SIGNED
StrFormat String(1000)
KolStrok  Long(9)
KolStolbcov Short(7)
  CODE
  OPEN(window)
  SL.Init(window, ?list1)
  StrFormat = ''
  Loop i = 1 To KolStolbcov
    SL.Add_Qn('Name_' & i)
    StrFormat = Clip(StrFormat) & '35L(2)|~' & 'Name_' & i & '~C#' & i & '#'
  .
  ?List1{Prop:Format} = Clip(StrFormat)
  LOOP j = 1 TO KolStrok
    Loop i = 1 To KolStolbcov
      SL.Add_Q(j, i, 'Line ' & i & ' * ' & j)
    .
  .
  ACCEPT
  END
  SL.Kill()
 Решил я их поменять на Any:
Код: Выделить всё
  PROGRAM
  MAP
    Main
  END
Colon_NameQ   Queue, Type
NN              Any
              .
Que_Data      QUEUE, Type
R                 long
C                 Short
S                 Any
                .
StripedList   CLASS,TYPE
Init            PROCEDURE(WINDOW w, SIGNED feq)
Kill            Procedure()
VLBproc         PROCEDURE(LONG row, SHORT column),STRING,PRIVATE
Add_Q           PROCEDURE(LONG row, SHORT column, Any Data)
Add_Qn          PROCEDURE(Any Data)
                !Required first parameter is implicit in a CLASS method
Qn              &Colon_NameQ,PRIVATE
Q               &Que_Data,PRIVATE
ochanges        LONG,PRIVATE
Rows_Q          long,PRIVATE
              .
  CODE
  Main
StripedList.Init  PROCEDURE(WINDOW w, SIGNED feq)
  CODE
  Self.Q &= New(Que_Data)
  Self.Qn &= New(Colon_NameQ)
  Self.Rows_Q = 0
  SELF.ochanges = CHANGES(Self.Q)
 w $ feq{PROP:VLBval}  = ADDRESS(SELF)              !Это должно быть присвоено сперва
 w $ feq{PROP:VLBproc} = ADDRESS(SELF.VLBproc)      ! затем это
StripedList.Kill  Procedure()
  Code
  Clear(Self.Q)
  DISPOSE(Self.Q)
  Clear(Self.Qn)
  DISPOSE(Self.Qn)
StripedList.VLBproc PROCEDURE(LONG row, SHORT col)  !Подразумевается первый обязательный параметр
nchanges LONG
Any1     Any
Any2     Any
Any3     Any
Str      String(20)
  CODE
  CASE row
  OF -1                    ! Сколько строк?
    RETURN SELF.Rows_Q
  OF -2                    ! Сколько колонок?
    RETURN Records(Self.Qn)  ! 1 данные, четыре поля цвета в <номинальной очереди>
  OF -3                    ! Это изменения
    nchanges = CHANGES(SELF.Q)
    IF nchanges <> SELF.ochanges THEN
      SELF.ochanges = nchanges
      RETURN 1
    ELSE
      RETURN 0
    .
  ELSE
!    Return 'R' & row & ' C' & col
    If row > SELF.Rows_Q
      Return ''
    .
    If col > RECORDS(SELF.Qn)
      Return ''
    .
    Any1 &= WHAT(Self.Q, 1)
    Any2 &= WHAT(Self.Q, 2)
    Any1 = row
    Any2 = col
    GET(SELF.Q, '+R,+C')
    Any3 &= What(SELF.Q, 3)
    Str = Any3
    RETURN Str
  .
StripedList.Add_Q Procedure(LONG row, SHORT column, Any Data)
  Code
  Self.Q.R = row
  Self.Q.C = column
  Self.Q.S = Data
  Add(Self.Q, '+R,+C')
  Clear(Self.Q)
  If row > Self.Rows_Q
    Self.Rows_Q = row
  .
StripedList.Add_Qn Procedure(Any Str)
  Code
  Self.Qn.NN = Str
  Add(Self.Qn)
  Clear(Self.Qn)
Main PROCEDURE
window WINDOW('Caption'),AT(,,279,103),STATUS,SYSTEM,GRAY,MAX,DOUBLE
       LIST,AT(5,3,271,98),USE(?List1),HVSCROLL,FORMAT('20L(2)|M')
     END
SL     StripedList
i      SIGNED
j      SIGNED
StrFormat String(1000)
KolStrok  Long(9)
KolStolbcov Short(7)
  CODE
  OPEN(window)
  SL.Init(window, ?list1)
  StrFormat = ''
  Loop i = 1 To KolStolbcov
    SL.Add_Qn('Name_' & i)
    StrFormat = Clip(StrFormat) & '35L(2)|~' & 'Name_' & i & '~C#' & i & '#'
  .
  ?List1{Prop:Format} = Clip(StrFormat)
  LOOP j = 1 TO KolStrok
    Loop i = 1 To KolStolbcov
      SL.Add_Q(j, i, 'Line ' & i & ' * ' & j)
    .
  .
  ACCEPT
  END
  SL.Kill()
Как НАДО это сделать ?
