DEF SetCursorPos(2)!"User32","SetCursorPos"
DEF CreateCompatibleBitmap(3) !"GDI32","CreateCompatibleBitmap"
Var Area&=150
Var Zoom&=5
Windowstyle 80
Fenêtre 15,15-Area&+4,Area&+18
CLS 0
Déclarer Area_Pic&,farbe&,Lupe_Pos&
WhileNot iskey(27)
Waitinput 30
Area_Pic&=CaptureArea(CursorPos("X1",1)-((Area&/Zoom&)/2),CursorPos("Y1",1)-((Area&/Zoom&)/2),(Area&/Zoom&),(Area&/Zoom&))
Début de peinture Area_Pic&
Line 0,((Area&/Zoom&)/2) - ((Area&/Zoom&)/2),((Area&/Zoom&)/2)
Line ((Area&/Zoom&)/2)+1,((Area&/Zoom&)/2) - (Area&/Zoom&),((Area&/Zoom&)/2)
Line ((Area&/Zoom&)/2),0 - ((Area&/Zoom&)/2),((Area&/Zoom&)/2)
Line ((Area&/Zoom&)/2),((Area&/Zoom&)/2)+1 - ((Area&/Zoom&)/2),(Area&/Zoom&)
EndPaint
DrawSizedPic Area_Pic&, 2, 2 - Area&, Area&; 0
Début de peinture 0
farbe&=GetPixel(CursorPos("X1",1),CursorPos("Y1",1))
EndPaint
Couleur du texte RGB(255,255,255),0
DrawText 0, Area&+2, Area&, Area&+18, Space$(100),0
DrawText 0, Area&+2, Area&, Area&+18, "px: "+Str$(CursorPos("X1",1))+", "+Str$(CursorPos("Y1",1)), 0
DrawText 0, Area&+2, Area&, Area&+18, "#"+Hex$(GetRValue(farbe&))+Hex$(GetGValue(farbe&))+Hex$(GetBValue(farbe&)), 2
deleteobject Area_Pic&
Si HandleHover()=%hwnd
Lupe_Pos&=Lupe_Pos&+1
Cas Lupe_Pos&=4 : Lupe_Pos&=0
Cas Lupe_Pos&=0 : SetWindowPos %hwnd=15,15 - Area&+4,Area&+18;-1
Cas Lupe_Pos&=1 : SetWindowPos %hwnd=15,(%MaxY-(Area&+15+18)) - Area&+4,Area&+18;-1
Cas Lupe_Pos&=2 : SetWindowPos %hwnd=(%MaxX-(Area&+15+4)),(%MaxY-(Area&+15+18)) - Area&+4,Area&+18;-1
Cas Lupe_Pos&=3 : SetWindowPos %hwnd=(%MaxX-(Area&+15+4)),15 - Area&+4,Area&+18;-1
EndIf
Cas (Iskey(37) or Iskey(38) or Iskey(39) or Iskey(40)) : SetCursorPos(CursorPos("X1",1)+IF(Iskey(37),-1,Si(Iskey(39),1,0)),CursorPos("Y1",1)+IF(Iskey(38),-1,Si(Iskey(40),1,0)))
Endwhile
Proc CaptureArea
Paramètres xpos%,ypos%,maxx!,maxY!
Var hdc& = Externe("User32","GetDC",0)
Var hmdc& = Externe("GDI32","CreateCompatibleDC",hdc&)
Var hbitmap& = CreateCompatibleBitmap(hdc&,maxx!,maxY!)
Externe("GDI32","SelectObject",hmdc&, hbitmap&)
Externe("GDI32","BitBlt",hmdc&, 0, 0, maxx!, maxY!, hdc&, xpos%, ypos%, $0CC0020)
hbitmap& = Externe("GDI32","GetCurrentObject",hmdc&, 7)
Externe("GDI32","DeleteDC",hmdc&)
Externe("User32","ReleaseDC","User32","ReleaseDC")
Retour hbitmap&
ENDPROC
Proc CursorPos
Paramètres Modus$, global&, hdl&
Déclarer mpos#
Faible mpos#,8
Externe("user32","GetCursorPos",mpos#)
Cas global&<>1 : Externe("User32","ScreenToClient",hdl&,mpos#)
Cas Modus$="X1" : Retour long(mpos#,0)
Cas Modus$="Y1" : Retour long(mpos#,4)
Cas Modus$="X2" : Retour IF(global&=1,%maxx,width(hdl&))-long(mpos#,0)
Cas Modus$="Y2" : Retour IF(global&=1,%maxy,height(hdl&))-long(mpos#,4)
Dispose mpos#
Retour 1
ENDPROC
Proc HandleHover
Déclarer mpos#
Faible mpos#,8
Externe("user32","GetCursorPos",mpos#)
Retour Externe("User32","WindowFromPoint",long(mpos#,0),long(mpos#,4))
Dispose mpos#
ENDPROC