Вот посмотри данный пример. Думаю поймешь куда дальше копать ...
Код: Выделить всё
PROGRAM
MAP
END
MaxID EQUATE(9999)
TImagesList QUEUE,TYPE
ImageID LONG
ImageLevel LONG
ImageFEQ LONG
END
ImagesArray CLASS
ImagesList &TImagesList
LastID LONG
Construct PROCEDURE
Destruct PROCEDURE
Add PROCEDURE(LONG FEQ),LONG,PROC
ToTop PROCEDURE(LONG ID)
END
Window WINDOW('ImagesArray class'),AT(,,231,97),FONT('MS Sans Serif',8,,FONT:regular),CENTER,GRAY,RESIZE
IMAGE('1.gif'),AT(27,12),USE(?Image1)
IMAGE('2.gif'),AT(24,30),USE(?Image2)
IMAGE('3.gif'),AT(45,21),USE(?Image3)
IMAGE('4.gif'),AT(39,36),USE(?Image4)
BUTTON('1 вверх на одну позицию'),AT(108,18,98,14),USE(?Button1)
BUTTON('2 вверх на одну позицию'),AT(108,33,98,14),USE(?Button2)
BUTTON('3 вверх на одну позицию'),AT(108,48,98,14),USE(?Button3)
BUTTON('4 вверх на одну позицию'),AT(108,63,98,14),USE(?Button4)
END
IA ImagesArray
CODE
OPEN(Window)
Window{PROP:Buffer} = 1
IA.Add(?Image1)
IA.Add(?Image2)
IA.Add(?Image3)
IA.Add(?Image4)
ACCEPT
CASE ACCEPTED()
OF ?Button1
IA.ToTop(1)
OF ?Button2
IA.ToTop(2)
OF ?Button3
IA.ToTop(3)
OF ?Button4
IA.ToTop(4)
END
END
CLOSE(Window)
ImagesArray.Construct PROCEDURE
CODE
SELF.ImagesList &= NEW TImagesList
SELF.LastID = 0
ImagesArray.Destruct PROCEDURE
CODE
FREE(SELF.ImagesList)
DISPOSE(SELF.ImagesList)
ImagesArray.Add PROCEDURE(LONG FEQ)
CODE
SELF.LastID += 1
SELF.ImagesList.ImageID = SELF.LastID
SELF.ImagesList.ImageLevel = FEQ
SELF.ImagesList.ImageFEQ = FEQ
ADD(SELF.ImagesList)
RETURN SELF.LastID
ImagesArray.ToTop PROCEDURE(LONG ID)
ImageName1 STRING(255)
ImageName2 STRING(255)
ImageFEQ LONG
ImageLevel LONG
ImageID1 LONG
ImageID2 LONG
Found BYTE
HighLevel LONG
CODE
SELF.ImagesList.ImageID = ID
GET(SELF.ImagesList,SELF.ImagesList.ImageID)
IF NOT ERRORCODE()
ImageFEQ = SELF.ImagesList.ImageFEQ
ImageLevel = SELF.ImagesList.ImageLevel
ImageID1 = SELF.ImagesList.ImageID
SELF.ImagesList.ImageID = MaxID
PUT(SELF.ImagesList)
GETPOSITION(ImageFEQ,X#,Y#,W#,H#)
ImageName1 = ImageFEQ{PROP:Text}
LOOP E# = 1 TO RECORDS(SELF.ImagesList)
GET(SELF.ImagesList,E#)
IF (ImageLevel+1) = SELF.ImagesList.ImageLevel
Found = TRUE
BREAK
END
END
IF Found = TRUE
GETPOSITION(SELF.ImagesList.ImageFEQ,X1#,Y1#,W1#,H1#)
ImageName2 = SELF.ImagesList.ImageFEQ{PROP:Text}
SETPOSITION(SELF.ImagesList.ImageFEQ,X#,Y#,W#,H#)
SELF.ImagesList.ImageFEQ{PROP:Text} = ImageName1
SETPOSITION(ImageFEQ,X1#,Y1#,W1#,H1#)
ImageFEQ{PROP:Text} = ImageName2
ImageID2 = SELF.ImagesList.ImageID
SELF.ImagesList.ImageID = ImageID1
PUT(SELF.ImagesList)
SELF.ImagesList.ImageID = MaxID
GET(SELF.ImagesList,SELF.ImagesList.ImageID)
SELF.ImagesList.ImageID = ImageID2
PUT(SELF.ImagesList)
ELSE
SELF.ImagesList.ImageID = MaxID
GET(SELF.ImagesList,SELF.ImagesList.ImageID)
SELF.ImagesList.ImageID = ImageID1
PUT(SELF.ImagesList)
END
END