Resizefehler (dpi aware)

Für allgemeine Fragen zur Programmierung mit PureBasic.
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Resizefehler (dpi aware)

Beitrag von matbal »

Hallo Leute, könnt ihr das verifizieren?

Folgende Situation: Die Bildschirmskalierung steht auf 150 Prozent und in den Compileroptionen ist "Enalbe DPI aware executable" aktiviert. (Bei 100 Prozent ist alles in Ordnung)
Im Zusammenhang mit dem AutoResizer-Include verhielten sich Comboboxen chaotisch.
Ich konnte das Problem bei mir mit dem Code nachstellen:

Code: Alles auswählen

Procedure Resize()
   Protected ww = WindowWidth(0)
   Protected wh = WindowHeight(0)
   
   ResizeGadget(1, #PB_Ignore, #PB_Ignore, ww - 20, #PB_Ignore) ; Höhe korrekt
   
   ResizeGadget(2, #PB_Ignore, #PB_Ignore, ww - 20, #PB_Ignore) ; Höhe wird immer kleiner 
   ;ResizeGadget(2, #PB_Ignore, #PB_Ignore, ww - 20, 20)    ; Höhe 2 Pixel zu klein
   
   Debug GadgetHeight(2)
   
EndProcedure


OpenWindow(0, 100, 100, 400, 300, "Test", #PB_Window_SizeGadget | #PB_Window_SystemMenu)

StringGadget(1, 10, 10, 380, 20, "String")
ComboBoxGadget(2, 10, 40, 380, 20) 

;ResizeGadget(2, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore) ; Höhe verringert sich
  
Debug GadgetHeight(2)


BindEvent(#PB_Event_SizeWindow, @Resize())

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Problem scheint ResizeGadget() mit #PB_Ignore als 4 Parameter und der ComboBox zu sein. Die Höhe der ComboBox wird bei jedem Aufruf von ResizeGadget um 2 Pixel kleiner. (Mein System: PB 5.70 unter Win10)

EDIT: Da niemand reagiert, habe ich noch ein Clip, der den Fehler zeit: https://www.dropbox.com/s/2cg652t8pm36w ... t.mp4?dl=0


Was ich seltsam für die finale PB-Version finde, der FormDesigner ist bei eingestellter Windows-Bildschirmskalierung absolut unbrauchbar geworden.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Resizefehler (dpi aware)

Beitrag von Kurzer »

Hallo matbal,

ich kann das Problem unter Windows 7 x64 mit PB 5.70 final bestätigen.
Beim Ändern der Fenstergröße wird die CMB offenbar bei jedem Resize-Event stetig in der Höhe verkleinert bis zu einem Minimalwert, um dann wieder auf die ursprüngliche Größe gesetzt zu werden. Dann beginnt das Spiel von neuem.

Bzgl. des Formdesigners und der neuen DPI aware Funktion von PB hatte ich hier auch schon mal meine Konfusion geäußert. Ich habe das nach ein paar Wochen aber nicht mehr weiter verfolgt, da ich derzeit eher in anderen Bereichen aktiv bin.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Resizefehler (dpi aware)

Beitrag von Nino »

matbal hat geschrieben:Was ich seltsam für die finale PB-Version finde, der FormDesigner ist bei eingestellter Windows-Bildschirmskalierung absolut unbrauchbar geworden.
Dazu fällt mir ehrlich gesagt nur folgendes ein:
HeX0R hat geschrieben:Geht's nur mir so, oder ist diese 5.70 irgendwie aus der Not geboren?
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Resizefehler (dpi aware)

Beitrag von Mijikai »

Mit dem Speicherfehler von #Null$ einer der Hauptgründe warum ich nicht auf 5.70 umsteige!
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Resizefehler (dpi aware)

Beitrag von _JON_ »

Lasst einfach die Finger von der 5.70.

Wenn man sowas hier als Final sieht, ist doch klar dass,
das Team den High DPI Sinn gar nicht verstanden hat.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Resizefehler (dpi aware)

Beitrag von mk-soft »

Läuft also mit der neuen Funktion nicht alles perfekt.

Siehe Link: https://www.purebasic.fr/english/viewto ... 4&start=30

Mit dem Modul ScaleGadget kann man aber erst mal einiges abfangen
und mit der nächsten version von PB sollte es klappen. Fred hat sich dazu auch schon kurz geäussert.

Link zu ScaleGadget: https://www.purebasic.fr/english/viewto ... 12&t=71823

Code: Alles auswählen

;-TOP

; Example compiler options 'Enable DPI-Aware'

IncludeFile "Modul_ScaleGadgets.pb"

UseModule ScaleGadgets

Enumeration Window 1
  #Main
EndEnumeration

Enumeration Gadget
  #Editor
  #Container
  #ButtonB0
  #ButtonB1
  #ButtonB2
EndEnumeration

Enumeration MenuItem
  #New
  #Load
  #Save
  #Exit
EndEnumeration

Enumeration StatusBar
  #StatusBar
EndEnumeration

; -----------------------------------------------------------------

Global ExitApplication

Global dpi.f = DesktopResolutionX()
SetScale(dpi)

; -----------------------------------------------------------------

Procedure DoSizeWindow()
  ResizeGadget(#Editor, 10, 10, WindowWidth(#Main) - 20 , WindowHeight(#Main) - 105 - MenuHeight())
  ResizeGadget(#Container, 10, WindowHeight(#Main) - 85 - MenuHeight() , WindowWidth(#Main) - 20, 50)
  ;ScaleAllGadgets(#Main, MenuHeight() + StatusBarHeight(#StatusBar))
EndProcedure

; -----------------------------------------------------------------

Procedure OpenMain(x = 10, y = 10, width = 550, height = 415)
  OpenWindow(#Main, x, y, width, height + MenuHeight(), "Module ScaleGadgets", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
  
  If CreateMenu(0, WindowID(#Main))
    ; Mac Menu´s
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
      MenuItem(#PB_Menu_About, "")
      MenuItem(#PB_Menu_Preferences, "")
      MenuItem(#PB_Menu_Quit, "")
    CompilerEndIf
    MenuTitle("&File")
    MenuItem(#New, "&New")
    MenuItem(#Load, "&Load")
    MenuItem(#Save, "&Save")
    MenuBar()
    MenuItem(#Exit, "&Exit")
  EndIf
  
  CreateStatusBar(#StatusBar, WindowID(#Main))
  AddStatusBarField(#PB_Ignore)
  StatusBarText(#StatusBar, 0, "ScaleGadgets")
  EditorGadget(#Editor, 10, 10, 530, 310)
  SetGadgetText(#Editor, "I like Purebasic!")
  ContainerGadget(#Container, 10, 330, 530, 50, #PB_Container_Single)
  ButtonGadget(#ButtonB0, 10, 10, 160, 30, "Button 0")
  ButtonGadget(#ButtonB1, 180, 10, 170, 30, "Button 1")
  ButtonGadget(#ButtonB2, 360, 10, 160, 30, "Button 2")
  CloseGadgetList()
EndProcedure

OpenMain()

BindEvent(#PB_Event_SizeWindow, @DoSizeWindow())

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      ExitApplication = 1
      
  EndSelect
Until ExitApplication

End
[/size]
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Resizefehler (dpi aware)

Beitrag von Kurzer »

mk-soft hat geschrieben:Läuft also mit der neuen Funktion nicht alles perfekt.
Siehe Link: https://www.purebasic.fr/english/viewto ... 4&start=30
[...]
Fred hat sich dazu auch schon kurz geäussert.
Wo denn genau? Oder meinst Du sein kurzes "I will take a look" in dem oben verlinkten Thread? :)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Resizefehler (dpi aware)

Beitrag von mk-soft »

Kurzer hat geschrieben:
mk-soft hat geschrieben:Läuft also mit der neuen Funktion nicht alles perfekt.
Siehe Link: https://www.purebasic.fr/english/viewto ... 4&start=30
[...]
Fred hat sich dazu auch schon kurz geäussert.
Wo denn genau? Oder meinst Du sein kurzes "I will take a look" in dem oben verlinkten Thread? :)
Ja genau :mrgreen:

Zu mindestens ein Erkenntnis das es Fred gelesen hat <)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten