RE:Colocar Imagen como Marca de Agua en Reporte
Hola Gabriel, bueno mira aca te paso un codigo que tendrias que probar, es para imgenes en BMP de ultima tendras que convertir tu word a un BMP sabes como hacerlo es facil. Probalo y si te funciona todo bien. Sino fijate al final que te puse un link de otro codigo el cual ya es mas complejo y lo tenes que analizar a ver si te sirve, que funciona es seguro pero velo vos.
Cualquier cosa me avisas
DO decl
#DEFINE LR_LOADFROMFILE 16
LOCAL lcBitmap
lcBitmap = "C:\Windows\bosque.bmp"
= LoadAndShowBitmap (lcBitmap, LR_LOADFROMFILE, 20,100)
PROCEDURE LoadAndShowBitmap (lcBitmap, lnLoadOptions, lnX,lnY)
#DEFINE IMAGE_BITMAP 0
LOCAL hBitmap
hBitmap = LoadImage (0, lcBitmap, IMAGE_BITMAP,;
0,0, lnLoadOptions)
IF hBitmap <> 0
= ShowBitmap (hBitmap, lnX,lnY)
= DeleteObject (hBitmap)
ELSE
= MessageB (lcBitmap + Chr(13) + Chr(13) +;
"Check if this is a valid BMP file.",;
32, " Unable to load an image from file")
ENDIF
PROCEDURE ShowBitmap (hBitmap, lnX, lnY)
#DEFINE AC_SRC_OVER 0
#DEFINE AC_SRC_ALPHA 1
#DEFINE AC_SRC_NO_ALPHA 2
#DEFINE SRCCOPY 13369376
LOCAL hWnd, hDC, hMemDC, lnWidth, lnHeight
STORE 0 TO lnWidth, lnHeight
= GetBitmapSize (hBitmap, @lnWidth, @lnHeight)
hWnd = GetActiveWindow()
hDC = GetWindowDC (hWnd)
hMemDC = CreateCompatibleDC(hDC)
= SelectObject (hMemDC, hBitmap)
LOCAL lnAlphaBlend, lnResult,;
lnBlendOp, lnBlendFlags, lnSrcConstAlpha, lnAlphaFormat
lnBlendOp = AC_SRC_OVER && always
lnBlendFlags = 0 && always
lnSrcConstAlpha = 48 && intensity, up to 255
lnAlphaFormat = 0 && try AC_SRC_ALPHA on non-white background
lnAlphaBlend = lnBlendOp +;
BitLShift(lnBlendFlags, 8) +;
BitLShift(lnSrcConstAlpha, 16) +;
BitLShift(lnAlphaFormat, 24)
lnResult = AlphaBlend (hDC, lnX,lnY, lnWidth,lnHeight,;
hMemDC, 0,0, lnWidth,lnHeight,;
lnAlphaBlend)
IF lnResult = 0
? "Error:", GetLastError()
ENDIF
= DeleteDC(hMemDC)
= ReleaseDC (hWnd, hDc)
RETURN .T.
FUNCTION GetBitmapSize (hBitmap, lnWidth, lnHeight)
#DEFINE BITMAP_STRU_SIZE 24
LOCAL lcBuffer
lcBuffer = Repli(Chr(0), BITMAP_STRU_SIZE)
IF GetObjectA(hBitmap, BITMAP_STRU_SIZE, @lcBuffer) <> 0
lnWidth = buf2dword (SUBSTR(lcBuffer, 5,4))
lnHeight = buf2dword (SUBSTR(lcBuffer, 9,4))
ENDIF
FUNCTION buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
BitLShift(Asc(SUBSTR(lcBuffer, 2,1)), 8) +;
BitLShift(Asc(SUBSTR(lcBuffer, 3,1)), 16) +;
BitLShift(Asc(SUBSTR(lcBuffer, 4,1)), 24)
PROCEDURE decl
DECLARE INTEGER CreateCompatibleDC IN gdi32 INTEGER hdc
DECLARE INTEGER DeleteDC IN gdi32 INTEGER hdc
DECLARE INTEGER GetActiveWindow IN user32
DECLARE INTEGER GetWindowDC IN user32 INTEGER hwnd
DECLARE INTEGER ReleaseDC IN user32 INTEGER hwnd, INTEGER dc
DECLARE INTEGER DeleteObject IN gdi32 INTEGER hObject
DECLARE INTEGER SelectObject IN gdi32 INTEGER hdc, INTEGER hObject
DECLARE INTEGER LoadImage IN user32;
INTEGER hinst, STRING lpszName, INTEGER uType,;
INTEGER cxDesired, INTEGER cyDesired, INTEGER fuLoad
DECLARE INTEGER GetObject IN gdi32 AS GetObjectA;
INTEGER hgdiobj, INTEGER cbBuffer, STRING @lpvObject
DECLARE INTEGER AlphaBlend IN Msimg32;
INTEGER hDestDC, INTEGER x, INTEGER y,;
INTEGER nWidth, INTEGER nHeight, INTEGER hSrcDC,;
INTEGER xSrc, INTEGER ySrc, INTEGER nWidthSrc,;
INTEGER nHeightSrc, INTEGER blendFunction
DECLARE INTEGER GetLastError IN kernel32
Sino te funciono ese codigo aca te paso un link mas seguro:
http://www.portalfox.com/index.php?name=News&file=article&sid=2481
Suerte y avisame!!!!!!!!!!!!
Pablo - Argentina