Ok bereit zum Testen.
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.