Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Symbol aus "Symbol.ttf" in anderer Schriftart finden (https://www.delphipraxis.net/96365-symbol-aus-symbol-ttf-anderer-schriftart-finden.html)

xaromz 23. Jul 2007 09:55


Symbol aus "Symbol.ttf" in anderer Schriftart find
 
Hallo,

bei meinen Versuchen, meinen RTF-Parser zu verbessern, ist mir eine lästige Eigenart von Word untergekommen:
Es ist wohl möglich, ein Symbol (z. B. Delta), welches in der Schriftart Symbol definiert ist (Zeichen #68, also eigentlich "D"), so in den Text einzubetten, dass Word behauptet, dieses Zeichen käme eigentlich aus der Schriftart Arial. Arial hat nun aber selbst ein Zeichen Delta (Unicode-Zeichen #916).
Gibt es eine Möglichkeit, vom Zeichen #68 in Symbol zum Zeichen #916 in Arial zu gelangen?

Gruß
xaromz

FAlter 23. Jul 2007 10:18

Re: Symbol aus "Symbol.ttf" in anderer Schriftart
 
Hi,

Kleiner Test...

Delphi-Quellcode:
var
  S: WideString;
  I: Integer;
begin
  SetLength(S, 25);
  for I := 1 to 25 do
    S[I] := WideChar(I - 1 + Ord('A') + 916 - 68);

  MessageBoxW(Handle, PWideChar(S), nil, MB_OK);
end;
Ohne das +916-68 würde es ABCDEFGHIJKLMNOPQRSTUVWXY werden, und so erhältst du das griechische Alphabet - es ist genau 916-68=848 Zeichen weiter im Unicode-Alphabet.

Leider funktioniert

Delphi-Quellcode:
inc(MyWideChar, 848);
nur von A bis E, dann weicht die Symbol-Reihenfolge leider ab von der richtigen Reihenfolge des griech. Alphabets - es war eben nur für mathematische Formeln gedacht.

Ich würde dir eine Ersetzungstabelle empfehlen, z. B. eine Array-Konstante.

Warum wird vor dem Sigma nur ein Rechteck angezeigt? Gibt es so einen griech. Buchstaben? Kenn ich nicht.

Mfg
FAlter

xaromz 23. Jul 2007 10:24

Re: Symbol aus "Symbol.ttf" in anderer Schriftart
 
Hallo,

wie ich einem Zeichen den Wert 916-68 hinzufüge ist mir schon klar. Ich möchte aber eher etwas in der Art:
Ein Zeichen aus Symbol repräsentiert ein Delta. Welche Nummer in der Schriftart Arial repräsentiert das Delta?

Gruß
xaromz

FAlter 23. Jul 2007 10:34

Re: Symbol aus "Symbol.ttf" in anderer Schriftart
 
Hi,

ich bin mir nicht ganz sicher, ob du den kompletten Text gelesen hast. Daher zitier ich mich mal selbst.

Zitat:

Zitat von FAlter
Ich würde dir eine Ersetzungstabelle empfehlen, z. B. eine Array-Konstante.

Damit meine ich sowas in der Art:

Delphi-Quellcode:
const
  Ersetz: array['A'..'Z'] of WideChar =
    (#916, #917, #918, #919, #920, ..., #921);
Da die Zeichen der Symbol-Schriftart leider nicht in der Reihenfolge des griechischen Alphabets sind.

Das davor war nur mein Weg der Ideenfindung ;)

Mfg
FAlter

xaromz 23. Jul 2007 11:08

Re: Symbol aus "Symbol.ttf" in anderer Schriftart
 
Hallo,

ich vermute, Du hast mich nicht verstanden. Das Delta war nur ein Beispiel. Ich möchte wissen, welche Nummer ein (beliebiges) Zeichen aus der einen Schriftart in der anderen hat. Da ich vorher weder weiß, welche zwei Schriftarten das sind, noch, welches Zeichen ich benötige, kommt eine einfache Tabelle nicht in Frage.

Gruß
xaromz

FAlter 23. Jul 2007 11:52

Re: Symbol aus "Symbol.ttf" in anderer Schriftart
 
Hi,

Die Unicode-Schriftarten sind alle gleich - was in Arial ein delta ist, ist es auch in Courier New und Verdana und so weiter. Mit einer Ersetzungstabelle könntest du das also von Symbol in alle anderen Schriftarten lösen (sofern diese das griech. Alphabet beinhalten).

Nur die Symbol tanzt eben aus der Reihe. Sie ist nicht einmal eine ISO-8859-7-Schriftart mit dem griechischen Alphabet, sondern eben tatsächlich für Symbolzwecke in Formeln o. ä. Vermutlich wirst du also nur die Umwandlung von Symbol benötigen.

Ansonsten glaube ich nicht, dass es eine bessere Möglichkeit gibt, da nirgends gespeichert wird, dass C in der Symbol eigentlich ein Gamma ist. Die Schriftart beinhaltet ja lediglich das zugeordnete Symbol, genaugenommen ist es immer noch ein C, nur siehst du ein Gamma, da eine andere Grafik dem C zugeordnet ist.

Du könntest natürlich statt einer Konstante auch eine Variable nehmen und z. B. mehrere Ersetzungstabellen in Datei(en) abspeichern, falls du wirklich neben der Symbol noch andere Schriften unterstützen willst, die Zeichen anders als normal interpretieren. Und meinetwegen lass dieses Array von #0 bis #255 gehen oder gar von #0 bis #65535, wenn du es so brauchst.

Für andere Lösungen kann ich dir momentan nicht helfen, da fehlen mir die Ideen.

Mfg
FAlter

xaromz 23. Jul 2007 12:24

Re: Symbol aus "Symbol.ttf" in anderer Schriftart
 
Hallo,

eine Ersetzungstabelle kommt wie gesagt nicht in Frage (es geht eben nicht nur um "Symbol"). Aber genauso wie Du vermute ich auch, dass es keinen anderen Weg gibt. Ich habe jetzt notgedrungen das Verhalten von Word nachgebaut (sozusagen eine "Schattenschrift" eingebaut). Funktioniert auch soweit.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz