Einzelnen Beitrag anzeigen

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