Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zeichensatz in der EXE mitnehmen


UweK - Mi 14.12.22 16:33
Titel: Zeichensatz in der EXE mitnehmen
Hallo,

Ich stelle in einem TLabel den Zeichensatz

Delphi-Quelltext
1:
MeinLabel.Font.Name:= 'Symbol';                    

ein, um griechische Buchstaben anzuzeigen. Das funktioniert auf meinem PC. Dann wird

Delphi-Quelltext
1:
MeinLabel.Caption:= 'DQ';                    

wie gewünscht als "Delta Theta" angezeigt. Auf einem anderen PC sehe ich aber nur das nackte "DQ" wie eingegeben. Ich vermute, dass dieser PC nicht den gewünschten Zeichensatz hat. Gibt es vielleicht irgendwo ein Schalterchen, mit dem ich den Compiler dazu überreden kann, den ganzen Zeichensatz 'Symbol' (oder auch nur die daraus verwendeten Zeichen) mit in die EXE einzubetten?

Vielen Dank für Tipps, Gruß Uwe

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


jaenicke - Mi 14.12.22 17:28

Du kannst eine Schriftart als Ressource in die Exe mit einlinken und dann die Schriftart mit AddFontMemResourceEx laden.

Die Schriftart "Symbol" sollte allerdings immer vorhanden sein und du hättest auch gar nicht das Recht diese weiterzugeben. Da müsstest du wohl eher auf dem PC mal schauen, was da los ist und ob die Schriftart bei dem Label wirklich gesetzt wird. Falls die Datei der Schriftart vorhanden ist, könntest du diese vermutlich auch zur Laufzeit direkt aus dem Systemordner laden.

//edit:
Ach ja, wenn es nur um griechische Buchstaben geht, ist diese Schriftart ohnehin der falsche Weg. Dann setze diese auch direkt...

Delphi-Quelltext
1:
MeinLabel.Caption := 'Δ oder klein δ, Θ oder θ oder klein ϑ';                    


UweK - Do 15.12.22 13:39

Ja natürlich. Auf die Idee, einfach die betreffenden Zeichen im Standard-Zeichensatz (in diesem Falle Arial) über die Zeichentabelle direkt mit einzufügen, bin ich gar nicht gekommen. Das löst mein Problem schon.

Trotzdem habe ich mir mal die Beschreibung zu AddFontMemResourceEx angesehen. Verstehe ich das richtig, dass in diesem Falle meine EXE den zusätzlichen Zeichensatz lediglich mitführen würde, aber ihn dann auf dem anderen PC erst installieren müsste, um ihn überhaupt benutzen zu können? Da müsste die EXE dann wohl auch mit ausreichenden Rechten auf dem anderen PC ausgeführt werden?


jaenicke - Do 15.12.22 14:26

Ich sehe nicht, wo du das aus der Beschreibung herausliest. Da steht ja, dass die so geladene Schriftart nur dem eigenen Prozess zur Verfügung steht. Das sollte weder erweiterte Rechte erfordern noch andere Prozesse betreffen.

Du kannst die Zeichen auch schlicht im Internet suchen und z.B. aus Wikipedia herauskopieren. Das geht meistens schneller als mit der Zeichentabelle, wenn man nicht weiß, wonach genau man suchen muss.


Gausi - Fr 16.12.22 22:37

Griechische Buchstaben per Font-Wechsel war früher mal eine gängige Methode. Seitdem die VCL auch direkt Unicode unterstützt, ist das aber nicht mehr notwendig, und auch nicht mehr sinnvoll.

Ich hab neulich erst einige Überbleibsel von Prä-Delphi-2009-Code in einer Software entfernt. Da wurden auch in einer eigenen Label-Komponente gemischt lateinische (also a..z) und griechische Zeichen benötigt. Das lief dann über Platzhalter wie "<theta>" und "<epsilon>", was in der Paint-Methode geparsed wurde, und stückchenweise auf dem Canvas mit der normalen Font und "Symbol" gezeichnet wurde. Die Platzhalter sind seit gut 10 Jahren weg, aber die Paint-Methode hat immer noch danach gesucht. Kann man machen, macht den Code aber nicht grade übersichtlicher oder kürzer. :lupe:

Also: Nutze die Möglichkeit, die Zeichen direkt darzustellen. Das Rumgehampel mit verschiedenen Schriftarten (oder gar Zeichensätzen) führt nur zu Stress und Fehlern. Wenn du die Zeichen immer wieder mal beim programmieren brauchst, und nicht immer mit Copy&Paste für einzelne Zeichen arbeiten willst, dann definiere dir das einmal als Konstanten im Code und nutze die dann.