#include "Appevent.ch" #include "Common.ch" #include "Gra.ch" #include "Xbp.ch" PROCEDURE AppSys RETURN PROCEDURE DbeSys RETURN ************** PROCEDURE Main ************** LOCAL oXbp, mp1, mp2, nEvent, oDlg, drawingArea, oPS LOCAL aSize := { 380, 350 } LOCAL aPos := CenterPos( aSize, AppDesktop():currentSize() ) oDlg := XbpDialog():new(,, aPos, aSize ) oDlg:border := XBPDLG_SIZEBORDER oDlg:title := 'Test' oDlg:taskList := .F. drawingArea := oDlg:drawingArea drawingArea:ClipChildren := .T. oDlg:create() SetAppWindow( oDlg ) SetAppFocus( oDlg ) oXbp:= XbpPushButton():new( drawingArea,, { 50, 151 }, { 100, 24 } ) oXbp:caption := 'test' oXbp:create() oXbp:= XbpSle():new( drawingArea,, { 155, 151 }, { 100, 24 } ) oXbp:create():SetData( 'Test' ) oPS:= drawingArea:lockPS() GraLine( oPS, { 0, 160 }, { 400, 160 } ) drawingArea:unLockPS( oPS ) oXbp:= XbpStatic():new( drawingArea,, { 0, 190 }, { drawingArea:currentSize()[ 1 ], 100 } ) oXbp:type:= XBPSTATIC_TYPE_BITMAP oXbp:caption:= Screen2Bitmap( drawingArea, { 0, 151, drawingArea:currentSize()[ 1 ], 151 + 100 } ) oXbp:create() nEvent:= xbe_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:destroy() QUIT RETURN ******************************************** FUNCTION Screen2Bitmap( oSourceArea, aRect ) ******************************************** LOCAL oTargetPS := XbpPresSpace():new():create() LOCAL oBitmap := XbpBitmap():new():create() LOCAL oPS := oSourceArea:lockPS() LOCAL nSizeX := aRect[ 3 ] - aRect[ 1 ] LOCAL nSizeY := aRect[ 4 ] - aRect[ 2 ] oBitmap:presSpace( oTargetPS ) oBitmap:make( nSizeX, nSizeY ) GraBitBlt( oTargetPS, oPS, { 0, 0, nSizeX, nSizeY }, aRect ) oSourceArea:unLockPS( oPS ) Sleep( 0 ) oTargetPS:destroy() RETURN oBitmap ************************************* FUNCTION CenterPos( aSize, aRefSize ) ************************************* RETURN { Int( (aRefSize[1] - aSize[1]) / 2 ), ; Int( ( (aRefSize[2] - aSize[2]) / 2 ) * 1.4 ) }