Standardfont identifizieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Standardfont identifizieren

Beitrag von NicTheQuick »

Daffy0815 hat geschrieben:Und mal so am Rande: Warum kommen immer solche Sprüche wie "Das hättest Du aber auch selbst herausfinden können"? Was soll das?
Weil erstens von dir auch Sätze kommen wie "Wurde wohl mal wieder was geändert?!", die sehr herablassend klingen und auch so ein "Spruch-Potential" haben. Und zweitens darf man im Allgemein-Forum doch erwarten, dass man selbst drauf kommt, dass das ein Pointer ist, der zwei Zeilen darüber per Parameter übergeben wurde und somit der Stern an den Namen gehört und nicht von einem Leerzeichen getrennt sein darf. Wenn jemand schon bei der Windows-API angekommen ist, darf man doch davon ausgehen, dass er sich auch mit Pointern zumindest grundlegend auskennt, oder?

Nichtsdestotrotz bitte weiter im Text. Über andere Themen können wir auch per PN diskutieren, wenn du das möchtest.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von Daffy0815 »

@NickTheQuick

Möchte ich nicht da derartige "Diskussionen" kontraproduktiv sind!

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von RSBasic »

Daffy0815 hat geschrieben:Da es optisch jedoch unschön aussehen würde wenn zum Beispiel ein Button in der Sprache 1 den Text "abc" und in der Sprache 2 den Text "xycvbnmjfr" enthielte, und dadurch unterschiedliche Buttonbreiten entstehen würden muß vorher die maximale notwendige Buttonbreite für alle Sprachen berechnet werden.
Um es zu automatisieren, kannst du auch den folgenden Code von freak nutzen: http://www.rsbasic.de/aktualisierung/wi ... C3%9Fen.pb
Dann passt es immer, egal in welcher Schriftgröße.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von Daffy0815 »

@RSBasic

Sieht interessant aus!

Irgendwie habe ich den Eindruck, dass alle in die Richtung gehenden Routinen immer "andersherum" arbeiten.
Es wird nicht erst berechnet wie groß die Objekte sind und dann diese aufgebaut sondern erst "unsichtbar" aufgebaut, ausgemessen und dann erneut aufgebaut.
Oder sehe ich da was falsch?


Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von Daffy0815 »

Das mit dem erst "unsichtbar" aufbauen wäre glaube ich sowieso die sicherste Methode unter der Voraussetzung das man auch in der Lage ist alle Elemente
daraufhin zu testen das keine Überschreitung stattfand und falls doch gegebenenfalls zu korrigieren.

Hier hätte ich mal ein Beispiel:

Code: Alles auswählen

EnableExplicit

Define Event.i, Quit.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í"


OpenWindow(#WindowEinstellungen, 100, 100, 0, 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
Wie hier deutlich zu sehen ist passt durch die Angabe von Null für Höhe und Breite des Fensters kein Fenstertitel gleich welcher Sprache in die Titelzeile.
Ziel wäre es nun dies (unsichtbar) festzustellen und dann mit Resize das Fenster so zu skalieren das es passt.

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von RSBasic »

Vielleicht hilft der folgende Code, um anhand des vorgegebenen Textes die Breite in Pixel zu ermitteln: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Du müsstest aber auch die Breite der Window-Buttons (Minimieren, Maximieren und Schließen) und die Breite des WindowIcons zusätzlich addieren.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von Daffy0815 »

@RSBasic

Ja, das ist schon klar!
Es läuft aber wieder auf die "vorberechnende" Methode hinaus.
Ich dacht da eher an so eine Art "Carry-Flag" das in dem gezeigten Beispiel aussagt das der Text nicht reinpasst.

Ich habe nämlich bei den zig Methoden zur Berechnung die hier zu finden sind immer irgendein "Wurm" drin steckte das es irgendwie bei anderen Auflösungen oder Fontgrößen dan doch nicht richtig gepasst hat.

In dem Beispiel müsste man doch eigentlich nur das Fenster mit einem Leerstring als Titel unsichtbar aufbauen, die Breite des Fensters abfragen, die Textbreite des Titels berechnen, addieren und dann hätte man schon mal die Mindestbreite des Fensters für die vollständige Darstellung des Titels.


Gruß

Daffy
Zuletzt geändert von Daffy0815 am 23.07.2013 21:09, insgesamt 1-mal geändert.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von RSBasic »

Ist es nicht sinnvoller und einfacher, wenn du einfach größere Fenster (z.B. 800x600) und breitere Buttons erstellst, so dass alle von dir definierten Texte immer reinpassen?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von Daffy0815 »

@RSBasic

Nein, das ist nicht sinnvoller.
Ich kann Dir aus bereits gemachten Erfahrungen mit einem anderen Programm sagen das das nicht funktioniert.
Was in der einen Sprache mit 10 Buchstaben darstellbar ist kann in der anderen Sprache ein ganzer Satz sein.

Im Deutschen hast Du z. B. zusammengesetzte Hauptwörter die es im Spanischen nicht gibt was in dem Fall zu wesentlich längeren Texten führt aber
andersherum sind im Spanischen die Personen in das Verb "kodiert" so das aus dem langen deutschen "ich weis es nicht" einfach "No sé" wird.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Standardfont identifizieren

Beitrag von RSBasic »

Du benutzt doch bestimmt eine spanische Windows- oder Linux-Version oder?
Da ist es doch auch nicht problematisch mit den Größen oder?
Du hast zwar recht, dass manche Wörter in anderen Sprachen länger oder kürzer sind, aber meinst du wirklich, dass der Unterschied so groß ist, dass +/-50px-Puffer nicht ausreicht?
Und falls du Bezeichnungen hast, die sehr lang sind, dann musst du versuchen, eine andere Bezeichnung zu nehmen, damit es nicht allzu lang ist.
Ansonsten musst du eine Automatisierungsfunktion schreiben, so dass die nachfolgenden Gadgets automatisch verschoben werden, wenn ein Text eines vorherigen Gadgets länger als die verfügbare Breite ist.
Du hast ja nun genug Beispielcodes. Versuch daraus was zu basteln. Du kannst z.B. die Breite des Textes ermitteln und das sollte auch richtig funktionieren, ansonsten hast du bei dir irgendwas falsches gemacht. Ansonsten hast du eigentlich alles, was du brauchst. Ansonsten frag nochmal nach.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten