Scrollbares Image im ImageGadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
topsoft
Beiträge: 67
Registriert: 16.09.2004 11:55
Wohnort: nrw

Scrollbares Image im ImageGadget

Beitrag von topsoft »

Hallo,

ich habe folgenden Testcode:

Code: Alles auswählen

#Fenster_w  = 640 : #Fenster_h  = 480 : #Scroll_w   = 2100 : #Scroll_h   = 2940

Define hWin.i = OpenWindow(#PB_Any, 0, 0, #Fenster_w, #Fenster_h, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  ; neues Fenster
If hWin
  Define scroll.i = ScrollAreaGadget(#PB_Any, 0, 0, #Fenster_w, #Fenster_h, #Scroll_w, #Scroll_h)                             ; Scrollbereich 2100 x 2940 Pixel auf 640 x 480 Pixel
  Define imgad.i = ImageGadget(#PB_Any, 0, 0, #Scroll_w, #Scroll_h, #Null)                                                    ; Gadget fuer das Bild im Scrollbereich, Grösse 2100 x 2940 Pixel
  Define image.i = CreateImage(#PB_Any, #Scroll_h, #Scroll_w, 24, #Green)                                                     ; das Bild was ausschnittsweise im Scrollbereich zu sehen sein soll
  SetGadgetState(imgad, ImageID(image))                                                                                       ; Bild dem Gadget zuweisen
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  CloseWindow(hWin)
EndIf
End
Nun sollte das Bild (hier gruener Hintergrund) genauso groß wie das Imagegadget sein. Wie man auf dem folgenden Bild sieht ist dem aber nicht so.
Vergrößer ich das Bild wird auch irgendwann das ganze Imagegadget ausgefüllt. Beide sind aber gleich groß. Was übersehe ich hier nur?

Bild

Gruß
Skylake QuadCore i7 6700K @4400MHz, MSI Z170A Gaming M5, 64 GB DDR4 @ 2133MHz, B: Ramdisk 32GB, C: Raid0 SATA SSD 1TB, D: Raid0 M2 SSD 1TB, E: Raid0 HDD 8TB, 28" 4K @ RTX2080, Win10 X64
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Scrollbares Image im ImageGadget

Beitrag von mk-soft »

Bei CreateImage Width und Height vertauscht 8)

Update Eventuell DPI Anpassung berechnen

Code: Alles auswählen

#Fenster_w  = 640 : #Fenster_h  = 480 : #Scroll_w   = 2100 : #Scroll_h   = 2940

Define x, y, dx, dy

Define hWin.i = OpenWindow(#PB_Any, 0, 0, #Fenster_w, #Fenster_h, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  ; neues Fenster
If hWin
  Define scroll.i = ScrollAreaGadget(#PB_Any, 0, 0, #Fenster_w, #Fenster_h, #Scroll_w, #Scroll_h)                             ; Scrollbereich 2100 x 2940 Pixel auf 640 x 480 Pixel
  Define imgad.i = ImageGadget(#PB_Any, 0, 0, #Scroll_w, #Scroll_h, #Null)  ; Gadget fuer das Bild im Scrollbereich, Grösse 2100 x 2940 Pixel
  
  ; DPI Mode
  dx = DesktopScaledX(#Scroll_w)
  dy = DesktopScaledY(#Scroll_h)
  
  Define image.i = CreateImage(#PB_Any, dx, dy, 24, #Green) 
  
  x = DesktopScaledX(10)
  y = DesktopScaledY(10)
  
  StartDrawing(ImageOutput(image))
  DrawingMode(#PB_2DDrawing_Outlined)
  Box(x + 1, y + 1, dx - 2 * x, dy - 2 * y, #White)
  Box(x, y, dx - 2 * x, dy - 2 * y, #Black)
  StopDrawing()
  
  SetGadgetState(imgad, ImageID(image))                                                                                       ; Bild dem Gadget zuweisen
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  CloseWindow(hWin)
EndIf
End
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
topsoft
Beiträge: 67
Registriert: 16.09.2004 11:55
Wohnort: nrw

Re: Scrollbares Image im ImageGadget

Beitrag von topsoft »

Hallo,
Bei CreateImage Width und Height vertauscht
Oh je, manchmal sieht man den Wald vor lauter Bäumen nicht.
Eventuell DPI Anpassung berechnen
Ja das trifft auch zu.
Wenn ich "DPI-kompatibles Executable erstellen" benutze muß ich DesktopScaled nutzen.

Danke und Gruß
Skylake QuadCore i7 6700K @4400MHz, MSI Z170A Gaming M5, 64 GB DDR4 @ 2133MHz, B: Ramdisk 32GB, C: Raid0 SATA SSD 1TB, D: Raid0 M2 SSD 1TB, E: Raid0 HDD 8TB, 28" 4K @ RTX2080, Win10 X64
Antworten