******************************************************************************** * Program: ScrollImage.prg * Greg Doran Copyright (c) 2004 * * HOW TO: Scroll an image from left to right. * ******************************************************************************** * #include "appevent.ch" #include "xbp.ch" #include "gra.ch" #include "font.ch" PROCEDURE main() LOCAL oDlg LOCAL aPos LOCAL nEvent, mp1, mp2, oObj LOCAL aSize := AppDesktop():currentSize() aPos := { (aSize[1] - 640) /2, (aSize[2] - 480) /2 } oDlg := XbpDialog():new( AppDesktop(),, aPos, {640, 480},, .T. ) oDlg:taskList := .T. oDlg:title := "HOW TO: Scroll an image from left to right." oDlg:border := XBPDLG_RAISEDBORDERTHICK_FIXED oDlg:maxButton := .F. oDlg:minButton := .T. oDlg:create() oDa:= oDlg:drawingArea oDlg:drawingArea:setColorBG( GRA_CLR_WHITE ) oDlg:Show() SetAppWindow(oDlg ) SetAppFocus(oDlg ) ScrollImage("yogi6.png",oDa,200,100) nEvent := xbe_None DO WHILE nEvent != xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO ***** Nuke the dialog oDlg:destroy() RETURN * END PROC ScrollAnImage ******************************************************************************* ******************************************************************************** * FUNCTION ScrollImage(cFile, oMaster) --> oScroll * Greg Doran Copyright (c) 2004 * * HOW TO: Scroll an image from right to left. * * This function scrolls an image from left to right based on the offset * in a panel 1/4 width of the original. * * cFile is the full path and filename of the image file to be processed. * oParent is for example the oDlg:drawingArea * px and py are the location of the bitmap on oParent * ******************************************************************************** FUNCTION ScrollImage(cFile,oParent,px,py) LOCAL nImageX := 0 LOCAL nImageY := 0 LOCAL oScroll := NIL LOCAL oStatic := NIL LOCAL oPS := NIL DO WHILE .T. ***** No bitmap source parameter specified ? IF cFile == NIL .AND. oMaster == NIL EXIT ENDIF ***** If a filename was passed does it have the correct extension? IF !(cFile == NIL ) .AND. !(Upper(Right(cFile,4)) $ ".BMP|.GIF|.JPG|.PNG") EXIT ELSEIF !(cFile == NIL ) ***** It was and has, Load the imagefile oMaster := XbpBitmap():new():create() oMaster:loadFile( cFile ) ENDIF nImageX := oMaster:xSize nImageY := oMaster:ySize FOR nOffset := nImageX TO -nImageX STEP -1 IF !(ValType(oScroll) == "O") oPS := XbpPresSpace():new() oPS:setColor(GRA_CLR_WHITE , GRA_CLR_WHITE) oScroll := XbpBitmap():new():create() oScroll:make(Int(nImageX) ,nImageY) oScroll:PresSpace(oPS) oStatic := XbpStatic():new( oParent,, {px,py},{nImageX,nImageY}) oStatic:type := XBPSTATIC_TYPE_BITMAP oStatic:caption := oScroll oStatic:create() oStatic:setcolorBG(GRA_CLR_WHITE) ENDIF oMaster:draw( oPS,{nOffset, 0, nOffset+nImageX ,nImageY},,, GRA_BLT_BBO_IGNORE) oStatic:LockUpdate(.T.) oStatic:setCaption(oScroll) oStatic:LockUpdate(.F.) oStatic:InValidateRect() sleep(3) NEXT Sleep(300) oScroll:destroy() oMaster:destroy() oScroll := NIL oPS := NIL oMaster := NIL EXIT ENDDO RETURN NIL * END FUNCTION ScrollImage() ******************************************************************************** FUNCTION APPSYS() RETURN nil FUNCTION DBSYS() RETURN nil