Почитал я 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()

Как НАДО это сделать ?