User talk:Demivec

From Rosetta Code
Revision as of 22:15, 26 August 2012 by rosettacode>BrianO

<lang PureBasic>


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


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

Enumeration

  1. ButtonMakeScreenShot
  2. ButtonMakeNewScreenShot
  3. ImageFullScreenShot
  4. ImageHalfScreenShot
  5. ImageTempScreenShot
  6. 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>