IMAGE SCROLLEN unter Windows 7/10

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

IMAGE SCROLLEN unter Windows 7/10

Beitrag von Velindos »

Hallo Leute,
Scolle mit der Routine in Windows 7 und wollte unter Windows 10 sie einsetzen.

Und siehe da - Sie funzt nicht unter Windows10'! Warum... ???

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;- IMAGE SCROLLEN
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Funz unter Windows 7 / Windows 10

EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [ScaleDPI] 
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
XIncludeFile "Z:\[Pure@API]\[STORE]\LIBRARY\[ScaleDPI].pbi"
; InitScaleDPI()
;}
; XIncludeFile "Z:\[Pure@API]\[BOOKS]\Container_07\[SCROLL]\LIB\Lib_SCROLL_004.pbi"
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Enumeration
  #SCROLL_ImageGadget
  #SCROLL_TrackBar
  #SCROLL_AreaGadget
  
  #DRW_SCROLL_Image
  #DRW_SCROLL_Image_Neu
  #Shortcut_ESC_Scroll
  #Present_Shortcut_F12_Minidesk
EndEnumeration
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ [GLO]
Global Container_07
; ----------------------------------------------
Global SCROLL_Aktiv = 0
; ----------------------------------------------
Global Container_07_Pos_X = 0 
Global Container_07_Pos_Y = 0 
; ----------------------------------------------
Global Scroll_Zoom_Faktor.f = 0
; ----------------------------------------------
Global Scroll_LeseBild_GraphX.f
Global Scroll_LeseBild_GraphY.f
; ----------------------------------------------
Global SCROLL_Minidesk_Doungle = 0
; ----------------------------------------------
; DplClk_#SCROLL_ImageGadget()
Global *gOldEditProc_29 
; ====================================================
Global Reader_BackColor    = $000000
; ====================================================
Global Desk_Anzahl
Global Reader_Desktop_X
Global Reader_Desktop_Y
; ====================================================
Global MINIDESKTOP_Mode_X         = 1920/3
Global MINIDESKTOP_Mode_Y         = 1080/3
; ====================================================
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ [IMG]
; -----------------------
;=> DE/ENCODER
UsePNGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
;}
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [IMG] Hier image rein!
; -----------------------
Global SCROLL_Bild_Image = CatchImage(#DRW_SCROLL_Image, ?SCROLL_Bild_Image)
; -----------------------
DataSection
  SCROLL_Bild_Image:
  IncludeBinary "Z:\[Pure@API]\[STORE]\PNG\Img_PwdCheck_Vorlage.png"
EndDataSection
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ [Image To Memory]
Global *ImageMemory = EncodeImage(#DRW_SCROLL_Image,#PB_ImagePlugin_PNG , #PB_Image_FloydSteinberg,24)
Global ImageMemSize = MemorySize(*ImageMemory)
; =============================================================
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [PRC_31] S C R O L L
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Scroll_Image_Erstellen() 
  ; ----------------------------
  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 SCROLL_Aktiv = 1
    ; ----------------------------
    ;Scroll_LeseBild_GraphX
    ;Scroll_LeseBild_GraphY
    ; -------------------------------
    If IsImage(#DRW_SCROLL_Image):FreeImage(#DRW_SCROLL_Image):EndIf
    ; -------------------------------
    CatchImage(#DRW_SCROLL_Image, *ImageMemory, @ImageMemSize)
    ; ----------------------------
    If Scroll_LeseBildKopieFormat = 1 
      ; Horizontales Bild
      Scroll_web_x = 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 = Scroll_LeseBild_GraphX     * Scroll_Zoom_Faktor
      Scroll_web_y = Int(Scroll_LeseBild_GraphY  * Scroll_Zoom_Faktor)
      
    Else
      Scroll_web_x = Scroll_LeseBild_GraphX     * Scroll_Zoom_Faktor
      Scroll_web_y = Int(Scroll_LeseBild_GraphY  * Scroll_Zoom_Faktor)
    EndIf
    ; ----------------------------
    ResizeGadget(#SCROLL_ImageGadget, #PB_Ignore, #PB_Ignore, Scroll_web_x, Scroll_web_y)
    ; ----------------------------
    ResizeImage(#DRW_SCROLL_Image, Scroll_web_x, Scroll_web_y,#PB_Image_Smooth)
    ; ----------------------------
    SetGadgetAttribute(#SCROLL_AreaGadget, #PB_ScrollArea_InnerWidth,   Scroll_web_x)
    SetGadgetAttribute(#SCROLL_AreaGadget, #PB_ScrollArea_InnerHeight,  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$+"  " 
;     Fusszeile_Righttext(RightText_Summe$)
    ; ----------------------------
  EndIf
  ; ----------------------------
EndProcedure
Procedure Scroll_Zooming()
  ; -------------------------------
;   Debug GetGadgetState(#SCROLL_TrackBar)
  ; -------------------------------
  Select GetGadgetState(#SCROLL_TrackBar)
      ;{ Minus
      ; -------------------------------
    Case 1
      Scroll_Zoom_Faktor = 0.27
      Scroll_Image_Erstellen()
    Case 2
      Scroll_Zoom_Faktor = 0.33
      Scroll_Image_Erstellen()
    Case 3
      Scroll_Zoom_Faktor = 0.4
      Scroll_Image_Erstellen()
    Case 4
      Scroll_Zoom_Faktor = 0.48
      Scroll_Image_Erstellen()
    Case 5
      Scroll_Zoom_Faktor = 0.57
      Scroll_Image_Erstellen()
      
    Case 6
      Scroll_Zoom_Faktor = 0.69
      Scroll_Image_Erstellen()
    Case 7
      Scroll_Zoom_Faktor = 0.83
      Scroll_Image_Erstellen()
      ;}
      ; -------------------------------
    Case 8
      Scroll_Zoom_Faktor = 1.0
      Scroll_Image_Erstellen()
      ; -------------------------------
      ;{ PLUS
    Case 9
      Scroll_Zoom_Faktor = 1.2
      Scroll_Image_Erstellen()
    Case 10
      Scroll_Zoom_Faktor = 1.44
      Scroll_Image_Erstellen()
    Case 11
      Scroll_Zoom_Faktor = 1.73
      Scroll_Image_Erstellen()
    Case 12
      Scroll_Zoom_Faktor = 2.08
      Scroll_Image_Erstellen()
    Case 13
      Scroll_Zoom_Faktor = 2.5
      Scroll_Image_Erstellen()
    Case 14
      Scroll_Zoom_Faktor = 3.0
      Scroll_Image_Erstellen()
    Case 15
      Scroll_Zoom_Faktor = 3.6
      Scroll_Image_Erstellen()
      ;}  
      ; -------------------------------
  EndSelect
  ; -------------------------------
  SetActiveGadget(#SCROLL_TrackBar)
EndProcedure
;}


;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure SCROLL_End() 
  ; SCROLL BEENDEN
  If SCROLL_Aktiv = 1
    HideGadget(#SCROLL_TrackBar, 0)
    CloseWindow(Container_07)
    SCROLL_Aktiv = 0
    ; TODO
    End
    ; FOCUS AUF
    ; SetActiveGadget(Zoom_I_Bild)
  EndIf
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_LBUTTONDOWN
      ;{ MOVE WINDOW STRG + LCLK 
      If GetAsyncKeyState_(#VK_LCONTROL) & $8000
        ; Debug "LEFT!" 
        Debug "STRG + #WM_LBUTTONDOWN"
        SendMessage_(WindowID(Container_07),#WM_NCLBUTTONDOWN,#HTCAPTION,1)
      Else
        Debug "#WM_LBUTTONDOWN"
      EndIf
      ;}
      
    Case #WM_MBUTTONDOWN
      Debug "#WM_MBUTTONDOWN"
      
    Case #WM_RBUTTONDOWN
      SCROLL_End() 
      
  EndSelect
  ProcedureReturn Result
EndProcedure




;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Container_07(Desktop_X,Desktop_Y)
  ; =============================================================
  ; =============================================================
  Container_07 = OpenWindow(#PB_Any,0,0,Desktop_X,Desktop_Y,"Snipping Test",#PB_Window_BorderLess)
  ; #PB_Window_Invisible, GetDesktopWindow_()|GetDesktopWindow_()
  SetWindowColor(Container_07,Reader_BackColor)  
  ; =============================================================
  ;{ ScrollAreaGadget
  ; =============================================================
  ScrollAreaGadget(#SCROLL_AreaGadget, 0, 0, Desktop_X,Desktop_Y, Scroll_LeseBild_GraphX, Scroll_LeseBild_GraphY, 0, #PB_ScrollArea_Single|#PB_ScrollArea_Center)
  SetGadgetColor(#SCROLL_AreaGadget, #PB_Gadget_BackColor, Reader_BackColor)
  ; =============================================================
  ImageGadget(#SCROLL_ImageGadget, 0, 0, Scroll_LeseBild_GraphX, Scroll_LeseBild_GraphY, ImageID(#DRW_SCROLL_Image))
  HideGadget(#SCROLL_ImageGadget,0)
  ; =============================================================
  TrackBarGadget(#SCROLL_TrackBar, 0, 0 , WindowWidth(Container_07), 30, 1, 15); WindowID(#Window) 
  SetGadgetState(#SCROLL_TrackBar,8)
  ; =============================================================
  CloseGadgetList()
  ; =============================================================
  ;{ [99] CALLBACK
  *gOldEditProc_29 = SetWindowLongPtr_(GadgetID(#SCROLL_ImageGadget), #GWL_WNDPROC, @DplClk_SCROLL_ImageGadget())
  ;}
  ; =============================================================
  ;{ Shortcut
  AddKeyboardShortcut(Container_07, #PB_Shortcut_F12,    #Present_Shortcut_F12_Minidesk) 
  AddKeyboardShortcut(Container_07, #PB_Shortcut_Escape, #Shortcut_ESC_Scroll)
  ;}
  ; =============================================================
  ;}
  ; =============================================================
  Scroll_Zoom_Faktor = 1.0
  ; =============================================================
  HideGadget(#SCROLL_TrackBar, 1)
  ; =============================================================
  SetActiveGadget(#SCROLL_TrackBar)
  ; =============================================================
  SCROLL_Aktiv = 1
  ; =============================================================
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


Procedure SCROLL_Start() 
  ; =============================================================
  Desk_Anzahl       = ExamineDesktops() -1
  ; ----------------------------------------
  ;   Reader_Desktop_X  = DesktopWidth(Desk_Anzahl) 
  ;   Reader_Desktop_Y  = DesktopHeight(Desk_Anzahl)
  ; ----------------------------------------
  Reader_Desktop_X  = 668
  Reader_Desktop_Y  = 736
  ; =============================================================
  Scroll_LeseBild_GraphX  = ImageWidth(#DRW_SCROLL_Image)   
  Scroll_LeseBild_GraphY  = ImageHeight(#DRW_SCROLL_Image)   
  ; =============================================================
  ; ScrollBild Inserat Fenster
  Container_07(Reader_Desktop_X,Reader_Desktop_Y)
  ; =============================================================
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Event_Scroll(EEventID)
  ; ---------------------------------------
  Static Key.l
  ; ---------------------------------------
  Select EEventID
    Case #PB_Event_CloseWindow
    Case #PB_Event_SizeWindow
      SCROLL_End()
    Case #PB_Event_Gadget 
      ;{  GADGET
      Select EventGadget() 
          
        Case #SCROLL_AreaGadget
          ;{ ; debug "#SCROLL_TrackBar"
          HideGadget(#SCROLL_ImageGadget,1)
          SetActiveGadget(#SCROLL_TrackBar)
          HideGadget(#SCROLL_ImageGadget,0)
          ;}
        Case #SCROLL_TrackBar
          ;{ ; debug "##SCROLL_TrackBarGadget"
          HideGadget(#SCROLL_ImageGadget,1)
          Scroll_Zooming()
          HideGadget(#SCROLL_ImageGadget,0)
          ;}
      EndSelect
      ;}
    Case #PB_Event_Menu
      ;{  MENUE
      Select EventMenu()
        Case #Shortcut_ESC_Scroll 
          ;{ ESC TASTEN
          ; Debug "SCROLL_Aktiv = "+SCROLL_Aktiv
          If SCROLL_Aktiv = 1
            SCROLL_End()
          EndIf
          ;}
        Case #Present_Shortcut_F12_Minidesk
          If SCROLL_Minidesk_Doungle = 0
            SCROLL_Minidesk_Doungle = 1
            CloseWindow(Container_07)
            CatchImage(#DRW_SCROLL_Image, ?SCROLL_Bild_Image)
            Container_07(MINIDESKTOP_Mode_X,MINIDESKTOP_Mode_Y)
          Else
            SCROLL_Minidesk_Doungle = 0
            CloseWindow(Container_07)
            SCROLL_Start() 
          EndIf
      EndSelect
      ;}
  EndSelect
EndProcedure
; ----------------------------------------
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [00] RUN
; ********************************
SCROLL_Start() 
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- REPEAT
;  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Define FensterNummer, Event
; Define OleObject.IOleInPlaceActiveObject, web.MSG ,wParam, lParam
; --------------------------------------
Repeat
  ; --------------------------------------
  Event   = WaitWindowEvent() 
  FensterNummer.i  = EventWindow()
  ; --------------------------------------
  ;{ Fenster per Maus
  If Event  ; = #SCROLL_ImageGadget
    If SCROLL_Minidesk_Doungle = 1
      SendMessage_(Container_07, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
      ;   SendMessage_(Container_07, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
      Container_07_Pos_X = WindowX(Container_07)
      Container_07_Pos_Y = WindowY(Container_07)
    EndIf      
  EndIf
  ;}
  ; --------------------------------------
  Select FensterNummer
    Case Container_07
      Event_Scroll(Event)
      ; =====================
  EndSelect
  ; +++++++++++++++++++++++++++++++++++++++
  ; Fenster schliessen
  ; +++++++++++++++++++++++++++++++++++++++
  If Event = #PB_Event_CloseWindow
    If FensterNummer = Container_07
      Break
    EndIf
  EndIf
  ; +++++++++++++++++++++++++++++++++++++++
ForEver 
; +++++++++++++++++++++++++++++++++++++++
; Hauptfenster soll geschlossen werden
; +++++++++++++++++++++++++++++++++++++++
; Optionen: Einstellungen sichern
; Container_07_END()
End
; Schliesse Hauptfenster
CloseWindow(Container_07)
End
; +++++++++++++++++++++++++++++++++++++++
;}
;  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Mijikai
Beiträge: 735
Registriert: 25.09.2016 01:42

Re: IMAGE SCROLLEN unter Windows 7/10

Beitrag von Mijikai »

Hmm... was genau geht nicht?
Ich kann das Bild in Windows 10 scrollen!?
Die [ScaleDPI].pbi wird zwar eingebunden wird aber nirgends verwendet?
Benutzeravatar
Velindos
Beiträge: 566
Registriert: 15.11.2010 10:56

Re: IMAGE SCROLLEN unter Windows 7/10

Beitrag von Velindos »

Hallo,
Ich kann das Bild in Windows 10 scrollen!?
geht bei mir nicht, weder am Surface noch auf der Workstation unter W10.
Wenn ich das Mausrad drehe zittert das Bild nur, keine Ahnung warum!

Zu der dpi, die ist nicht eingebunden damit nicht irrtümlich Fehler entstehen!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Mijikai
Beiträge: 735
Registriert: 25.09.2016 01:42

Re: IMAGE SCROLLEN unter Windows 7/10

Beitrag von Mijikai »

Dachte da fehlen MouseWheel Befehle aber so wie es aussieht kann das ScrollGadget diese selber handeln.
Steh da auch auf dem Schlauch evtl. :S
fabulouspaul
Beiträge: 112
Registriert: 01.04.2011 21:59

Re: IMAGE SCROLLEN unter Windows 7/10

Beitrag von fabulouspaul »

ScrollAreaGadget() hat einen Parameter ScrollStep, der steht bei Dir auf 0. Daher scrollt das Mausrad auch nicht.

Mit

Code: Alles auswählen

ScrollAreaGadget(#SCROLL_AreaGadget, 0, 0, Desktop_X,Desktop_Y, Scroll_LeseBild_GraphX, Scroll_LeseBild_GraphY, 10, #PB_ScrollArea_Single|#PB_ScrollArea_Center)
scrollts auch (also zumindest bei mir). :mrgreen:
Benutzeravatar
Velindos
Beiträge: 566
Registriert: 15.11.2010 10:56

Re: IMAGE SCROLLEN unter Windows 7/10

Beitrag von Velindos »

Hallo,
das ScrollAreaGadget scrollt auch bei mir!

Da ich das Bild Grösser/Kleiner mache, sollte das über
TrackBarGadget laufen! Die liefert aber keinen Wert!
Debug "#SCROLL_TrackBar = " + GetGadgetState(#SCROLL_TrackBar)
Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten