Prezados,
Segue exemplo
Imagem BMP com fundo na cor MAGENTA
Janela com fundo Magenta
Adicione o controle de imagem exatamente no tamanho da tela
CODIGO GLOBAL DO PROJETO:
CONSTANT
USER32 = "user32"
GDI32 = "gdi32"
MAGNIFICATION = "magnification.dll"
END
IF (SysWindowsVersion(sysProcessor) = 64 _AND_ NOT In64bitMode()) _AND_ Val(SysWindowsVersion(sysVersionNumber)) <= 6 THEN
EndProgram("This program cannot operate on a 64-bit system.", "Start the 64-bit version of this program.", True)
END
No open da janela coloque o seguinte código:
GLOBAL DECLARATIONS
gbVista is boolean = (Val(SysWindowsVersion(sysVersionNumber)) >= 6)
gnZoom is int = 2
API(USER32, "SetWindowLongA", Handle(), -20, 0x00080000)
API(USER32, "SetLayeredWindowAttributes", Handle(), LightMagenta, 255, 0x00000001)
gnDC is system int
gnHwnd is system int
gnRgn is system int = API(GDI32,"CreateEllipticRgn", 0, 0, 174, 174)
IF gbVista = False THEN
gnDC = dStartDrawing(IMG_MAGNIFIER)
gnHwnd = Handle(IMG_MAGNIFIER)
API(GDI32,"SelectObject", gnDC, gnRgn)
END
CursorDisplay(False)
LOCAL
nX is int = LoWord(CursorPos(cpScreen))
nY is int = HiWord(CursorPos(cpScreen))
MyWindow..X = nX - (IMG_MAGNIFIER..X + IMG_MAGNIFIER..Width / 2)
MyWindow..Y = nY - (IMG_MAGNIFIER..Y + IMG_MAGNIFIER..Height / 2)
IF gbVista THEN
InitializeVistaMagnifier()
END
END OF INICIALIZATION
WinStatus(WIN_Magnifier, AboveAll)
Update()
WIN_Magnifier..Visible = True
IMG_MAGNIFIER = IMG_MAGNIFIER..InitialValue
WindowPosition()
CLOSING OF JANELA
IF gbVista THEN
API(MAGNIFICATION, "MagUninitialize")
END
CursorDisplay(True)
API(GDI32, "DeleteObject", gnRgn)
dEndDrawing(IMG_MAGNIFIER)
PROCEDURES LOCAIS DA JANELA
Procedure InitializeVistaMagnifier()
LoadDLL(MAGNIFICATION)
API(MAGNIFICATION, "MagInitialize")
gnHwnd = API(USER32, "CreateWindowExA", 0, "Magnifier", ProjectInfo(piProjectName), ...
0x40000000 + 0x08000000, 0, 0, IMG_MAGNIFIER..Width, ...
IMG_MAGNIFIER..Height, Handle(IMG_MAGNIFIER), 0, SysInstance(), 0)
gnDC = API(USER32, "GetWindowDC", gnHwnd)
API(USER32, "SetWindowRgn", gnHwnd, gnRgn, True)
arrZoom is array of 3 by 3 4-byte real
arrZoom[1][1] = gnZoom
arrZoom[2][2] = gnZoom
arrZoom[3][3] = 1
API(MAGNIFICATION, "MagSetWindowTransform", gnHwnd, &arrZoom)
API(USER32, "ShowWindow", gnHwnd, 5)
API(USER32, "SetWindowPos", gnHwnd, -1, 0, 0, 0, 0, 0x0001 + 0x0040)
Procedure Update()
nX, nY are int
nXCopy, nYCopy are int
nXCopy = (MyWindow..X + IMG_MAGNIFIER..X + IMG_MAGNIFIER..Width / 2) - (86 / gnZoom)
nYCopy = (MyWindow..Y + IMG_MAGNIFIER..Y + IMG_MAGNIFIER..Height / 2) - (86 / gnZoom)
IF gbVista THEN
nX = LoWord(CursorPos(cpScreen))
nY = HiWord(CursorPos(cpScreen))
RECT is structure
nLeft, nTop, nRight, nBottom are int
END
stRectCopy is RECT
stRectCopy:nLeft = nXCopy
stRectCopy:nRight = 172
stRectCopy:nTop = nYCopy
stRectCopy:nBottom = 172
nHandle is system int = gnHwnd
IF In64bitMode() THEN
API(MAGNIFICATION, "MagSetWindowSource", nHandle, &stRectCopy)
ELSE
API(MAGNIFICATION, "MagSetWindowSource", nHandle, stRectCopy)
END
API(USER32, "InvalidateRect", nHandle, Null, True)
ELSE
dCopyBlt(copyScreen, IMG_MAGNIFIER, copySrcCopy, nXCopy, nYCopy, 172 / gnZoom, 172 / gnZoom, 0, 0, 172, 172)
END
Procedure WindowPosition()
EndTimer(1000)
nX is int
nY is int
nOldX is int
nOldY is int
nX = LoWord(CursorPos(cpScreen))
nY = HiWord(CursorPos(cpScreen))
nOldX = MyWindow..X
nOldY = MyWindow..Y
IF (nOldX <> nX - (IMG_MAGNIFIER..X + IMG_MAGNIFIER..Width / 2)) _OR_ (nOldY <> nY - (IMG_MAGNIFIER..Y + IMG_MAGNIFIER..Height / 2)) THEN
WinSize(WIN_Magnifier, (nX - (IMG_MAGNIFIER..X + IMG_MAGNIFIER..Width / 2)), (nY - (IMG_MAGNIFIER..Y + IMG_MAGNIFIER..Height / 2)), MyWindow..Width, MyWindow..Height)
END
WinStatus(WIN_Magnifier, AboveAll)
Timer(WindowPosition, 1, 1000)
BOTAO ESC - SHORTCUT KEY HOT KEY = ESC
Close
RESULTADO FINAL
--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/