Unterschiedliche Darstellung bei "LoadFont"?

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Unterschiedliche Darstellung bei "LoadFont"?

Beitrag von Ractur »

Hallo,

ähm, ich habe heute mal meine Software zum testen bei WIN XP PRO mit VMware Player laufen lassen.

Irgendwie habe ich aber bemerkt, das die FONT-Größe variert, bei Windows7 wird der gleiche Font (Arial) größer dargestellt als wie bei XP.

Kann das sein? Ich dachte sowas wie FONT-Darstellung wären "fixe" Größen?

Mir fällt da nur ein das ich dann eben die OS Version abfrage und den FONT dann entsprechend zum OS lade? Oder ist das ein Fehler von VM Ware Player? Weil irgendwie kann ich das jetzt gar nicht glauben das Arial 6 auf WIN7 größer ist als auf WinXP :lol:

Code: Alles auswählen

    If LoadFont(1, "Arial", 6)
      SetGadgetFont(#PB_Default, FontID(1))
    EndIf
(Vordergrund Win7 - Hintergrund WIN XP)
http://yoomitech.de/software/freeware/w ... /fonts.jpg

und

Code: Alles auswählen

Procedure SetGadgetFontStyle(gad,bold,italic,underline,strikeout, *font.LONG)
  font=SendMessage_(GadgetID(gad),#WM_GETFONT,0,0) : GetObject_(font,SizeOf(LOGFONT),lg.LOGFONT)
  ;Delete old font. The following avoids deleting the original 'default' font.
  If *font\l
    DeleteObject_(*font\l)
  EndIf
  If bold=1 : lg\lfWeight=#FW_BOLD : EndIf : lg\lfItalic=italic : lg\lfUnderline=underline : lg\lfStrikeOut=strikeout
  font=CreateFontIndirect_(lg) : SendMessage_(GadgetID(gad),#WM_SETFONT,font,1)
  *font\l=font
EndProcedure

If OpenWindow(0,300,250,300,200,"test",#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  Frame3DGadget(1,10,10,200,150,"This will be bold") : SetGadgetFontStyle(1,1,0,0,0, @fr3font)
  ButtonGadget(2,30,50,120,25,"And this is italic") : SetGadgetFontStyle(2,0,1,0,0, @butfont)
  TextGadget(3,30,100,120,25,"And this is a mix!") : SetGadgetFontStyle(3,1,1,1,1, @textfont)
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

DeleteObject_(fr3font)
DeleteObject_(butfont)
DeleteObject_(textfont)
Danke schon mal ;)

Matthias
Ractur, der mit dem Programmierstil der 80er Jahre :D
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Unterschiedliche Darstellung bei "LoadFont"?

Beitrag von STARGÅTE »

Ractur hat geschrieben:Kann das sein? Ich dachte sowas wie FONT-Darstellung wären "fixe" Größen?
Ja, aber nur in Bezug auf die auf dem System eingestellte Auflösung (dpi bzw. ppi).

Bei LoadFont() gibst du bei der Size die Größe in "Point" an, nicht in "Pixel".
Point = 1/72 Zoll
Jenachdem, welcher Wert in deinem System eingestellt ist (zB 96ppi), so würde eine 9 Punkt-Font, also 12 Pixel einnehmen.
Bei 120ppi halt 15 Pixel.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Re: Unterschiedliche Darstellung bei "LoadFont"?

Beitrag von Ractur »

STARGÅTE hat geschrieben:
Ractur hat geschrieben:Kann das sein? Ich dachte sowas wie FONT-Darstellung wären "fixe" Größen?
Ja, aber nur in Bezug auf die auf dem System eingestellte Auflösung (dpi bzw. ppi).

Bei LoadFont() gibst du bei der Size die Größe in "Point" an, nicht in "Pixel".
Point = 1/72 Zoll
Jenachdem, welcher Wert in deinem System eingestellt ist (zB 96ppi), so würde eine 9 Punkt-Font, also 12 Pixel einnehmen.
Bei 120ppi halt 15 Pixel.
Danke :allright: :allright: :allright: Gut Du wirst lachen, aber mit den DPI hatte ich mich noch nie wirklich beschäftigt :)

Code: Alles auswählen

Procedure.i Gui_GetDesktopDpiX()
  Protected hdc.i
  Protected hDpi.i
  hdc = GetDC_(GetDesktopWindow_())
  If hdc
    hDpi = GetDeviceCaps_(hdc, #LOGPIXELSX)
    ReleaseDC_(GetDesktopWindow_(), hdc)
  EndIf
  ProcedureReturn hDpi
EndProcedure

Global ScreenDpi.f
ScreenDpi = 96/Gui_GetDesktopDpiX()

FontID1 = LoadFont(1, "Arial" , Round(10*ScreenDpi, #PB_Round_Nearest))
If OpenWindow(0,300,250,150,150,"test",#PB_Window_SystemMenu)
  
  SetGadgetFont(#PB_Default, FontID(1))
  
HyperLinkGadget(10, 15, 45, 270,20,"Purebasic ist toll! ;)", RGB(0,255,0), #PB_HyperLink_Underline)

  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
So funktioniert das nun :D

http://www.forums.purebasic.com/english ... 12&t=48873 [hüstel] ;)

Danke Dir für die späte Info mitten in der Nacht STARGÅTE ;)

Gruß Matthias
Ractur, der mit dem Programmierstil der 80er Jahre :D
Antworten