Seite 1 von 1

Enable DPI aware executable (Windows)

Verfasst: 13.04.2019 09:50
von Velindos
Hallo Leute,
habe gerade mal die genannte Funktion eingestellt und getested!

Nun, Das Fenster und die Button stimmen, aber die Bilder werden kleiner angezeigt als der Button, obwohl die Bilder auf das Btn_Format resized wurden!

Was muss man machen das die Bilder wieder richtig resized werden!

Gruss ... Velindos!

Re: Enable DPI aware executable (Windows)

Verfasst: 13.04.2019 11:28
von mk-soft
Die Bilder müssen selber richtig skaliert (ResizeImage) oder neu gezeichnet werden.

Dazu gibt es neu Desktop-Funktionen zur Abfrage der DPI. (DesktopScaledX, etc)

Re: Enable DPI aware executable (Windows)

Verfasst: 13.04.2019 11:52
von Nino
mk-soft hat geschrieben:Die Bilder müssen selber richtig skaliert (ResizeImage) oder neu gezeichnet werden.
Hallo,

betrifft das nur Bilder oder auch noch andere Dinge?
Ist irgendwo offiziell dokumentiert, welche Dinge bei eingeschalteter "DPI awareness" von PB automatisch skaliert werden, und welche man selbst skalieren muss?

Re: Enable DPI aware executable (Windows)

Verfasst: 13.04.2019 14:20
von Velindos
Hallo mk-soft,

setzte die Sache unter Surface ein.

Nun die Bilder neu Skalieren?

Im meiner Software läuft das momentan so:

Code: Alles auswählen

; Hole Desktop Nr
Desk_Anzahl = ExamineDesktops()
; Hole Desktop
Reader_DesktopHoeheY = DesktopHeight(Desk_Reader_Nr)
; Hole KopfzeilenFaktor
Reader_KopfzeilenFaktor.f = Reader_DesktopHoeheY * 0.0648148148148148
; KopfzeilenHoehe
Reader_KopfzeilenHoehe = Int(Reader_KopfzeilenFaktor)
; Image Resized und die sind dann die hälfte 
Img_ListEbenen = CatchImage(#PB_Any,?Img_ListEbenen)
Img_ListEbenen  =ResizeImage(#Img_ListEbenen,Reader_KopfzeilenHoehe,Reader_KopfzeilenHoehe,#PB_Image_Smooth)
Nun gibt es bereits ein Beispiel ....

Irgendwie funzt auch das Lesen des Desktop unter X2 = DesktopMouseX() nicht mehr etc. Der Wert schneidet in meinen Fall versetzt aus oder beim Fensterklick ist er daneben!

Gruss ... Velindos!

Re: Enable DPI aware executable (Windows)

Verfasst: 14.04.2019 09:06
von mk-soft
Wie es aus sieht must du die Desktop Position noch umrechnen.

Dazu gibt des die Funktion DesktopUnscaledX().

Re: Enable DPI aware executable (Windows)

Verfasst: 14.04.2019 09:27
von mk-soft
Nino hat geschrieben:
mk-soft hat geschrieben:Die Bilder müssen selber richtig skaliert (ResizeImage) oder neu gezeichnet werden.
Hallo,

betrifft das nur Bilder oder auch noch andere Dinge?
Ist irgendwo offiziell dokumentiert, welche Dinge bei eingeschalteter "DPI awareness" von PB automatisch skaliert werden, und welche man selbst skalieren muss?
Wie ich es sehe müssen die Bilder immer selber skaliert werden.

Code: Alles auswählen

;-TOP

Procedure LoadImageDPI(Image, File.s)
  Protected Result
  
  Result = LoadImage(Image, File)
  If Result
    If Image = #PB_Any
      ResizeImage(Result, DesktopScaledX(ImageWidth(Result)), DesktopScaledY(ImageHeight(Result)))
    Else
      ResizeImage(Image, DesktopScaledX(ImageWidth(Image)), DesktopScaledY(ImageHeight(Image)))
    EndIf
  EndIf
  ProcedureReturn Result
EndProcedure

Procedure CatchImageDPI(Image, *Memory, Size)
  Protected Result
  
  If Size
    Result = CatchImage(Image, *Memory, Size)
  Else
    Result = CatchImage(Image, *Memory)
  EndIf  
  If Result
    If Image = #PB_Any
      ResizeImage(Result, DesktopScaledX(ImageWidth(Result)), DesktopScaledY(ImageHeight(Result)))
    Else
      ResizeImage(Image, DesktopScaledX(ImageWidth(Image)), DesktopScaledY(ImageHeight(Image)))
    EndIf
  EndIf
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, 200, 100, "ButtonImage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If LoadImageDPI(0, #PB_Compiler_Home + "/Examples/Sources/Data/PureBasic.bmp")
    ButtonImageGadget(0, 10, 10, 180, 50, ImageID(0))
  EndIf
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf