Code: Alles auswählen
; Bildausschneiden am Desktop
; Dient zum Ausschneiden von Bilder am Desktop
; Velindos 2011-02
; Datei mit Velindos Start muss noch angepasst werden, ein Bild mit 230x230
; Mittels ESC kann abgebrochen werden
Enumeration
#FrameMain
#ParentWindow
#ChildWindow
EndEnumeration
;{-Image Plugin
UsePNGImageDecoder()
UsePNGImageEncoder()
;}
Enumeration
#XI_Umschalten
#XI_ChildButton
#XI_SnipperEinAus
#XI_Image
#XI_StartP
#XI_EndeP
#XI_VirtStartP
#XI_VirtStartP2
#XI_VirtEndeP
#XI_SchnittP
EndEnumeration
Enumeration
#imgCapture
#DesktopImage
#myImage
#myImage2
#Grabimage
#VelindosImageKlein
EndEnumeration
Procedure CaptureWindow()
GetWindowRect_(GetDesktopWindow_(), @r.rect)
CreateImage(#imgCapture, r\right - r\left, r\bottom - r\top)
DC = StartDrawing(ImageOutput(#imgCapture))
BitBlt_(DC, 0, 0, r\right - r\left, r\bottom - r\top, GetWindowDC_(GetDesktopWindow_()), 0, 0, #SRCCOPY)
StopDrawing()
EndProcedure
SnipperEinAus=0
Procedure SetWinTransparency(win,level)
If level>=0 And level<=100
SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000
SetLayeredWindowAttributes_(WindowID(win),0,255*level/100,2)
EndIf
EndProcedure
Procedure SnipperWindow()
;If OpenWindow(#ChildWindow,100,150,250,200,"OtherWindow",#PB_Window_SystemMenu)
;ButtonGadget(#XI_ChildButton,100,100,50,25,"Test")
Childstatus=1
ExamineDesktops()
yy=DesktopHeight(0)
ww=DesktopWidth(0)
;ParentWindow damit nichts in der Taskleiste erscheint
OpenWindow(#ParentWindow,0,0,DesktopWidth(0),DesktopHeight(0),"Snipping Test",#PB_Window_Invisible)
;Unser Fenster mit dem wir auf den Desktop malen wollen
OpenWindow(#ChildWindow,0,0,DesktopWidth(0),DesktopHeight(0),"Snipping Test",#PB_Window_BorderLess|#PB_Window_Invisible,GetDesktopWindow_())
;Window auf Layered Window umschalten
SetWindowLong_(WindowID(#ChildWindow),#GWL_HWNDPARENT,WindowID(#ParentWindow))
;SetWinTransparency(#ParentWindow,40)
SetWinTransparency(#ChildWindow,40)
;Fenster fixieren
SetWindowPos_(WindowID(#ChildWindow),#HWND_BOTTOM,0,0,0,0,#SWP_NOMOVE|#SWP_NOREPOSITION|#SWP_NOSIZE)
;Fenster anzeigen
HideWindow(#ChildWindow,0)
;StickyWindow(#ChildWindow,0)
AddKeyboardShortcut(#ChildWindow, #PB_Shortcut_Escape, 15) ; Escape einschalten
;EndIf
EndProcedure
OpenWindow(#FrameMain,0,0,650,300,"Test",#PB_Window_SystemMenu)
TextGadget(#XI_SnipperEinAus,150,250,150,25,Str(SnipperEinAus))
ButtonGadget(#XI_Umschalten,150,270,150,25,"Open another window")
TextGadget(#XI_StartP, 250, 6, 290, 20, "Start")
TextGadget(#XI_EndeP, 250, 26, 290, 20, "Ende")
TextGadget(#XI_VirtStartP, 250, 66, 290, 20, "VirtualStart")
TextGadget(#XI_VirtEndeP, 250, 86, 290, 20, "VirtualEnde")
TextGadget(#XI_VirtStartP2, 250, 126, 290, 20, "VirtualStart")
TextGadget(#XI_SchnittP, 250, 146, 290, 20, "Bildausschnitt")
If LoadImage(#myImage2, "C:\Velindos\VelindosStart.bmp")
ImageGadget(#XI_Image,10,10,300,300,ImageID(#myImage2))
EndIf
Repeat
EventID=WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow:Break
Case #PB_Event_Gadget
Select EventGadget()
Case #XI_Umschalten
SnipperEinAus=1
Childstatus=1
SetGadgetText(#XI_SnipperEinAus,"1")
SnipperWindow()
Case #XI_ChildButton;The gadget from the other window must have DIFFERENT ids
MessageRequester("click","Button from 2nd window",0)
EndSelect
Case #PB_Event_CloseWindow
If EventWindow()= #ParentWindow ;Here you detect if the window to close is your additional window
CloseWindow(#ParentWindow)
SnipperEinAus=0
SetGadgetText(#XI_SnipperEinAus,"0")
Else
Quit = #ParentWindow
EndIf
Case #WM_MOUSEMOVE
If Childstatus=1
If EventwParam() = #MK_LBUTTON
;- Maus Move (in Bewegung)
;MX=0:MY=0
MX = DesktopMouseX() : MY = DesktopMouseY()
Bildauschnitt=A
hdc = GetDC_(WindowID(#ChildWindow))
DrawFocusRect_(hdc,frc.RECT)
If ((IX < MX) And (IY > MY))
SetRect_(frc,IX,MY, MX,IY)
ElseIf ((IX > MX) And (IY > MY))
SetRect_(frc,MX, MY, IX,IY)
ElseIf ((IX > MX) And (IY < MY))
SetRect_(frc,MX,IY, IX, MY)
Else
SetRect_(frc,IX,IY,MX,MY)
;ClearRect_(frc,IX,IY,MX,MY)
EndIf
DrawFocusRect_(hdc,frc)
ReleaseDC_(WindowID(#ChildWindow),hdc)
EndIf
EndIf
Case #WM_LBUTTONUP
;- Maus Up (Losgelassen)
If Childstatus=1
; Mauswert in X/Y(2)
X2 = DesktopMouseX()
Y2 = DesktopMouseY()
SetGadgetText(#XI_StartP, "Start Maus-Klick-Position: X1= "+Str(X1)+", Y1= "+Str(Y1))
SetGadgetText(#XI_EndeP, "Stop Maus-Klick-Position: X1= "+Str(X2)+", Y1= "+Str(Y2))
; Festlegen des Ausschnitts
;Bildausschnitt RECHTS UNTEN
If X2>X1 And Y2>Y1
BX1=X1
BY1=Y1
BX2=X2
BY2=Y2
Delay(20)
EndIf
;Bildausschnitt RECHTS OBEN
If X2>X1 And Y2<Y1
BX1=X1
BY1=Y2
BX2=X2
BY2=Y1
Delay(20)
EndIf
;Bildausschnitt LINKS UNTEN
If X2<X1 And Y2>Y1
BX1=X2
BY1=Y1
BX2=X1
BY2=Y2
Delay(20)
EndIf
;Bildausschnitt LINKS OBEN
If X2<X1 And Y2<Y1
BX1=X2
BY1=Y2
BX2=X1
BY2=Y1
Delay(20)
EndIf
SetGadgetText(#XI_VirtStartP, "VirtualStart Maus-Klick-Position: X1= "+Str(BX1)+", Y1= "+Str(BY1))
SetGadgetText(#XI_VirtEndeP, "VirtualStop Maus-Klick-Position: X2= "+Str(BX2)+", Y2= "+Str(BY2))
; Berechnen des Bildauschnittes
Speicherbild_Breite = BX2-BX1
Speicherbild_Hoehe = BY2-BY1
SetGadgetText(#XI_VirtStartP2, "Bildausschnitt STARTPunkt BX1="+Str(BX1)+", BY1= "+Str(BY1))
SetGadgetText(#XI_SchnittP, "Desktop Bildausschnitt Width="+Str(Speicherbild_Breite)+", Height= "+Str(Speicherbild_Hoehe))
GrabImage(#imgCapture,#myImage2, BX1, BY1, Speicherbild_Breite, Speicherbild_Hoehe)
ResizeImage(#myImage2,230,230)
SetGadgetState(#XI_Image,ImageID(#myImage2))
SetClipboardImage(#myImage2)
; Ausschneiden Beendet Snipping benden
SnipperEinAus=0
; Childfenster ausschalten
SetGadgetText(#XI_SnipperEinAus,"0")
CloseWindow(#ChildWindow)
CloseWindow(#ParentWindow)
Childstatus=0
SetRect_(frc,0,0,0,0)
; Zurück in Hauptfenster, Child geschlossen
EndIf
Case #WM_LBUTTONDOWN
;- Maus Down(gedrückt)
If Childstatus=1
IX = DesktopMouseX() : IY = DesktopMouseY()
; Mauswert in X/Y(1)
X1 = DesktopMouseX()
Y1 = DesktopMouseY()
CaptureWindow()
SetClipboardImage(#imgCapture)
GetClipboardImage(#myImage2,32)
ResizeImage(#myImage2,230,230)
SetGadgetState(#XI_Image,ImageID(#myImage2))
SetActiveWindow(#FrameMain)
EndIf
EndSelect
Gadget = EventGadget()
Select Gadget
Case 15 ;Escape Taste gedrückt
SetRect_(frc,0,0,0,0)
SnipperEinAus=0
SetGadgetText(#XI_SnipperEinAus,"0")
CloseWindow(#ChildWindow)
CloseWindow(#ParentWindow)
Childstatus=0
EndSelect
Until event = #PB_Event_CloseWindow
; IDE Options = PureBasic v4.61 (Windows - x64)
Gruss ... Velindos