Monospace Schrift

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6208
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Monospace Schrift

Beitrag von Mathias »

Kann ich Monospace bei einer Schrift erzwingen, zB. bei einem Label ?
Oder geht dies nicht mit allen Schriftarten ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Monospace Schrift

Beitrag von theo »

Mathias hat geschrieben:Kann ich Monospace bei einer Schrift erzwingen, zB. bei einem Label ?
Oder geht dies nicht mit allen Schriftarten ?


Gewisse Schriften sind Monospace.

Schau dir bei den Beispielprojekten Fontenumeration an.
Da kannst du die rausfiltern. mit Filter -> MONO_FONT -> Apply Filter

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Monospace Schrift

Beitrag von SoE »

?? Würde das etwas bringen?
Eine Schriftart, die nicht Monospaced ist und somit unterschiedlich breite Buchstaben hat, auf die gleichen Abstände zu setzen würde doch sehr unschön aussehen oder ??
Das homogene Schriftbild ist dann futsch... und das dürfte auch die Lesbarkeit deutlich beeinflussen...

Mathias
Beiträge: 6208
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Monospace Schrift

Beitrag von Mathias »

Ich habe einfach den Font "Ubuntu Mono" genommen.

Ich wollte nur eine leere Zeit-Anzeige machen: --:--:--, die gleich ausehen sollte wie 12:34:56.

Nur wird das Problem sein, unter Windows heissen die Schriften anders.

Kennt jemand eine Schrift, die es unter Windows und Linux gibt, ausser Courier ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Monospace Schrift

Beitrag von SoE »

Wozu? Lade doch die Schrift, die dir gefällt einfach OnCreate und nutze die Schrift dann solange dein Programm läuft. Dann ist immer sichergestellt, dass die Schrift auch vorhanden ist.
Wenn ich ein WindowsProgramm baue, dann mache ich das normalerweise so:

Code: Alles auswählen

 
AddFontResource(PChar(AppPath+'FONTS\GLOW.ttf'));
AddFontResource(PChar(AppPath+'FONTS\MAGMA.otf'));
PostMessage(Application.Handle, WM_FONTCHANGE, 0, 0);
 

Das kann man doch auch irgendwie für Linux so einbauen oder? Oder hat Lazarus dazu was an Bord was ich noch nicht kenne?
Als ich das letzte Mal 'ne Zeitanzeige brauchte hab' ich Monofonto genommen.

Edit: Hab' für Linux komischerweise noch nichts gefunden... brauche das in Zukunft eigentlich auch mal...
Die gleiche Schriftart würde dir aber wohl auch nicht weiterhelfen oder? Was wenn ein Nutzer die Schriftart umstellt... andere Schriftart, anderes Theme ...
Ansonsten einfach installieren und beim Beenden wieder deinstallieren... mal sehen wie das so geht...

Die Linux-Jungs bekommen ja leider die Win32API nicht richtig implementiert... so schwer kann das doch nicht sein... ;-) LOL

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: Monospace Schrift

Beitrag von wp_xyz »

"DejaVu Sans Mono" habe ich sowohl auf Windows als auch auf Linux. Bei einem ähnlichen Fall habe ich einfach ein paar Fonts abgefragt, ob sie im System vorhanden sind:

Code: Alles auswählen

  if Screen.Fonts.IndexOf('DejaVu Sans Mono') <> -1 then
    SynMailBody.Font.Name := 'DejaVu Sans Mono'
  else
  if Screen.Fonts.IndexOf('Courier New') <> -1 then
    SynMailBody.Font.Name := 'Courier New'
  else if Screen.Fonts.IndexOf('Courier 10 pitch') <> -1 then
    SynMailBody.Font.Name := 'Courier 10 pitch'

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Monospace Schrift

Beitrag von Marsmännchen »

Mathias hat geschrieben:...
Nur wird das Problem sein, unter Windows heissen die Schriften anders.

Kennt jemand eine Schrift, die es unter Windows und Linux gibt, ausser Courier ?


Seid mir nicht böse, wenn ich dummes Zeug rede, ich bin ja noch Anfänger. In HTML gibt es den Begriff der Fontfamily. In diesem Fall sucht sich das System so eine Art Mutterfont für die Schriftart raus, wenn es den explizit zuerst angegebenen Font nicht findet. Lazarus/FP hat nicht zufällig was Ähnliches?
Ich mag Pascal...

Mathias
Beiträge: 6208
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Monospace Schrift

Beitrag von Mathias »

Edit: Hab' für Linux komischerweise noch nichts gefunden... brauche das in Zukunft eigentlich auch mal...

Ich wollte etwas googlen, aber kann leider nichts finden.

Vielleicht kennt sonst jemand eine Platfomübergreifende Lösung ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Monospace Schrift

Beitrag von theo »

Mathias hat geschrieben:
Edit: Hab' für Linux komischerweise noch nichts gefunden... brauche das in Zukunft eigentlich auch mal...

Ich wollte etwas googlen, aber kann leider nichts finden.

Vielleicht kennt sonst jemand eine Platfomübergreifende Lösung ?


Es gibt afaik nur Courier (New), welche überall vorhanden ist.

Mathias
Beiträge: 6208
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Monospace Schrift

Beitrag von Mathias »

Code: Alles auswählen

AddFontResource(PChar(AppPath+'FONTS\GLOW.ttf'));
AddFontResource(PChar(AppPath+'FONTS\MAGMA.otf'));
PostMessage(Application.Handle, WM_FONTCHANGE, 0, 0);


Ich habe dies gemeint, ob es dafür etwas Plattformübergreifendes gibt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Monospace Schrift

Beitrag von theo »

Kannst du mal erklären, was du erreichen willst und warum?
Vielleicht gibt es ja andere, einfachere Wege.

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Monospace Schrift

Beitrag von SoE »

Ich hab' hier was gefunden...
Leider hab' ich im Moment kein funktionierendes LinuxSystem um das mal zu testen:
The answer depends on the workflow to distribute and run your program. If it's a software package which is installed by a system administrator, then a font should be placed into a system font directory (usually, a directory under /usr/share/fonts/, e.g. /usr/share/fonts/ttf/) when the package is being installed. If the program is being installed by an unprivileged user, then the font file should go into $HOME/.fonts/ directory.

If the font is installed system-wide then it [automagically] appears in the system (a typical Linux distribution already has appropriate hooks in the package management subsystem to rebuild font caches). If the font is installed "manually" (e.g. a user simply copies a file into her $HOME/.fonts/) then invocation of fc-cache --force may be required.

A more detailed explanation: fonts in a modern Linux installation are managed by a subsystem called fontconfig. This subsystem has system-wide configuration (by default residing in /etc/fonts/fonts.conf and /etc/fonts/conf.d/) and per-user configuration (various locations are checked). Fontconfig maintains the cache of all fonts registered in the system. When one wishes to register another font, he or she puts the font file into one of the directories known to fontconfig and initiates a rebuild of the cache w/ fc-cache utility. If the font is installed system-wide, then the packaging system typically has appropriate hooks which call fc-cache automatically when a file being created or deleted in a "well-known font directory".


Na ja, vielleicht funktioniert das ja ...
Für alle die so etwas unter Windows brauchen: Es gibt auch noch AddFontResourceEX, damit kann nur das aufrufende Programm die Schriften auflisten und nutzen...

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Monospace Schrift

Beitrag von SoE »

Das Thema kam gerade an anderer Stelle wieder auf und ich dachte ich häng' das hier mal dran... als kleinen Nachtrag:

Fonts kopieren nach (/usr/local/share/) und Cache aktualisieren
===============================================
sudo cp -rf fonts /usr/local/share/
sudo fc-cache -fv

Oder ohne Root-Rechte ($HOME/.fonts/)
==============================
cp -rf fonts $HOME/.fonts
fc-cache -fv

..ungetestet...
Natürlich sollte man bei Programmende oder Programmabbruch die Fonts wieder löschen... oder man prüft erst ob entsprechende Fonts schon an Bord sind...

Wie ist das eigentlich unter OpenBSD ??

Antworten