Autor Beitrag
UweK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Mi 14.12.22 15:33 
Hallo,

Ich stelle in einem TLabel den Zeichensatz
ausblenden Delphi-Quelltext
1:
MeinLabel.Font.Name:= 'Symbol';					

ein, um griechische Buchstaben anzuzeigen. Das funktioniert auf meinem PC. Dann wird
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19288
Erhaltene Danke: 1743

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 14.12.22 16: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...
ausblenden Delphi-Quelltext
1:
MeinLabel.Caption := 'Δ oder klein δ, Θ oder θ oder klein ϑ';					

Für diesen Beitrag haben gedankt: UweK
UweK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Do 15.12.22 12: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19288
Erhaltene Danke: 1743

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 15.12.22 13: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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8541
Erhaltene Danke: 475

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 16.12.22 21: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.

_________________
We are, we were and will not be.