AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Name von Unicode-Zeichen

Ein Thema von Codehunter · begonnen am 27. Jun 2017 · letzter Beitrag vom 3. Jul 2017
Antwort Antwort
Seite 3 von 3     123   
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Name von Unicode-Zeichen

  Alt 1. Jul 2017, 10:36
An den Spaß kann ich mich noch gut erinnern. Habe mich dann sogar bei Microsoft's Typography registriert um die Infos und Tools zu benutzen (Registrierung ist heute wohl nicht mehr nötig). Richtig erschreckend wie viele Fehler in den ganz normalen Schriftarten stecken.

Bei GetGlyphIndices zeigt ein Index von $FFFF an, dass die Glyphe nicht enthalten ist (bei ScriptGetCMap ist es selbstverständlich die 0). Dann braucht man noch die jeweilige default Glyphe.

Letztlich habe ich dann die ganz harte Methode benutzt, das direkte Auslesen der CMAP-Tabellen. Für cmap4 wäre das ein Beispiel.

Und ich erwähne noch einmal: http://www.babelstone.co.uk/Software/BabelMap.html
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Name von Unicode-Zeichen

  Alt 3. Jul 2017, 10:32
Da ich leider nicht im Besitz der Komponenten bin (TB2..., SpTBX...), kann ich dein Programm nicht kompilieren.
Zwei Sachen fallen mir jedoch beim durchschauen auf:

Es ist etwas suboptimal, bei jedem Aufruf von GetCharName die DLL getuname.dll zu laden und entzuladen.
Hier wäre es besser, einmal statisch die Funktion GetUName in Quelltext zu definieren und zu verwenden.

Du hast meine GetCharExists-Funktion im Prinzip einfach nur kopiert, ohne zu verstehen das dort passiert.
Mein Code diente zu Testzwecken und muss natürlich angepasst werden.
So wird nämlich hier immer die Schrift des Hauptformulars verwendet, ohne auf Änderungen in cbbFontListChange einzugehen.
Hier weist du ja explizit die Schrift von cbbFontList.SelectedFont den TreeView und dem Vorschaufenster zu.
Es wäre auch Ressourcen schonender, wenn du dir die Instanzen von IDWriteGdiInterop einmalig beim Programmstart holst und als Membervariable des Formulars führst.
Eine Neuerzeugung von IDWriteFont ist dann nur noch notwendig, wenn cbbFontListChange aufgerufen wird.

Somit würde sich die GetCharExists-Funktion verkürzen auf:

Delphi-Quellcode:
function TfrmMain.GetCharExists(const Chr: Char): Boolean;
var
  HR: HRESULT;
  CharacterExists: BOOL;
begin
  Result := btnShowAllChars.Checked;
  if Result then
    Exit;

  if Assigned(FWriteFont) then
  begin
    HR := FWriteFont.HasCharacter(Ord(Chr), CharacterExists);
    Result := SUCCEEDED(HR) and CharacterExists;
  end;
end;
Die einmalige Erzeugung von IDWriteGdiInterop und die Neuerzeugung von IDWriteFont beim Schriftartwechsel überlasse ich dir mal als Fingerübung.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 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