Fragen zu DPI handling in PB

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Fragen zu DPI handling in PB

Beitrag von Kukulkan »

Hallo matbal,

Danke, das ist schon sehr hilfreich. Momentan habe ich aber auch noch Probleme mit der unterschiedlichen Darstellung und Positionierung unter Linux und MacOS im Vergleich mit Windows. Daher hab ich mich entschieden einen Wrapper für das erstellen der Gadgets zu erstellen. Aus ButtonGadget() wird dann eben gd_ButtonGadget() etc. Und dieses Include macht dann Betriebssystem-Anpassungen und soll auch das Scaling übernehmen. Bin schon recht weit. Evtl. kann ich das mal hier posten wenn es fertig ist.

Aus deinem Code kann ich für Windows schonmal das auslesen der DPI klauen ;-)

Grüße,

Volker
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fragen zu DPI handling in PB

Beitrag von bobobo »

Anpassung geht doch auch mit Boardmitteln, oder vertu ich mich da?
Textheight(..) und TextWidth(..) gibt im 2DKontext die Höhe und Breite von Texten zurück.
FF ein Code

Code: Alles auswählen

;Pb510
;weit entfernt von fertig, nur ne Demo

Global Window_0

Global Button_0, Text_0, Editor_0

Enumeration #PB_Compiler_EnumerationValue
  #Font_0
  #Font_1
  #Font_2
EndEnumeration

LoadFont(#Font_0,"", 12,#PB_Font_HighQuality)
LoadFont(#Font_1,"", 17,#PB_Font_HighQuality)
LoadFont(#Font_2,"", 8,#PB_Font_HighQuality)

Procedure OpenWindow_0()
  Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
  Button_0 = ButtonGadget(#PB_Any, 135, 15, 50, 25, "klickemal")
  ;SetGadgetFont(Button_0, FontID(#Font_0))
  Text_0 = TextGadget(#PB_Any, 40, 55, 195, 20, "gna gna gnag gna"+#CRLF$+"gna gna gna gna gna gna gna gna gna")
  Editor_0 = EditorGadget(#PB_Any, 40, 255, 195, 20,#PB_Editor_ReadOnly)
  SetGadgetText(Editor_0,"gna gna gnag gna"+#CRLF$+"gna gna gna gna gna gna gna gna gna")
  SetGadgetColor(Text_0, #PB_Gadget_BackColor,RGB(128,255,255))
  ;SetGadgetFont(Text_0, FontID(#Font_0))
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
      
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

Procedure my_resize(windownr,gadgetnr,fontid,text.s="",type=0)
  If text.s=""
    text.s=GetGadgetText(gadgetnr) ;
  EndIf
  
  Protected two,tw, th, cs
  If IsWindow(windownr) 
    
    StartDrawing(WindowOutput(windownr))
    DrawingFont(fontid)
    
    If type=1
      cs=CountString(text,#CRLF$)+1
      For c=1 To cs
        th+TextHeight(text)
        two= TextWidth(StringField(text,c,#CRLF$))+8
        If two>tw
          tw=two
        EndIf
      Next c
    Else
      tw= TextWidth(text)+8
      th= TextHeight(text)+8
    EndIf
    ResizeGadget(gadgetnr,#PB_Ignore,#PB_Ignore,tw, th)
    SetGadgetFont(gadgetnr,fontid)
    SetGadgetText(gadgetnr,text)
    StopDrawing()
  EndIf
EndProcedure

OpenWindow_0()

my_resize(Window_0,Button_0,FontID(#Font_0))

my_resize(Window_0,Text_0,FontID(#Font_1),"Für Textgadgets ist "+#CRLF$+"das eigentlich nicht so gut geeignet"+#CRLF$+#CRLF$+#CRLF$+"oder doch?",1)

Repeat
  event = WaitWindowEvent()
  gadget=EventGadget()
  If event=#PB_Event_Gadget And gadget=Button_0
    my_resize(Window_0,Button_0,FontID(#Font_0),"AUA! PASS DOCH AUF!")
    my_resize(Window_0,Editor_0,FontID(#Font_2),"mit dem Editorgadget gibt es erstmla Problemchen weil es da Scrollbereiche gibt"+#CRLF$+"das ist doch alles Hühnerkacke"+#CRLF$+#CRLF$+"oder sowas in der Art"+#CRLF$+"das ist doch alles Hühnerkacke oder sowas in der Art",1)
    my_resize(Window_0,Text_0,FontID(#Font_1),"ähämm.. es gäbe auch"+#CRLF$+#CRLF$+"noch"+#CRLF$+" das CanvasGadget..",1)
  EndIf
Until Window_0_Events(event) = #False
End
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten