Seite 2 von 2

Re: Bildausschneiden vom Desktop

Verfasst: 18.02.2011 10:00
von Velindos
Hallo,
was soll das
probier doch mal selbst was
. Mach ich ja, so was trägt nichts bei!
(z.b. strg+linkemaustaste)
genau das ist der Ansatz! Habe ja das Beispiel schon mit
Snapshot hereingegeben, nur keine AHNUNG wie ich das mit Maus ausserhalb, sprich am Desktop mache.

Gruss ... Velindos

Re: Bildausschneiden vom Desktop

Verfasst: 18.02.2011 10:20
von HeX0R
Velindos hat geschrieben:Hallo,
was soll das
probier doch mal selbst was
. Mach ich ja, so was trägt nichts bei!
So so...
Rings spricht nur aus, was immer mehr hier denken.
Mach nur weiter mit deinen Fragebombardements, du wirst sehen, dass es immer weniger werden, die hilfreich sind.
Mich z.B. nervt diese "Oh ich weiss gerade nicht weiter, fragen wir doch gleich die Jungs im Support-Forum, bevor ich anfange mein eigenes Hirn anzustrengen"-Mentalität ungemein.

Die Lust zu helfen nimmt proportional zu der Unlust des Suchenden selbst kreativ zu werden ab.
Das ist ja das gute daran, mit der Zeit erledigt sich das von selbst.

Re: Bildausschneiden vom Desktop

Verfasst: 18.02.2011 13:49
von Macros
Ich muss da voll zustimmen,
anfangs habe ich versucht, dir zu helfen.
Inzwischen hast du so viel hilfestellungen erhalten, dass durch weitere Fragen nur zwei Schlüsse bleiben:
Entweder du kannst nicht programmieren, oder du bist zu faul weiterzudenken und zu experimentieren.
(Ich denke mal zweiteres)
Wenn du dir die Tipps anschaust, nicht nur kompilierst sondern auch überlegst,
wie du Teile daraus zu dem zusammensetzen könntest, was du brauchst, und dann auf ein Problem stößt,
dann helf ich gerne weiter.

Wenn ich jemand Unbekannten ein Programm nach Wunsch schreiben soll,
lass ich mich im Allgemeinen dafür bezahlen ;)

Edit: Spezifizierung "Fragen":
Fragen der Art: "Kann mir jemand Code geben den ich in mein Programm copy/pasten kann?"

Re: Bildausschneiden vom Desktop

Verfasst: 18.02.2011 17:28
von Velindos
Hallo Leute,
das ist ja starker Tobak! Also zu du läßt dir hefen! Habt ihr beobachtet das ihr im "Anfänger" Forum seit, ist euch entgangen.
Das nächste ist, dann wird dir keiner mehr helfen, dazu kann ich nur sagen das man solche Sprüche für sich behalten soll, denn wie könnt ihr für alle Sprechen???
Wenn es stört das ich fragen stelle, dann wird mir das der Forumchef schon sagen! Also wie gesagt das trägt nichts bei!
Gruss ... Velindos

Re: Bildausschneiden vom Desktop

Verfasst: 18.02.2011 17:40
von SebastianJu2
@velindos

Bin auch Anfänger. Das mit der Maus habe ich auch gerade gesucht. Und das findet man mit F1 im Editor, dann ganz rechts Tab Suchen (ist die hilfreichste suche) dann Maus eingeben und du findest was du suchst.
Jetzt fehlt mir noch das Abfangen von Tastendrücken, weil ich ein geheimes Areal haben will bei dem mit Eingabe eines Codeworts ein versteckter Modus gestartet werden kann, aber das wird sicher auch auf die Art auffindbar sein.

Beispiele gibt es nicht für alles. Meistens sind die Beispiele und Tutorials auch schon alt und man muss sie erst selbst reparieren was für einen Anfänger nicht grad hilfreich ist.

Von daher wirst du kein genau passendes und funktionierendes Beispiel finden sondern selbst coden müssen... bzw dich einlernen...

Ist nicht böse gemeint... :)

Re: Bildausschneiden vom Desktop

Verfasst: 24.02.2011 12:48
von Velindos
Hallo,
wenn der Aufruf der anderen Früchte trägt, dann sind wir fast am Ende!

Also hier meine Lösung, bin natürlich für Verbesserungsvorschläge dankbar!

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

Re: Bildausschneiden vom Desktop

Verfasst: 24.02.2011 13:21
von rolaf
; IDE Options = PureBasic v4.61 (Windows - x64)
Hab ich was verpasst? :shock:

Re: Bildausschneiden vom Desktop

Verfasst: 24.02.2011 13:42
von Velindos
Hallo,
jetzt bin ich so in fahrt das ich meiner Zeit voraus bin! Ich kann dich beruhigen, das war mal wieder ich!
; IDE Options = PureBasic v4.51 (Windows - x64)
Natürlich schon verbessert, Danke!
Gruss ... Velindos