Zoom ScrollAreaGadget - Mittig ausrichten.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GlassJoe »

Hi

Also ich mach da zusammengenommen schon seit locker 2 Tagen dran rum, und hab jeden mir erdenklichen
mathematischen Weg versucht.........fast 2 Tage hab ich gebraucht um zu raffen das dieser verdammte Drecks
X ScrollBalken Wert der vom Balken Start ist, und nicht der vom kleinen Pfeil in der Mitte :bluescreen:

Wie kriegt mann das Ding mittig ? Gibt es kein WinApi Command ? So das der kleine Pfeil
in der Mitte vom ScrollBalken, genau mittig steht ? Sprich ScrollArea steht mittig.

Ich hab hier 1280x1024 Auflösung laufen, und ein TestBild

Code: Alles auswählen

  CreateImage(0,1024,768)
  
  StartDrawing(ImageOutput(0))
    DrawingMode(#PB_2DDrawing_Outlined)
    Line(1024/2,0,1,768,#White)
    Line(0,768/2,1024,1,#White)
    
    Line(1024/4,0,1,768,#yellow)
    Line(0,768/4,1024,1,#yellow)
    
    Line((1024/4) * 3,0,1,768,#yellow)
    Line(0,768/4 * 3,1024,1,#yellow)
    
    Box((1024/2) - 60,(768/2) - 45,120,90,#Red)
    
    
  StopDrawing()
  SaveImage(0,"C:\tt.bmp")
das klassische 1024x768 hat.

Ich schalte auf Vollbild, jetzt wird das Bild auf die maximalen Dimensionen (mit Berücksichtigung des Seitenverhältnisses) auf 1280 x 960 resized.

Und es ist natürlich nichts vom ScrollArea Gadget Balken zu sehen, weil unnötig.

Jetzt vergrößere ich das 1280 x 960 Bild um 20 % auf 1536x1280 (wieder unter Berücksichtigung vom Seitenverhältniss, und passt ! nichts verzogen)

Und mache folgendes.

Code: Alles auswählen

        tmp_rand = 100
        ImageGadget(#BigGadget,tmp_rand,tmp_rand,666,666,ImageID(#Zoom))

        SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth,new_w + tmp_rand * 2) 
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight,new_h + tmp_rand * 2)
        
        xx = GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth)
        yy = GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight)  
Und habe dann je Seite, einen 100Pixel Rahmen um das Bild, und das ScrollAreaGadget ist entsprechend angepasst.

Soweit ist mir noch alles klar, aber #PB_ScrollArea_X und #PB_ScrollArea_Y bringen mich noch um den Verstand.

Egal was ich probiert habe, es geht nie immer exakt mittig.

Was noch bei 20% und 40% Zoom geht, geht auf einmal ab 60 nicht usw

Die verdammte X balken Position muss genau 238 sein ! Dann ist der Pfeil vom Scrollbalken exakt
da wo auch die mittige Linie im Testbild ist, und das ScrollArea Dings steht mittig.

Und ich hab zig Möglichkeiten mathematischen Variationen probiert, und nur mit einer kam ich auf die
238.

Code: Alles auswählen

            tmp_val_w.f = xx - Global_FullGW - tmp_rand
            tmp_val_w.f = yy - Global_FullGH - tmp_rand
            
            tmp_val_w=Round(tmp_val_w,#PB_Round_Down)
            tmp_val_h=Round(tmp_val_h,#PB_Round_Down) 

SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,tmp_val_w + tmp_rand) 
GlobalFullGW & GlobalFullGH sind die Vollbild Auflösung, oder der Rahmen könnte mann sagen.

tmp_rand beträgt 100 (ja Variationen wo ich 2 x tmp_rand probiert hab, hatte ich auch, ich hatte zig Möglichkeiten ausprobiert, sogar Prozentualen Unterschied vom ScrollArea Gadget zum vorherigen Stand)

Wie gesagt ich verstehe es nicht ! Was noch bei 20% geht, geht bei 40% nicht mehr, oder was von 20 bis 60% geht.
Geht ab 80 nicht mehr.

Das verdammte Ding muss mittig bleiben, aber es verschiebt sich mit jedem Scroll Schritt immer weiter.

Ich komme nicht mehr weiter, vl weis einer von euch ja wo das Problem liegt.

Ich will gar nicht Wissen, was das erst für ein **#/%'*'# wird wenn mann z.B den linken Teil vom 100% Bild auf 120%
vergrößern will, und der linke Ausschnitt beibehalten werden soll.

Aber erst mal brauch ich die Mittel Stellung, die Zentrierung, ohne die geht gar nichts.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GPI »

kannst du bitte ein komplett lauffähiges kurzes Programm schreiben und posten, damit dein Problem klarer wird. Dann kann man dir auch leichter helfen, weil der Helfer diesen Schritt nicht machen muss.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GlassJoe »

GPI hat geschrieben:kannst du bitte ein komplett lauffähiges kurzes Programm schreiben und posten, damit dein Problem klarer wird. Dann kann man dir auch leichter helfen, weil der Helfer diesen Schritt nicht machen muss.
Puh. Ok kann ich machen, wird aber bisschen dauern, da der Original Code in meinem Turbo Image Explorer (der Name ist Programm, daß Ding ist sauschnell :D) eingebaut.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GPI »

GlassJoe hat geschrieben:
GPI hat geschrieben:kannst du bitte ein komplett lauffähiges kurzes Programm schreiben und posten, damit dein Problem klarer wird. Dann kann man dir auch leichter helfen, weil der Helfer diesen Schritt nicht machen muss.
Puh. Ok kann ich machen, wird aber bisschen dauern, da der Original Code in meinem Turbo Image Explorer (der Name ist Programm, daß Ding ist sauschnell :D) eingebaut.
Muss ja nur ein Fenster mit Scrollgadget sein. Am besten noch drei buttons zum zoomfaktor umstellen. der Rest außen rum ist uninteressant.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GlassJoe »

Ok bereit zum Testen.

Ich habe die Anpasst Versuche drin gelassen.

Code: Alles auswählen

  
  ;/ WIN
  Enumeration
    #MainWin
  EndEnumeration
  
  ;/ GADGET
  Enumeration
    #XSBig
    #BigGadget
  EndEnumeration
  
  ;/ PIC
  Enumeration
    #Big
    #Zoom
  EndEnumeration
  
  Global Global_Last_ZoomPP = 100
  
  ;Meine Desktop Auflösung beträgt 1280x1024. Das Tool ist 1024 x 1024 - Taskleisten Höhe hoch.
  
  #WKon = 722 ; ScrollArea Width bevor auf Vollbild geschaltet wird. 
  taskH = 26 ; Bei mir sind es 26 Pixel die die Taskleiste hat, hab XP
  
  Global_HScroll = 768 - taskH
  
  #BarKon = 16 ; Scroll Area Scroll Balken Breite 
  #ProgWKon = 1024
  #ProgHKon = 1024 - 26
  
  Procedure.S CalcImageSize(ProtTmpPic.i,MaximumW,MaximumH)
    
    IMG_W = ImageWidth(ProtTmpPic) : IMG_H = ImageHeight(ProtTmpPic) 
    ;Debug "INPUT W="+Str(IMG_W)+" | INPUT H="+Str(IMG_H)
    
    
    If IMG_W > IMG_H
      
      ;Debug "BILD -> BREITER ALS HÖHER"
      
      ASPECT.f=IMG_W/IMG_H
      ; Debug "ASPECT RATIO" : Debug ASPECT 
      ; 
      New_H=MaximumW/ASPECT
      ; 
      ; Debug "MAXIMUM WIDTH"
      ; Debug MaximumW
      ; 
      ; Debug "NEW HEIGHT" 
      ; Debug New_H 
      ; 
      If New_H > MaximumH
        
        Differenz=New_H-MaximumH
        
        New_H=New_H-Differenz
        New_W=MaximumW-Differenz 
        
        ; Debug "NEUE HÖHE IST HÖHER ALS DER RAHMEN"
        ; Debug "DIFFERENZ="+Str(Differenz)
        ; 
        ; Debug "NEUE MASSE NACH DER DIFFERENZ BERECHNUNG"
        ; Debug "W"+Str(New_W)+"xH"+Str(New_H)
      Else
        New_W=MaximumW
      EndIf
      
      ProcedureReturn Str(New_W)+":"+Str(New_H)
      
    ElseIf IMG_W < IMG_H
      
      ;Debug "BILD -> HÖHER ALS BREITER"
      
      ;Debug "MAXIMUM HEIGHT"
      ;Debug MaximumH
      ; 
      
      ASPECT.f=IMG_H/IMG_W
      ;Debug "ASPECT RATIO" : Debug ASPECT
      
      New_W=MaximumH/ASPECT
      
      ;Debug "MAXIMUM HEIGHT"
      ;Debug MaximumH
      ; 
      ;Debug "NEW WIDTH"
      ;Debug New_W
      
      If New_W > MaximumW 
        Differenz=New_W-MaximumW
        
        New_W=New_W-Differenz
        New_H=MaximumH-Differenz 
        
        ;Debug "NEUE BREITE IST BREITER ALS DER RAHMEN"
        ;Debug "DIFFERENZ="+Str(Differenz)
        ; 
        ;Debug "NEUE MASSE NACH DER DIFFERENZ BERECHNUNG"
        ;Debug "W"+Str(New_W)+"xH"+Str(New_H) 
      Else
        New_H=MaximumH
        ;Debug "JOA="+New_H
      EndIf
      
      ProcedureReturn Str(New_W)+":"+Str(New_H)
      
    Else
      
      ;Debug "BILD -> HAT SELBE HÖEHE UND BREITE"
      
      If MaximumW > MaximumH
        ;Debug "RAHMEN BREITER ALS HOCH"
        ProcedureReturn Str(MaximumW)+":"+Str(MaximumW) 
      ElseIf MaximumW < MaximumH
        ;Debug "RAHMEN HÖHER ALS BREIT"
        ProcedureReturn Str(MaximumH)+":"+Str(MaximumH) 
      Else
        ; Debug "RAHMEN BREITE = HÖHE"
        ProcedureReturn Str(MaximumW)+":"+Str(MaximumH) 
      EndIf 
      
    EndIf 
    
  EndProcedure
  
  
  
  
  Procedure.i Zoom()
    
    If IsImage(#Big)
      
      CopyImage(#Big,#Zoom)  
      
      Debug "Level X bevore="+Level
      
      Level = Global_Last_ZoomPP 
      Level + 20
      Global_Last_ZoomPP = Level
      
      tmp_size$ = CalcImageSize(#Big,1280,1024) 
      
      Debug tmp_size$
      IMG_W = Val(StringField(tmp_size$,1,":")) : IMG_H = Val(StringField(tmp_size$,2,":"))
      
      one_w.f = IMG_W / 100
      one_h.f = IMG_H / 100
      
      one_w * Level
      one_h * Level  
      
      
      Debug "Level X after="+Level
      
      one_w=Round(one_w,#PB_Round_Down)
      one_h=Round(one_h,#PB_Round_Down) 
      
      Debug "1% W ="+one_w
      Debug "1% H ="+one_h 
      
      If ResizeImage(#Zoom,one_w,one_h) = 0
        Debug "CANT RESIZE"
        If MessageRequester("","End ?") = #PB_MessageRequester_Yes
          End
        EndIf 
        ProcedureReturn
      EndIf 
      
      Global_Last_ZoomPP = Level
      
      If Level > 100 
        
        Debug "ZOOM LEVEL="+Level
        Debug "GLOBAL HSCROLL="+Global_HScroll
        tmp_rand = 100
        
        ;OpenGadgetList(#XSBig)
        ImageGadget(#BigGadget,tmp_rand,tmp_rand,100,100,ImageID(#Zoom)) 
        ;CloseGadgetList()  
        
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth,one_w + tmp_rand * 2) 
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight,one_h + tmp_rand * 2)
        
        xx = GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth)
        yy = GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight)  
        
        Debug "//////////"
        
        Debug "PIC W = "+Str(one_w)
        Debug "SC W = "+xx
        Debug "SC W / 2 = "+Str(xx / 2)
        
        Debug "PIC H ="+Str(one_h)
        Debug "SC H ="+yy
        Debug "SC H / 2="+Str(yy / 2)
        Debug "///////////"
        
        ;SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,one_w - (xx / 2) - (tmp_rand * 2))
        ;SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,one_h - (yy / 2) - tmp_rand) 
        
        Debug "IMG_W="+IMG_W
        Debug "IMG_H="+IMG_H
        
        tmp_diff_w = one_w - IMG_W
        tmp_diff_h = one_h - IMG_H
        
        
        ; If tmp_rand > Level
        ; tmp_val_w = tmp_rand - Level
        ; tmp_val_h = tmp_val_w
        ; ElseIf Level > tmp_rand
        ; tmp_val_w = Level - tmp_rand
        ; tmp_val_h = tmp_val_w 
        ; Else
        ; tmp_val_w = 0 
        ; tmp_val_h = 0 
        ; EndIf
        
        ; If tmp_rand > tmp_diff_w
        ; tmp_val_w = tmp_rand - tmp_diff_w
        ; ElseIf tmp_diff_w > tmp_rand
        ; tmp_val_w = tmp_diff_w - tmp_rand
        ; Else
        ; tmp_val_w = 0 
        ; EndIf
        ; 
        ; If tmp_rand > tmp_diff_h
        ; tmp_val_h = tmp_rand - tmp_diff_h
        ; ElseIf tmp_diff_h > tmp_rand
        ; tmp_val_h = tmp_diff_h - tmp_rand
        ; Else
        ; tmp_val_h = 0 
        ; EndIf
        
        
        Debug ""
        Debug "tmp_val_w="+tmp_val_w.f
        Debug "tmp_val_h="+tmp_val_h.f
        ; 
        
        tmp_val_w.f = xx - 1028 - tmp_rand
        tmp_val_w.f = yy - #ProgHKon - tmp_rand ; #ProgHKon sind 1024 - 26 (Taskleiste)
        
        tmp_val_w=Round(tmp_val_w,#PB_Round_Down)
        tmp_val_h=Round(tmp_val_h,#PB_Round_Down) 
        
        Debug tmp_val_w
        Debug tmp_val_h
        keinplan = xx / 100
        If Level = 20
          tmp_xxx = keinplan * 80
        ElseIf Level = 40
          tmp_xxx = keinplan * 60 
        ElseIf Level = 60
          tmp_xxx = keinplan * 40 
        EndIf
        
        Debug tmp_xxx
        Debug keinplan
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,xx-1188)
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,tmp_val_h)
        ; ; Else
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,xx-tmp_diff_w)
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,yy-tmp_diff_h)            
        ; EndIf
        
        ;SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,tmp_val_w - (xx /2) -16)
        
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,tmp_val_h)  
        
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,tmp_val_w + tmp_rand) 
        ;SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,one_h - (yy / 2) - (tmp_rand * 2))
        
        
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,one_w - (xx / 2) - (tmp_rand * 2)) 
        ; SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,one_h - (yy / 2) - (tmp_rand * 2))
        ; 
        
        ProcedureReturn 1 
        
      EndIf 
      
    EndIf
    
  EndProcedure
  
  Procedure.b MakeTestIMG()
    
    Debug "" : Debug "MakeTestIMG()" 
    
    If CreateImage(99,1024,768)
      
      StartDrawing(ImageOutput(99))
        DrawingMode(#PB_2DDrawing_Outlined)
        Line(1024/2,0,1,768,#White)
        Line(0,768/2,1024,1,#White)
        
        Line(1024/4,0,1,768,#yellow)
        Line(0,768/4,1024,1,#yellow)
        
        Line((1024/4) * 3,0,1,768,#yellow)
        Line(0,768/4 * 3,1024,1,#yellow)
        
        Box((1024/2) - 60,(768/2) - 45,120,90,#Red) 
      StopDrawing()
      
      CopyImage(99,#Big)
      
      If SaveImage(99,GetTemporaryDirectory()+"taajt.bmp")
        ProcedureReturn 1 
      EndIf
      
    EndIf 
    
  EndProcedure
  
  OpenWindow(#MainWin,0,0,#ProgWKon,#ProgHKon,"New Prog",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  
  ScrollAreaGadget(#XSBig,300,200,#WKon,Global_HScroll,1,1,100,#PB_ScrollArea_Center) 
  
  
  If MakeTestIMG()
    
    ;/ ZENTRIEREN
    
    tmp_size$ = CalcImageSize(#Big,#WKon,Global_HScroll) ;normal, no zoom
    ResizeImage(#Big,Val(StringField(tmp_size$,1,":")),Val(StringField(tmp_size$,2,":")))   
    
    Debug #WKon
    
    diff_w.f = #WKon - ImageWidth(#Big) : diff_h.f = Global_HScroll - ImageHeight(#Big)
    
    If diff_w
      diff_w / 2 
      diff_w = Round(diff_w,#PB_Round_up) 
    EndIf
    If diff_h
      diff_h / 2 
      diff_h = Round(diff_h,#PB_Round_up) 
    EndIf
    
    ImageGadget(#BigGadget,diff_w,diff_h,666,666,ImageID(#Big))
    
    Global_Last_ZoomPP = 100
    
    SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth,GadgetWidth(#BigGadget) + (diff_w * 2) - #BarKon)
    SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight,GadgetHeight(#BigGadget) + (diff_h * 2) - #BarKon)
    
    SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth / 2)) 
    SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight / 2))
    
  EndIf
  
  Repeat 
    
    Event = WaitWindowEvent()  
    
    If Event = #WM_KEYDOWN
      Main_KeyCode = EventwParam() 
      If Main_KeyCode = #VK_F5
        Debug "Zoom IN" 
        If IsImage(#Big)
          
          ResizeWindow(0,0,0,1280,#ProgHKon)
          
          SetWindowLongPtr_(WindowID(#MainWin),#GWL_STYLE,#WS_VISIBLE) 
          HideGadget(#BigGadget,1) 
          
          ResizeGadget(#XSBig,0,0,1280,#ProgHKon) 
          
          Zoom() 
          
        EndIf
      EndIf 
      
      If Main_KeyCode = #VK_ESCAPE
        
        SetWindowLongPtr_(WindowID(#MainWin), #GWL_STYLE, #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_CAPTION | #WS_SYSMENU)
        ResizeWindow(#MainWin,0,0,#ProgWKon,#ProgHKon)
        
        If MakeTestIMG()
          
          ;/ ZENTRIEREN
          
          tmp_size$ = CalcImageSize(#Big,#WKon,Global_HScroll) ;normal, no zoom
          ResizeImage(#Big,Val(StringField(tmp_size$,1,":")),Val(StringField(tmp_size$,2,":")))   
          ResizeGadget(#XSBig,300,200,#WKon,Global_HScroll)
          
          Global_Last_ZoomPP = 100
          
          diff_w.f = #WKon - ImageWidth(#Big) : diff_h.f = Global_HScroll - ImageHeight(#Big)
          
          If diff_w
            diff_w / 2 
            diff_w = Round(diff_w,#PB_Round_up) 
          EndIf
          If diff_h
            diff_h / 2 
            diff_h = Round(diff_h,#PB_Round_up) 
          EndIf
          
          ImageGadget(#BigGadget,diff_w,diff_h,666,666,ImageID(#Big))
          
          SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth,GadgetWidth(#BigGadget) + (diff_w * 2) - #BarKon)
          SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight,GadgetHeight(#BigGadget) + (diff_h * 2) - #BarKon)
          
          SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth / 2)) 
          SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight / 2))
          
        EndIf
        
        
      EndIf 
      
    EndIf
    
    If Event = #PB_Event_Gadget 
      
      If EventGadget() = #BigGadget And EventType() = #PB_EventType_RightClick
        Debug ""
        Debug "SCROLL AREA WITH"
        Debug GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth)
        Debug GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight)  
        Debug "SCROLL AREA POST"
        Debug GetGadgetAttribute(#XSBig,#PB_ScrollArea_X)
        Debug GetGadgetAttribute(#XSBig,#PB_ScrollArea_Y)          
        Debug ""
        
      EndIf
      
    EndIf 
    
    If Event = #PB_Event_CloseWindow
      Break
    EndIf
    
  ForEver   
Edit: Hab in dem Code oben an einer Stelle 1028 statt 1024 stehen, aber das ist nicht das problem, da es im Original richtig ist, und der selbe Mist.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GlassJoe »

Also ich hab ein Test Code einen Post weiter oben erstellt, mit dem das jeder selbst testen kann.

Ich bin etwas weitergekommen, aber es ergibt trotzdem noch kein Sinn !

Code: Alles auswählen

 Global_Last_ZoomPP = Level
      
      If Level > 100 
        
        Debug "ZOOM LEVEL="+Level
        Debug "GLOBAL HSCROLL="+Global_HScroll
        tmp_rand = 100
        
        ImageGadget(#BigGadget,tmp_rand,tmp_rand,100,100,ImageID(#Zoom)) 
        
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth,one_w + tmp_rand * 2) 
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight,one_h + tmp_rand * 2)
        
        If Level = 120
          
          angry_x.f = Level * 2; 240 --> Level mal was ? Warum 2 verdammt noch mal ? Von was leitet sich die 2 ab ?
          
          ;angry_y.f = Level * 1.55 ; 186 -> gleiche wie  GadgetWidth(#BigGadget) - GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight) 
          angry_y.f = GadgetWidth(#BigGadget) - GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight) 
          
        Else
          
          angry_x = GetGadgetAttribute(#XSBig,#PB_ScrollArea_X)
          angry_x + 120 ; geht halbwegs
          
          angry_y = GetGadgetAttribute(#XSBig,#PB_ScrollArea_Y)
          
          ;angry_y + 120 ; driftet nach oben ab
          angry_y = GadgetWidth(#BigGadget) - GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight) ;drifet nach unten ab
          
        EndIf
        
        angry_x = Round(angry_x,#PB_Round_up) 
        angry_y = Round(angry_y,#PB_Round_up)
        
        Debug "Angry X="+angry_x
        Debug "Angry Y="+angry_y
        
        Debug "-----------------------"
        Debug "INN W="+GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth)
        Debug "INN H"+GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight)
        Debug "GD W="+GadgetWidth(#BigGadget) : Debug "GD H="+GadgetHeight(#BigGadget) 
        Debug "IMG W"+ImageWidth(#Zoom) : Debug "IMG H"+ImageHeight(#Zoom)
        Debug tmp_rand
        Debug "keine dieser verdammten Zahlen kann irgendwie rechnerisch auf 240 (genau dann ist X mittig) führen
        Debug "aber auf die 186 damit Y mittig steht (jedenfalls bei 20% Zoom)
        Debug "angry_y.f = GadgetWidth(#BigGadget) - GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight) sind 186"
        Debug "------------------------------------------------------"
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,angry_x)
        SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,angry_y)
        
        SetActiveGadget(#BigGadget)
        
        ProcedureReturn 1 
        
      EndIf 
Wieso komm ich für die Y Achse mit Werten die ich auslesen kann auf 186 (dann steht Y mittig)
und für die X Achse muss ich Zoom Level x 2 machen ? Warum 2 ? Wo kommt die bescheuerte Zahl her ?
Ich hasse Mathe :bluescreen: :bluescreen: :bluescreen: und X/Y Achsen >_<

EDIT: Wenn mann das Testbild um 90° dreht, dann geht es mir der Methode überhaupt nicht.

Ich drehe noch durch :bluescreen:

Mach ich im non fullscreen Modus wo das ScrollArea Gadget

722 x 768 pixel hat

xx = GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerWidth)
yy = GetGadgetAttribute(#XSBig,#PB_ScrollArea_InnerHeight)

SetGadgetAttribute(#XSBig,#PB_ScrollArea_X,one_w - (xx / 2) - (tmp_rand * 2))
SetGadgetAttribute(#XSBig,#PB_ScrollArea_Y,one_h - (yy / 2) - (tmp_rand * 2))

funzt der Mist fast perfekt egal, ob Testbild Breiter als höher ist, oder höher als breiter.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von Mijikai »

So sollte es gehen...
ScollbarWidth (je nach OS auslesen - ich habs mal als festen Wert eingebaut) berücksichtigen!
SetImage() - hat den Code :)



Code: Alles auswählen

;by Mijikai
;PB 5.60 x64

DeclareModule IMG
  Declare.i Create(Width.i,Height.i,Bits.i = 24,BackColor.l = 0)
  Declare.i Handle(*IMG)
  Declare.i ZoomImage(*IMG,Steps.i)
  Declare.i ZoomIn(*IMG)
  Declare.i ZoomOut(*IMG)
  Declare.i ZoomHandle(*IMG)
  Declare.i ZoomWidth(*IMG)
  Declare.i ZoomHeight(*IMG)
  Declare.i Raw(*IMG)
  Declare.i Width(*IMG)
  Declare.i Height(*IMG)
  Declare.i Bits(*IMG)
  Declare.i Free(*IMG)
EndDeclareModule

Module IMG

  Structure STRUCT_IMG_SIZE
    Width.i
    Height.i
  EndStructure
  
  Structure STRUCT_IMG_ZOOM
    ImageResized.i
    Handle.i
    Size.STRUCT_IMG_SIZE
    Steps.i
    StepsMax.i
  EndStructure

  Structure STRUCT_IMG
    Image.i
    Bits.i
    Size.STRUCT_IMG_SIZE
    Handle.i
    *Zoom.STRUCT_IMG_ZOOM  
  EndStructure
  
  Procedure.i ZoomImage(*IMG.STRUCT_IMG,Steps.i)
    If Not *IMG\Zoom
      *IMG\Zoom = AllocateMemory(SizeOf(STRUCT_IMG_ZOOM))
    EndIf
    If *IMG\Zoom
      If Steps < 10
        Steps = 10
      ElseIf Steps > 300
        Steps = 300
      EndIf
      *IMG\Zoom\StepsMax = 50 * Steps
      *IMG\Zoom\Steps = Steps
      ProcedureReturn #True
    EndIf
  EndProcedure
  
  Procedure.i ZoomIn(*IMG.STRUCT_IMG)
    If Not *IMG\Zoom\Size\Width
      *IMG\Zoom\Size\Width = *IMG\Size\Width
      *IMG\Zoom\Size\Height = *IMG\Size\Height
    EndIf
    If *IMG\Zoom\Size\Width < *IMG\Size\Width + *IMG\Zoom\StepsMax
      *IMG\Zoom\Size\Width + *IMG\Zoom\Steps
      *IMG\Zoom\Size\Height  + *IMG\Zoom\Steps
    Else
      If *IMG\Zoom\ImageResized
         ProcedureReturn *IMG\Zoom\Handle
      Else
         ProcedureReturn *IMG\Handle
      EndIf
    EndIf
    If *IMG\Zoom\ ImageResized
        FreeImage(*IMG\Zoom\ImageResized)
    EndIf
    *IMG\Zoom\ImageResized = CopyImage(*IMG\Image,#PB_Any)
    If *IMG\Zoom\ImageResized
      If ResizeImage(*IMG\Zoom\ImageResized,*IMG\Zoom\Size\Width,*IMG\Zoom\Size\Height)
        *IMG\Zoom\Handle = ImageID(*IMG\Zoom\ImageResized)
        ProcedureReturn *IMG\Zoom\Handle
      Else
        FreeImage(*IMG\Zoom\ImageResized)
        *IMG\Zoom\ImageResized = 0
      EndIf
    Else
        ProcedureReturn *IMG\Handle
    EndIf
  EndProcedure
  
  Procedure.i ZoomOut(*IMG.STRUCT_IMG)
    If Not *IMG\Zoom\Size\Width
      *IMG\Zoom\Size\Width = *IMG\Size\Width
      *IMG\Zoom\Size\Height = *IMG\Size\Height
    EndIf
    If *IMG\Zoom\Size\Width > *IMG\Size\Width
      *IMG\Zoom\Size\Width - *IMG\Zoom\Steps
      *IMG\Zoom\Size\Height - *IMG\Zoom\Steps
    Else
      ProcedureReturn *IMG\Handle
    EndIf
    If *IMG\Zoom\ImageResized
       FreeImage(*IMG\Zoom\ImageResized)
    EndIf
    *IMG\Zoom\ImageResized = CopyImage(*IMG\Image,#PB_Any)
    If *IMG\Zoom\ImageResized
      If ResizeImage(*IMG\Zoom\ImageResized,*IMG\Zoom\Size\Width,*IMG\Zoom\Size\Height)
        *IMG\Zoom\Handle = ImageID(*IMG\Zoom\ImageResized)
        ProcedureReturn *IMG\Zoom\Handle
      Else
        FreeImage(*IMG\Zoom\ImageResized)
        *IMG\Zoom\ImageResized = 0
      EndIf
    Else
       ProcedureReturn *IMG\Handle
    EndIf
  EndProcedure
  
  Procedure.i ZoomHandle(*IMG.STRUCT_IMG)
    If IsImage(*IMG\Zoom\ImageResized)
      ProcedureReturn *IMG\Zoom\Handle
    EndIf
  EndProcedure
  
  Procedure.i ZoomWidth(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Zoom\Size\Width
  EndProcedure
  
  Procedure.i ZoomHeight(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Zoom\Size\Height
  EndProcedure
  
  Procedure.i ZoomRelease(*IMG.STRUCT_IMG)
    If *IMG\Zoom
      If IsImage(*IMG\Zoom\ImageResized)
        FreeImage(*IMG\Zoom\ImageResized)
      EndIf
      FreeMemory(*IMG\Zoom)
    EndIf
  EndProcedure
  
  Procedure.i Create(Width.i,Height.i,Bits.i = 24,BackColor.l = 0)
    Protected *IMG.STRUCT_IMG = AllocateMemory(SizeOf(STRUCT_IMG))
    If *IMG
      *IMG\Image = CreateImage(#PB_Any,Width,Height,Bits,BackColor)
      If *IMG\Image
        *IMG\Bits = Bits
        *IMG\Size\Width = Width
        *IMG\Size\Height = Height
        *IMG\Handle = ImageID(*IMG\Image)
        ProcedureReturn *IMG
      EndIf
      FreeMemory *IMG
    EndIf
  EndProcedure
  
  Procedure.i Handle(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Handle
  EndProcedure
  
  Procedure.i Raw(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Image
  EndProcedure
  
  Procedure.i Width(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Size\Width
  EndProcedure
  
  Procedure.i Height(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Size\Height
  EndProcedure
  
  Procedure.i Bits(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Bits
  EndProcedure
  
  Procedure.i Free(*IMG.STRUCT_IMG)
    ZoomRelease(*IMG)
    FreeImage(*IMG\Image)
    FreeMemory(*IMG)
  EndProcedure
  
EndModule

Procedure.i CreateTestImage(ZoomSteps.i)
  Protected Image.i = IMG::Create(1024,768)
  If Image
    If IMG::ZoomImage(Image,ZoomSteps);Bild als zoombar erstellen!
      If StartDrawing(ImageOutput(IMG::Raw(Image)))
        DrawingMode(#PB_2DDrawing_Outlined)
        Line(1024/2,0,1,768,#White)
        Line(0,768/2,1024,1,#White)
        Line(1024/4,0,1,768,#Yellow)
        Line(0,768/4,1024,1,#Yellow)
        Line((1024/4) * 3,0,1,768,#Yellow)
        Line(0,768/4 * 3,1024,1,#Yellow)
        Box((1024/2) - 60,(768/2) - 45,120,90,#Red) 
        StopDrawing()
        ProcedureReturn Image
      EndIf
    EndIf
    IMG::Free(Image)
  EndIf
EndProcedure

Procedure.i SetImage(ScrollArea.i,ImageBox.i,Image.i,Zoom.b,ZoomIn.b)
  Protected Width.i, Height.i, ZoomedImage.i
  If Zoom
    If ZoomIn
      ZoomedImage = IMG::ZoomIn(Image)
    Else
      ZoomedImage = IMG::ZoomOut(Image)
    EndIf
    If ZoomedImage
      Width = IMG::ZoomWidth(Image)
      Height = IMG::ZoomHeight(Image)
      ResizeGadget(ImageBox,0,0,Width,Height)
      SetGadgetState(ImageBox,ZoomedImage)
    EndIf
  Else
    Width = IMG::Width(Image)
    Height = IMG::Height(Image)
    ResizeGadget(ImageBox,0,0,Width,Height)
    SetGadgetState(ImageBox,IMG::Handle(Image))
  EndIf
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_InnerWidth,Width)
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_InnerHeight,Height)
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_X,(Width - GadgetWidth(ScrollArea)) / 2 + 11); + 11 (FIX) ScrollBarWidth!
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_Y,(Height - GadgetHeight(ScrollArea)) / 2 + 11)
EndProcedure

Procedure.i TestWindow()
  Protected Window.i
  Protected ScrollArea.i
  Protected ImageBox.i
  Protected TestImage.i
  Protected ButtonZoomIn.i
  Protected ButtonZoomOut.i
  Protected ButtonZoomReset.i
  Window = OpenWindow(#PB_Any,0,0,600,430,"TestFenster",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If Window
    ButtonZoomIn = ButtonGadget(#PB_Any,510,10,80,25,"Zoom +")
    ButtonZoomOut = ButtonGadget(#PB_Any,425,10,80,25,"Zoom -")
    ButtonZoomReset = ButtonGadget(#PB_Any,340,10,80,25,"Zoom Reset")
    If ButtonZoomIn And ButtonZoomOut And ButtonZoomReset
      ScrollArea = ScrollAreaGadget(#PB_Any,10,40,580,380,1,1,#PB_Ignore,#PB_ScrollArea_Center)
      If ScrollArea
        ImageBox = ImageGadget(#PB_Any,0,0,100,100,0)
        If ImageBox
          TestImage = CreateTestImage(100)      
          If TestImage
            SetImage(ScrollArea,ImageBox,TestImage,#False,#False)
            Repeat
              Select WaitWindowEvent()
                Case #PB_Event_CloseWindow
                  Break
                Case #PB_Event_Gadget
                  Select EventGadget()
                    Case ButtonZoomIn
                      SetImage(ScrollArea,ImageBox,TestImage,#True,#True)
                    Case ButtonZoomOut
                      SetImage(ScrollArea,ImageBox,TestImage,#True,#False)
                    Case ButtonZoomReset;Setzt nur das Originalbild - kein echtes Reset!
                      SetImage(ScrollArea,ImageBox,TestImage,#False,#False)
                  EndSelect
              EndSelect
            ForEver
            IMG::Free(TestImage)
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndProcedure

TestWindow()
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Zoom ScrollAreaGadget - Mittig ausrichten.

Beitrag von GlassJoe »

Mijikai hat geschrieben:So sollte es gehen...
ScollbarWidth (je nach OS auslesen - ich habs mal als festen Wert eingebaut) berücksichtigen!
SetImage() - hat den Code :)



Code: Alles auswählen

;by Mijikai
;PB 5.60 x64

DeclareModule IMG
  Declare.i Create(Width.i,Height.i,Bits.i = 24,BackColor.l = 0)
  Declare.i Handle(*IMG)
  Declare.i ZoomImage(*IMG,Steps.i)
  Declare.i ZoomIn(*IMG)
  Declare.i ZoomOut(*IMG)
  Declare.i ZoomHandle(*IMG)
  Declare.i ZoomWidth(*IMG)
  Declare.i ZoomHeight(*IMG)
  Declare.i Raw(*IMG)
  Declare.i Width(*IMG)
  Declare.i Height(*IMG)
  Declare.i Bits(*IMG)
  Declare.i Free(*IMG)
EndDeclareModule

Module IMG

  Structure STRUCT_IMG_SIZE
    Width.i
    Height.i
  EndStructure
  
  Structure STRUCT_IMG_ZOOM
    ImageResized.i
    Handle.i
    Size.STRUCT_IMG_SIZE
    Steps.i
    StepsMax.i
  EndStructure

  Structure STRUCT_IMG
    Image.i
    Bits.i
    Size.STRUCT_IMG_SIZE
    Handle.i
    *Zoom.STRUCT_IMG_ZOOM  
  EndStructure
  
  Procedure.i ZoomImage(*IMG.STRUCT_IMG,Steps.i)
    If Not *IMG\Zoom
      *IMG\Zoom = AllocateMemory(SizeOf(STRUCT_IMG_ZOOM))
    EndIf
    If *IMG\Zoom
      If Steps < 10
        Steps = 10
      ElseIf Steps > 300
        Steps = 300
      EndIf
      *IMG\Zoom\StepsMax = 50 * Steps
      *IMG\Zoom\Steps = Steps
      ProcedureReturn #True
    EndIf
  EndProcedure
  
  Procedure.i ZoomIn(*IMG.STRUCT_IMG)
    If Not *IMG\Zoom\Size\Width
      *IMG\Zoom\Size\Width = *IMG\Size\Width
      *IMG\Zoom\Size\Height = *IMG\Size\Height
    EndIf
    If *IMG\Zoom\Size\Width < *IMG\Size\Width + *IMG\Zoom\StepsMax
      *IMG\Zoom\Size\Width + *IMG\Zoom\Steps
      *IMG\Zoom\Size\Height  + *IMG\Zoom\Steps
    Else
      If *IMG\Zoom\ImageResized
         ProcedureReturn *IMG\Zoom\Handle
      Else
         ProcedureReturn *IMG\Handle
      EndIf
    EndIf
    If *IMG\Zoom\ ImageResized
        FreeImage(*IMG\Zoom\ImageResized)
    EndIf
    *IMG\Zoom\ImageResized = CopyImage(*IMG\Image,#PB_Any)
    If *IMG\Zoom\ImageResized
      If ResizeImage(*IMG\Zoom\ImageResized,*IMG\Zoom\Size\Width,*IMG\Zoom\Size\Height)
        *IMG\Zoom\Handle = ImageID(*IMG\Zoom\ImageResized)
        ProcedureReturn *IMG\Zoom\Handle
      Else
        FreeImage(*IMG\Zoom\ImageResized)
        *IMG\Zoom\ImageResized = 0
      EndIf
    Else
        ProcedureReturn *IMG\Handle
    EndIf
  EndProcedure
  
  Procedure.i ZoomOut(*IMG.STRUCT_IMG)
    If Not *IMG\Zoom\Size\Width
      *IMG\Zoom\Size\Width = *IMG\Size\Width
      *IMG\Zoom\Size\Height = *IMG\Size\Height
    EndIf
    If *IMG\Zoom\Size\Width > *IMG\Size\Width
      *IMG\Zoom\Size\Width - *IMG\Zoom\Steps
      *IMG\Zoom\Size\Height - *IMG\Zoom\Steps
    Else
      ProcedureReturn *IMG\Handle
    EndIf
    If *IMG\Zoom\ImageResized
       FreeImage(*IMG\Zoom\ImageResized)
    EndIf
    *IMG\Zoom\ImageResized = CopyImage(*IMG\Image,#PB_Any)
    If *IMG\Zoom\ImageResized
      If ResizeImage(*IMG\Zoom\ImageResized,*IMG\Zoom\Size\Width,*IMG\Zoom\Size\Height)
        *IMG\Zoom\Handle = ImageID(*IMG\Zoom\ImageResized)
        ProcedureReturn *IMG\Zoom\Handle
      Else
        FreeImage(*IMG\Zoom\ImageResized)
        *IMG\Zoom\ImageResized = 0
      EndIf
    Else
       ProcedureReturn *IMG\Handle
    EndIf
  EndProcedure
  
  Procedure.i ZoomHandle(*IMG.STRUCT_IMG)
    If IsImage(*IMG\Zoom\ImageResized)
      ProcedureReturn *IMG\Zoom\Handle
    EndIf
  EndProcedure
  
  Procedure.i ZoomWidth(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Zoom\Size\Width
  EndProcedure
  
  Procedure.i ZoomHeight(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Zoom\Size\Height
  EndProcedure
  
  Procedure.i ZoomRelease(*IMG.STRUCT_IMG)
    If *IMG\Zoom
      If IsImage(*IMG\Zoom\ImageResized)
        FreeImage(*IMG\Zoom\ImageResized)
      EndIf
      FreeMemory(*IMG\Zoom)
    EndIf
  EndProcedure
  
  Procedure.i Create(Width.i,Height.i,Bits.i = 24,BackColor.l = 0)
    Protected *IMG.STRUCT_IMG = AllocateMemory(SizeOf(STRUCT_IMG))
    If *IMG
      *IMG\Image = CreateImage(#PB_Any,Width,Height,Bits,BackColor)
      If *IMG\Image
        *IMG\Bits = Bits
        *IMG\Size\Width = Width
        *IMG\Size\Height = Height
        *IMG\Handle = ImageID(*IMG\Image)
        ProcedureReturn *IMG
      EndIf
      FreeMemory *IMG
    EndIf
  EndProcedure
  
  Procedure.i Handle(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Handle
  EndProcedure
  
  Procedure.i Raw(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Image
  EndProcedure
  
  Procedure.i Width(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Size\Width
  EndProcedure
  
  Procedure.i Height(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Size\Height
  EndProcedure
  
  Procedure.i Bits(*IMG.STRUCT_IMG)
    ProcedureReturn *IMG\Bits
  EndProcedure
  
  Procedure.i Free(*IMG.STRUCT_IMG)
    ZoomRelease(*IMG)
    FreeImage(*IMG\Image)
    FreeMemory(*IMG)
  EndProcedure
  
EndModule

Procedure.i CreateTestImage(ZoomSteps.i)
  Protected Image.i = IMG::Create(1024,768)
  If Image
    If IMG::ZoomImage(Image,ZoomSteps);Bild als zoombar erstellen!
      If StartDrawing(ImageOutput(IMG::Raw(Image)))
        DrawingMode(#PB_2DDrawing_Outlined)
        Line(1024/2,0,1,768,#White)
        Line(0,768/2,1024,1,#White)
        Line(1024/4,0,1,768,#Yellow)
        Line(0,768/4,1024,1,#Yellow)
        Line((1024/4) * 3,0,1,768,#Yellow)
        Line(0,768/4 * 3,1024,1,#Yellow)
        Box((1024/2) - 60,(768/2) - 45,120,90,#Red) 
        StopDrawing()
        ProcedureReturn Image
      EndIf
    EndIf
    IMG::Free(Image)
  EndIf
EndProcedure

Procedure.i SetImage(ScrollArea.i,ImageBox.i,Image.i,Zoom.b,ZoomIn.b)
  Protected Width.i, Height.i, ZoomedImage.i
  If Zoom
    If ZoomIn
      ZoomedImage = IMG::ZoomIn(Image)
    Else
      ZoomedImage = IMG::ZoomOut(Image)
    EndIf
    If ZoomedImage
      Width = IMG::ZoomWidth(Image)
      Height = IMG::ZoomHeight(Image)
      ResizeGadget(ImageBox,0,0,Width,Height)
      SetGadgetState(ImageBox,ZoomedImage)
    EndIf
  Else
    Width = IMG::Width(Image)
    Height = IMG::Height(Image)
    ResizeGadget(ImageBox,0,0,Width,Height)
    SetGadgetState(ImageBox,IMG::Handle(Image))
  EndIf
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_InnerWidth,Width)
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_InnerHeight,Height)
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_X,(Width - GadgetWidth(ScrollArea)) / 2 + 11); + 11 (FIX) ScrollBarWidth!
  SetGadgetAttribute(ScrollArea,#PB_ScrollArea_Y,(Height - GadgetHeight(ScrollArea)) / 2 + 11)
EndProcedure

Procedure.i TestWindow()
  Protected Window.i
  Protected ScrollArea.i
  Protected ImageBox.i
  Protected TestImage.i
  Protected ButtonZoomIn.i
  Protected ButtonZoomOut.i
  Protected ButtonZoomReset.i
  Window = OpenWindow(#PB_Any,0,0,600,430,"TestFenster",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If Window
    ButtonZoomIn = ButtonGadget(#PB_Any,510,10,80,25,"Zoom +")
    ButtonZoomOut = ButtonGadget(#PB_Any,425,10,80,25,"Zoom -")
    ButtonZoomReset = ButtonGadget(#PB_Any,340,10,80,25,"Zoom Reset")
    If ButtonZoomIn And ButtonZoomOut And ButtonZoomReset
      ScrollArea = ScrollAreaGadget(#PB_Any,10,40,580,380,1,1,#PB_Ignore,#PB_ScrollArea_Center)
      If ScrollArea
        ImageBox = ImageGadget(#PB_Any,0,0,100,100,0)
        If ImageBox
          TestImage = CreateTestImage(100)      
          If TestImage
            SetImage(ScrollArea,ImageBox,TestImage,#False,#False)
            Repeat
              Select WaitWindowEvent()
                Case #PB_Event_CloseWindow
                  Break
                Case #PB_Event_Gadget
                  Select EventGadget()
                    Case ButtonZoomIn
                      SetImage(ScrollArea,ImageBox,TestImage,#True,#True)
                    Case ButtonZoomOut
                      SetImage(ScrollArea,ImageBox,TestImage,#True,#False)
                    Case ButtonZoomReset;Setzt nur das Originalbild - kein echtes Reset!
                      SetImage(ScrollArea,ImageBox,TestImage,#False,#False)
                  EndSelect
              EndSelect
            ForEver
            IMG::Free(TestImage)
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndProcedure

TestWindow()
Funzt super. Danke :praise:
Jetzt muss ich nur noch rausfinden wie es der Typ der das 2004 geschrieben hat.
https://www.heise.de/download/product/v ... gger-19170

Bis zu 1000% Zoom hinkriegt, in einem Affen Tempo.

Ich hab mein Tool so geschrieben das es ein ungezommtes FullScreen Image im Thread erstellt sobald ich ein Thumbnail anklicke (und es natürlich nicht wieder das selbe ist) damit wenn ich auf Enter drücke (dann schaltet mein Browser in's Vollbild) ohne große Verzögerung direkt das Fullscreen Bild da ist.

Das es nicht noch mal geladen werden soll (ausser ich hab was anderes angeklickt oder folder change) um das temporäre Zoom Image zu erstellen, sondern nur copyimage(fullscreenimage, zoom) hab ich auch bedacht.

Kriegs aber nicht in dem Tempo hin..........ok mir ist aufgefallen das jpegger viel länger braucht (selbst mit thumbs.db artiger cache datei) um ein Bild das mann angeklickt hat überhaupt erst mal darzustellen...... vl benutzt das Tool für jede Zoom Stufe ein eigenes Image ?

Sprich

Thumb angeklickt -> Wird geladen, wenn geladen

CopyImage(Src,Img100)
CopyImage(Src,Img150)
CopyImage(Src,Img200)
usw

Und je nach Zoom Stufe wird dann das entsprechende IMG geladen.

Bei mir gehts es.

LoadImage
CopyImage(Src,Zoom)
falls Zoom ausgeführt wird, und sich das Bild sich geändert hat.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Antworten