Seite 5 von 6

Re: Standardfont identifizieren

Verfasst: 23.07.2013 21:49
von Daffy0815
@RSBasic

Weist Du auch warum es da "nicht problematisch" ist?
Kann ich Dir sagen!
Entweder sind die Texte in den Buttons einfach abgeschnitten oder es werden völlig sinnentstellte Begriffe verwendet.
(Ist doch im Deutschen auch nicht anders - Oder ist "OK" etwa ein deutsches Wort?)
Lobenswert ist beispielsweise der Button "Abbrechen" hier auf dieser Seite!
Wie oft habe ich schon den Button "Abbruch" gesehen.

Aber lassen wir mal diese Grundsatzdiskussion.

Ich habe das Beispiel mal so geändert das es funktionieren müsste aber es funktioniert eben NICHT!
Vermutlich stimmt irgendwas mit der Textlängenbestimmung nicht.
Aber was?

Code: Alles auswählen

EnableExplicit

Declare.i TextRealWidth(FontID, Text$)
Declare GetSystemFontParameters()

Define Event.i, Quit.i
Define Fensterbreite.i
Global WindowTitleFont.s
Global WindowTitleFontHeight.i 
Global IconFont.s
Global IconFontHeight.i
Global MenuFont.s
Global MenuFontHeight.i
Global MessageFont.s
Global MessageFontHeight.i
Global SmallWindowTitleFont.s
Global SmallWindowTitleFontHeight.i

Global FontIdWindowTitleFont.i

Enumeration 1
   #WindowMain
   #WindowEinstellungen
EndEnumeration

Enumeration 1
    #Deutsch            
    #Englisch           
    #Franzoesisch       
    #Spanisch           
    #Portugiesisch      
    #Slowakisch         
    #Polnisch           
    #Tschechisch
EndEnumeration
#AnzahlSprachen = #Tschechisch
Global Sprache.b = #Deutsch

Global Dim Text_Einstellungen$(#AnzahlSprachen)
Text_Einstellungen$(#Deutsch) = "Einstellungen"
Text_Einstellungen$(#Englisch) = "Settings"   
Text_Einstellungen$(#Franzoesisch) = "Réglages"        
Text_Einstellungen$(#Spanisch) =  "Preparar"        
Text_Einstellungen$(#Portugiesisch) = "Configuraçào"        
Text_Einstellungen$(#Slowakisch) = "Nastavenia"     
Text_Einstellungen$(#Polnisch) =  "Nastawienia"
Text_Einstellungen$(#Tschechisch) = "Nastavení"

GetSystemFontParameters()
Debug "WindowTitleFont_____________: " + WindowTitleFont.s           
Debug "WindowTitleFontHeight_______: " + Str(WindowTitleFontHeight.i)
FontIdWindowTitleFont.i = FontID(LoadFont(#PB_ANY, WindowTitleFont.s, WindowTitleFontHeight.i))

OpenWindow(#WindowEinstellungen, 100, 100, 0, 0, "", #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
Fensterbreite.i = WindowWidth(#WindowEinstellungen, #PB_Window_FrameCoordinate)
CloseWindow(#WindowEinstellungen)

Fensterbreite.i = Fensterbreite.i + TextRealWidth(FontIdWindowTitleFont.i, Text_Einstellungen$(Sprache.b))
OpenWindow(#WindowEinstellungen, 100, 100, Fensterbreite.i, 0, Text_Einstellungen$(Sprache.b), #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)



Repeat
  Event.i = WaitWindowEvent()
 
  If Event.i = #PB_Event_CloseWindow
    Quit.i = 1
  EndIf
Until Quit.i = 1

End

PROCEDURE.i TextRealWidth(FontID, Text$)
   PROTECTED dc = GetDC_(0)
   PROTECTED sz.Size
   
   SelectObject_(dc, FontID)
   GetTextExtentPoint32_(dc, Text$, Len(Text$), sz)
   ReleaseDC_(0, dc)
   
   PROCEDURERETURN sz\cx 
ENDPROCEDURE

Procedure GetSystemFontParameters()
  Define spinfo.NONCLIENTMETRICS

  spinfo\cbSize = SizeOf(spinfo)
  SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS,0,@spinfo,0)
  WindowTitleFont.s = PeekS(@spinfo\lfCaptionFont\lfFaceName[0])
  WindowTitleFontHeight.i = -PeekL(@spinfo\lfCaptionFont\lfHeight) - 3
  SmallWindowTitleFont.s = PeekS(@spinfo\lfSMCaptionFont\lfFaceName[0])
  
  MenuFont.s = PeekS(@spinfo\lfMenuFont\lfFaceName[0])
  MenuFontHeight.i = - PeekL(@spinfo\lfMenuFont\lfHeight) - 3
  MessageFont.s = PeekS(@spinfo\lfMessageFont\lfFaceName[0])
  MessageFontHeight.i = - PeekL(@spinfo\lfMessageFont\lfHeight) - 3
EndProcedure
Gruß

Daffy

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:02
von RSBasic
Hast du mal WindowTitleFont.s und WindowTitleFontHeight ausgegeben? Bei mir ist es leer und daran könnte es liegen.
Da brauchst du die richtige Schriftart und -größe, die auch in der Window-Titelleiste verwendet wird. Ich habe es bei mir testweise mit "Segoe UI" und 9 probiert, bei mir stimmt es dann, egal in welcher Sprache.

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:06
von RSBasic
Weil du eben die Funktion "GetSystemFontParameters()" nicht aufrufst.

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:11
von Daffy0815
Jo, hatte ich auch gefunden und gerade korrigiert.

Aber es stimmt noch immer nicht.
Der für den Text freigehaltene Platz ist doch viel zu lang!

Gruß

Daffy

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:13
von RSBasic
Kannst du zwei Screenshots erstellen, damit man besser sieht und vergleichen kann? Danke im Voraus.

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:26
von Daffy0815
Das erste Foto zeigt das was vom Programm ausgegeben wird.
Das zweite Foto zeigt das was ich als Ausgabe erwartet hätte (von Hand nachskaliert)

http://www.fotos-hochladen.net/uploads/ ... sfryu1.jpg

http://www.fotos-hochladen.net/uploads/ ... phvr67.jpg

Gruß

Daffy

Edit by NicTheQuick: Image-Tags korrigiert und durch URLs ersetzt

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:39
von Daffy0815
Ich weis woran es liegt!

Maskiere mal die Zeilen

Code: Alles auswählen

;CloseWindow(#WindowEinstellungen)

;Fensterbreite.i = Fensterbreite.i + TextRealWidth(FontIdWindowTitleFont.i, Text_Einstellungen$(Sprache.b))
;OpenWindow(#WindowEinstellungen, 100, 100, Fensterbreite.i, 0, Text_Einstellungen$(Sprache.b), #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
aus und schau Dir mal an was passiert.

Selbst bei einem Leerstring ist da noch Platz freigehalten!

Gruß

Daffy

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:42
von RSBasic
Daffy0815 hat geschrieben:Selbst bei einem Leerstring ist da noch Platz freigehalten!
Das liegt aber wahrscheinlich daran, dass ein Fenster eine Mindestbreite hat.

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:49
von Daffy0815
Und WindowBounds ändert daran auch nichts!
(Habe ich gerade probiert)

Aber soweit so gut, ein Fenster dessen Gesamtbreite nur durch die Titelzeile definiert wird ist in der Realität doch eher unwahrscheinlich!


Gruß

Daffy

Re: Standardfont identifizieren

Verfasst: 23.07.2013 22:51
von RSBasic
Das kannst du auch nicht ändern. Ist ein Standard-Verhalten. Nur ein rahmenloses Fenster kann weniger als 100px oder so breit sein.