Bild mit Maus ohne Scrollbalken verschieben?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Bild mit Maus ohne Scrollbalken verschieben?

Beitrag von Velindos »

Hallo Leute!

Möchte das Bild und nicht die SCROLL_AreaGadget verschieben, jemand einen Tip?

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;- [07] SCROLL
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;=> DE/ENCODER
UsePNGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
; -------------------------------
InitMouse()
; -------------------------------
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ SCROLL
Enumeration
  ;   #Win
  #DRW_SCROLL_Image
EndEnumeration
; ================================
#SCROLL_Zoomspeed = 1 
#SC_DragMove = $F012
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ SCROLL

Global Win


Global Container_GraphX = 805
Global Container_GraphY = 840

Global Btn_10_GrapXY = 10

Global *gOldEditProc_29

Global *ImageMemory
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ 
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CreateImage(#DRW_SCROLL_Image, 80,80) 
; =============================================================
; LoadImage(#DRW_SCROLL_Image,"D:\[Pure@API]\[STORE]\BMP\Abendessen.bmp")
LoadImage(#DRW_SCROLL_Image, "D:\[Pure@API]\[STORE]\PNG\Arduino UNO Bild 2.png")
; =============================================================
;    If MemorySize(*ImageMemory) <> 0: FreeMemory(*ImageMemory):EndIf
; -------------------------------
*ImageMemory = EncodeImage(#DRW_SCROLL_Image)
; =============================================================
If IsImage(#DRW_SCROLL_Image):FreeImage(#DRW_SCROLL_Image):EndIf
; -------------------------------
CatchImage(#DRW_SCROLL_Image, *ImageMemory, MemorySize(*ImageMemory))
; =============================================================
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ [07] S C R O L L I N G 
;  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global SCROLL_Aktiv = 0
; ----------------------------------------------
Global Container_07
Global SCROLL_ImageGadget
Global SCROLL_AreaGadget
Global SCROLL_Scrollbar
; ----------------------------------------------
Global SCROLL_Wheel = 8
; ------------------------------
Global Scroll_Trackgadget_Min = 1
Global Scroll_Trackgadget_Max = 15
; ----------------------------------------------
Global Scroll_LeseBild_GraphX.f
Global Scroll_LeseBild_GraphY.f
; ----------------------------------------------
Global Scroll_Zoom_Faktor.f = 1.0
; ----------------------------------------------
Global Scroll_Case_Faktor   = 8
; ----------------------------------------------
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>
;-- S C R O L L
;- >>>>>>>>>>>>>>>>>>>>>>>>>
Procedure.w MouseWheelDelta()
  Static MouseDelta.w
  Define ret
  
  MouseDelta + ((EventwParam()>>16)&$FFFF)
  ret = MouseDelta/120
  MouseDelta - ret*120
  
  ProcedureReturn -ret
EndProcedure 
Procedure IsMouseOver(hWnd)
  GetWindowRect_(hWnd,mr.RECT)
  GetCursorPos_(mp.POINT)
  Result = PtInRect_(mr,mp\y << 32 + mp\x)
  ProcedureReturn Result
EndProcedure
; ----------------------------
Procedure Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget)  
  ; ----------------------------
  Protected Scroll_LeseBildKopieFormat
  ; -----------------------------
  Protected Scroll_web_x.f
  Protected Scroll_web_y.f
  ; -----------------------------
  Protected FSZ_Display_Bild_GraphX$
  Protected FSZ_Display_Bild_GraphY$
  Protected RightText_Summe$
  ; -----------------------------
  If IsImage(#DRW_SCROLL_Image):FreeImage(#DRW_SCROLL_Image):EndIf
  CatchImage(#DRW_SCROLL_Image, *ImageMemory, MemorySize(*ImageMemory))
  ; ----------------------------
  If Scroll_LeseBildKopieFormat = 1 
    ; Horizontales Bild
    Scroll_web_x = Int(Scroll_LeseBild_GraphX     * Scroll_Zoom_Faktor)
    Scroll_web_y = Int(Scroll_LeseBild_GraphY  * Scroll_Zoom_Faktor)
    
  ElseIf Scroll_LeseBildKopieFormat = 2
    ; Vertikales Bild
    Scroll_web_x = Int(Scroll_LeseBild_GraphX     * Scroll_Zoom_Faktor)
    Scroll_web_y = Int(Scroll_LeseBild_GraphY  * Scroll_Zoom_Faktor)
    
  Else
    Scroll_web_x = Int(Scroll_LeseBild_GraphX     * Scroll_Zoom_Faktor)
    Scroll_web_y = Int(Scroll_LeseBild_GraphY  * Scroll_Zoom_Faktor)
  EndIf
  ; ----------------------------
  ; Debug "Scroll_web_x = "+Scroll_web_x
  ; Debug "Scroll_web_y = "+Scroll_web_y 
  ; ----------------------------
  If Scroll_web_x > 0
    If Scroll_web_y > 0
      ResizeImage(#DRW_SCROLL_Image, Scroll_web_x, Scroll_web_y,#PB_Image_Smooth)
    EndIf
  EndIf
  ; ----------------------------
  ClearDebugOutput()
  ; ----------------------------
  SetGadgetAttribute(SCROLL_AreaGadget, #PB_ScrollArea_InnerWidth,   Scroll_web_x)
  SetGadgetAttribute(SCROLL_AreaGadget, #PB_ScrollArea_InnerHeight,  Scroll_web_y)
  ; ----------------------------
  ResizeGadget(SCROLL_ImageGadget, #PB_Ignore, #PB_Ignore, Scroll_web_x, Scroll_web_y)
  ; ----------------------------
  SetGadgetState(SCROLL_ImageGadget,ImageID(#DRW_SCROLL_Image))
  ; -----------------------------
  FSZ_Display_Bild_GraphX$ = Str(Scroll_web_x)
  FSZ_Display_Bild_GraphY$ = Str(Scroll_web_y)
  ; -----------------------------------
  RightText_Summe$ = "SCROLL-IMAGE Breite/Höhe = "+FSZ_Display_Bild_GraphX$+" / "+FSZ_Display_Bild_GraphY$+"  " 
  ; -----------------------------------
  ; FSZ_LEFTTEXT(RightText_Summe$) 
  ; -----------------------------------
  HideGadget(SCROLL_ImageGadget,0)
  ; ----------------------------
EndProcedure
Procedure Scroll_Zooming(SCROLL_AreaGadget,SCROLL_ImageGadget, Faktor)
  ; -------------------------------
  HideGadget(SCROLL_ImageGadget,1)
  ; -------------------------------
  Select Faktor
      ;{ Minus
      ; -------------------------------
    Case 1
      Scroll_Zoom_Faktor = 0.27
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 2
      Scroll_Zoom_Faktor = 0.33
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 3
      Scroll_Zoom_Faktor = 0.4
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 4
      Scroll_Zoom_Faktor = 0.48
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 5
      Scroll_Zoom_Faktor = 0.57
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
      
    Case 6
      Scroll_Zoom_Faktor = 0.69
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 7
      Scroll_Zoom_Faktor = 0.83
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
      ;}
      ; -------------------------------
    Case 8
      Scroll_Zoom_Faktor = 1.0
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
      ; -------------------------------
      ;{ PLUS
    Case 9
      Scroll_Zoom_Faktor = 1.2
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 10
      Scroll_Zoom_Faktor = 1.44
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 11
      Scroll_Zoom_Faktor = 1.73
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 12
      Scroll_Zoom_Faktor = 2.08
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 13
      Scroll_Zoom_Faktor = 2.5
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 14
      Scroll_Zoom_Faktor = 3.0
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
    Case 15
      Scroll_Zoom_Faktor = 3.6
      Scroll_Image_Erstellen(SCROLL_AreaGadget,SCROLL_ImageGadget) 
      ;}  
      ; -------------------------------
  EndSelect
  ; -------------------------------
EndProcedure
; ----------------------------
Procedure Scroll_End() 
  ; ----------------------------
  If SCROLL_Aktiv = 1
    SCROLL_Aktiv = 0
    ; ShowContainer(Container_03)
    
    End
  EndIf
  ; ----------------------------
  ; FOCUS AUF
  ; ----------------------------
  ; SetActiveGadget(Zoom_I_Bild)
  ; ----------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Scroll_StartUp2(SCROLL_AreaGadget, SCROLL_ImageGadget) 
  ; =============================================================
  If IsImage(#DRW_SCROLL_Image):FreeImage(#DRW_SCROLL_Image):EndIf
  CatchImage(#DRW_SCROLL_Image, *ImageMemory,MemorySize(*ImageMemory))
  ; =============================================================
  Scroll_LeseBild_GraphX  = ImageWidth(#DRW_SCROLL_Image)   
  Scroll_LeseBild_GraphY  = ImageHeight(#DRW_SCROLL_Image)   
  ; =============================================================
  SCROLL_Wheel   = 8
  ; =============================================================
  ; ShowContainer(Container_07)
  ; =============================================================
  ; Scroll_Zooming(SCROLL_Wheel)
  Scroll_Zooming(SCROLL_AreaGadget,SCROLL_ImageGadget, SCROLL_Wheel)
  ; =============================================================
  SCROLL_Aktiv = 1
  ; =============================================================
EndProcedure
; ----------------------------
Procedure Scroll_StartUp(SCROLL_AreaGadget, SCROLL_ImageGadget) 
  ; ----------------------------
  ; Weil wir schon im Fenster sind!!!!
  ; =============================================================
  Scroll_LeseBild_GraphX  = ImageWidth(#DRW_SCROLL_Image)   
  Scroll_LeseBild_GraphY  = ImageHeight(#DRW_SCROLL_Image)   
  ; =============================================================
  SCROLL_Wheel   = 8
  ; =============================================================
  ;   ShowContainer(SCROLL_AreaGadget)
  ; =============================================================
  ;   Scroll_Zooming(SCROLL_Wheel)
  Scroll_Zooming(SCROLL_AreaGadget,SCROLL_ImageGadget, SCROLL_Wheel)
  ; =============================================================
  SCROLL_Aktiv = 1
  ; =============================================================
EndProcedure
; ----------------------------
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure DplClk_SCROLL_ImageGadget(hWnd, uMsg, wParam, lParam)
  ; *gOldEditProc_29 = SetWindowLongPtr_(GadgetID(SCROLL_ImageGadget), #GWL_WNDPROC, @DplClk_SCROLL_ImageGadget())
  Protected Result = CallWindowProc_(*gOldEditProc_29, hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_LBUTTONDBLCLK
      Scroll_End() 
      
    Case #WM_LBUTTONDOWN
      If IsMouseOver(GadgetID(SCROLL_ImageGadget))
        SetCursor_(LoadCursor_(SCROLL_ImageGadget, #IDC_SIZEALL))
        SendMessage_(GadgetID(SCROLL_ImageGadget), #WM_SYSCOMMAND , #SC_DragMove, 0)
      EndIf
      
  EndSelect
  ProcedureReturn Result
EndProcedure

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [07] S C R O L L I N G 
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Win = OpenWindow(#PB_Any, 0, 0, Container_GraphX, Container_GraphY, "S C R O L L I N G ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; ------------------------------------------
Container_07 = ContainerGadget(#PB_Any,0,0,Container_GraphX, Container_GraphY,#PB_Container_Flat)
; ------------------------------------------
SCROLL_AreaGadget = ScrollAreaGadget(#PB_Any,0,0,Container_GraphX,Container_GraphY,Container_GraphX, Container_GraphY -  100,1 , #PB_ScrollArea_Single|#PB_ScrollArea_Center)
; ------------------------------------------
SetGadgetColor(SCROLL_AreaGadget, #PB_Gadget_BackColor, $F0FAFF)
; -------------------------------
SCROLL_Scrollbar = ShowScrollBar_(GadgetID(SCROLL_AreaGadget), #SB_BOTH, #False)
; -------------------------------
SCROLL_ImageGadget = ImageGadget(#PB_Any, 
                                 0, 
                                 0, 
                                 Container_GraphX, 
                                 Container_GraphY - Btn_10_GrapXY,
                                 ImageID(#DRW_SCROLL_Image))
; -------------------------------
DisableGadget(SCROLL_ImageGadget,1)    
; -------------------------------
CloseGadgetList()
; -------------------------------
CloseGadgetList()
; -------------------------------
; CALLBACK
*gOldEditProc_29 = SetWindowLongPtr_(GadgetID(SCROLL_ImageGadget), #GWL_WNDPROC, @DplClk_SCROLL_ImageGadget())
; -------------------------------
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- R U N 
;  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Scroll_StartUp(SCROLL_AreaGadget, SCROLL_ImageGadget)  
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- E V E N T 
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Define FensterNummer,Event,Quit
; ----------------------------------
Repeat 
  ; ==================================
  Event             = WaitWindowEvent() 
  FensterNummer.i   = EventWindow()
  ; ==================================
  ;{ Mousewheel
  If Event = #WM_MOUSEWHEEL
    SCROLL_Wheel + MouseWheelDelta() * #SCROLL_Zoomspeed 
    If SCROLL_Wheel < 1 : SCROLL_Wheel = 1 : EndIf 
    If SCROLL_Wheel > 15 : SCROLL_Wheel = 15 : EndIf 
    ; Debug "SCROLL_Wheel= "+SCROLL_Wheel
    ; Scroll_Zooming(SCROLL_Wheel)
    Scroll_Zooming(SCROLL_AreaGadget,SCROLL_ImageGadget, SCROLL_Wheel)
  EndIf
  ;}
  ; ==================================
  ;{ #WM_LBUTTONDOWN
  If Event = #WM_LBUTTONDOWN
    If IsMouseOver(GadgetID(SCROLL_ImageGadget))
      SetCursor_(LoadCursor_(SCROLL_AreaGadget, #IDC_SIZEALL))
      SendMessage_(GadgetID(SCROLL_AreaGadget), #WM_SYSCOMMAND , #SC_DragMove, 0)
    EndIf
    Debug "Latitude  :" + Str(DesktopMouseX())
    Debug "Longitude :" + Str(DesktopMouseY())             
  EndIf
  ;}
  ; ==================================
  
  Select WaitWindowEvent() 
    Case  #PB_Event_CloseWindow 
      End       
  EndSelect 
ForEver 
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>
;- PROGRAMMENDE
;- >>>>>>>>>>>>>>>>>>>>>>>>>
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)