User talk:Demivec: Difference between revisions

From Rosetta Code
Content added Content deleted
mNo edit summary
(Blanked the page)
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
<lang PureBasic>


; i hope there are no hard feelings... here's some code for you...


declare.i MakeDesktopScreenshot(ImageNr,x,y,Width,Height)

Enumeration
#ButtonMakeScreenShot
#ButtonMakeNewScreenShot
#ImageFullScreenShot
#ImageHalfScreenShot
#ImageTempScreenShot
#ImageSelectedArea
EndEnumeration

StopSelecting=#TRUE
style=#PB_Window_SystemMenu
style|#PB_Window_MinimizeGadget
style|#PB_Window_Screencentered

LoadFont(0,"tahoma",9,#PB_Font_HighQuality|#PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(0))

ExamineDesktops():dtw=DesktopWidth(0):dth=DesktopHeight(0)
w=dtw/2:h=dth/2

MakeDesktopScreenshot(#ImageFullScreenShot,0,0,dtw,dth)
CopyImage(#ImageFullScreenShot,#ImageHalfScreenShot)
ResizeImage(#ImageHalfScreenShot,w,h)

OpenWindow(0,0,0,w,h+20,"",style):StickyWindow(0,1)
ButtonGadget(#ButtonMakeNewScreenShot,w-200,h,100,20,"New",#PB_Button_Toggle) ;:PureCOLOR_SetButtonColor(#ButtonMakeNewScreenShot,$ffffff,$000000)
ButtonGadget(#ButtonMakeScreenShot,w-100,h,100,20,"SnipIt",#PB_Button_Toggle) ;:PureCOLOR_SetButtonColor(#ButtonMakeScreenShot,$ffffff,$000000)
ImageGadget(#ImageHalfScreenShot,0,0,w,h,ImageID(#ImageHalfScreenShot))

Repeat
msg= WaitWindowEvent () ;WindowEvent (): Sleep_ (1)
wid= EventWindow ()
mid= EventMenu ()
gid= EventGadget ()
etp= EventType ()
ewp= EventwParam ()
elp= EventlParam () : If msg=16 or GetAsyncKeyState_(#VK_ESCAPE) : End : EndIf

if msg=#WM_LBUTTONUP
if gid=#ImageHalfScreenShot
StopSelecting=#TRUE
endif
endif

if gid=#ImageHalfScreenShot
if etp=#PB_EventType_LeftClick
x1 =WindowMouseX(0)
y1 =WindowMouseY(0)
t1.s=""
t1.s+str(x1*2 )+"|"
t1.s+str(y1*2 )+"|"
SetWindowTitle(0,t1.s)
StopSelecting=#FALSE
endif
endif

if gid=#ImageHalfScreenShot
if msg=#WM_MOUSEMOVE and not StopSelecting=#TRUE
x2 =WindowMouseX(0)
y2 =WindowMouseY(0)
sw =abs(x2-x1)
sh =abs(y2-y1)

t1.s=""
t1.s+str(x1*2)+"|"
t1.s+str(y1*2)+"|"
t2.s=""
t2.s+str(sw*2)+"|"
t2.s+str(sh*2)+"|"
SetWindowTitle(0,t1.s+t2.s)

SetGadgetState(#ImageHalfScreenShot,ImageID(#ImageHalfScreenShot))
GrabImage(#ImageHalfScreenShot,#ImageTempScreenShot,0,0,w,h)
StartDrawing(ImageOutput(#ImageTempScreenShot))
DrawImage(ImageID(#ImageTempScreenShot), 0, 0)
DrawingMode(#PB_2DDrawing_XOr | #PB_2DDrawing_Outlined)
Box(x1,y1,sw,sh, $FFFFFF)
StopDrawing()
SetGadgetState(#ImageHalfScreenShot,ImageID(#ImageTempScreenShot))
endif
endif

Select msg
case #PB_Event_Gadget
Select gid
case #ButtonMakeNewScreenShot
hidewindow(0,1)
sleep_(1000)
MakeDesktopScreenshot(#ImageFullScreenShot,0,0,dtw,dth)
CopyImage(#ImageFullScreenShot,#ImageHalfScreenShot)
ResizeImage(#ImageHalfScreenShot,w,h)
SetGadgetState(#ImageHalfScreenShot,ImageID(#ImageHalfScreenShot))
hidewindow(0,0)

case #ButtonMakeScreenShot :
Select GetGadgetState(#ButtonMakeScreenShot)
case 0
SetGadgetState(#ImageHalfScreenShot,ImageID(#ImageHalfScreenShot))
case 1
t.s=GetWindowTitle(0)
t3.s=" - "
t3.s+str(x1*2)+"|"
t3.s+str(y1*2)+"|"
t3.s+str(sw*2)+"|"
t3.s+str(sh*2)+"|"
SetWindowTitle(0,t1.s+t2.s+t3.s)
GrabImage(#ImageFullScreenShot, #ImageSelectedArea, x1*2-2,y1*2-2,sw*2,sh*2)
SetClipboardImage(#ImageSelectedArea)
SetGadgetState(#ImageHalfScreenShot,ImageID(#ImageSelectedArea))
EndSelect

EndSelect
EndSelect
ForEver
End

Procedure.i MakeDesktopScreenshot(ImageNr,x,y,Width,Height)
hImage = CreateImage(ImageNr,Width,Height)
hDC = StartDrawing(ImageOutput(ImageNr))
DeskDC = GetDC_(GetDesktopWindow_())
BitBlt_(hDC,0,0,Width,Height,DeskDC,x,y,#SRCCOPY)
StopDrawing()
ReleaseDC_(GetDesktopWindow_(),DeskDC)
ProcedureReturn hImage
EndProcedure

</lang>

Latest revision as of 21:37, 28 August 2012