![]() |
AW: Name von Unicode-Zeichen
Zitat:
Delphi-Quellcode:
function TfrmMain.GetCharExists(const Chr: Char): Boolean;
var Buf: Word; begin Result:= FALSE; if GetGlyphIndices(tvChars.Canvas.Handle, PChar(Chr), 1, @Buf, GGI_MARK_NONEXISTING_GLYPHS) <> GDI_ERROR then begin Result:= (Buf <> $FFFF); end; end; |
AW: Name von Unicode-Zeichen
Mal schnell was rauskopiert. Funktioniert mit japanischen Text und Tahoma vs. Arial Unicode MS.
Delphi-Quellcode:
Edit: War noch von D2005.
var pwOutGlyphs: PWord;
i, cwstr: Integer; wstr: String; erg: Cardinal; begin wstr:=Edit1.Text; cwstr:=Length(wstr); if wstr='' then exit; GetMem(pwOutGlyphs, cwstr*2); ZeroMemory(pwOutGlyphs, cwstr*2); erg:=GetGlyphIndices(Canvas.Handle, @wstr[1], cwstr, pwOutGlyphs, GGI_MARK_NONEXISTING_GLYPHS); if erg=GDI_ERROR then RaiseLastOSError; ExtTextOut(Canvas.Handle, 10, 6, ETO_GLYPH_INDEX, Nil, PChar(pwOutGlyphs), cwstr, Nil); Memo1.Clear; for i:=0 to cwstr-1 do Memo1.Lines.Add(IntToHex(PWordArray(pwOutGlyphs)[i], 4)); end; |
AW: Name von Unicode-Zeichen
Zitat:
Delphi-Quellcode:
Und dann noch die fehlende #0-Terminierung
PChar(@Chr)
// bzw. @Chr Und C=1 ? Was ist, wenn pgi größer sein muß? |
AW: Name von Unicode-Zeichen
Ähm, OK.
Dann halt noch die Uniscribe-Version. Der Rest stimmt überein.
Delphi-Quellcode:
var sc: TScriptCache;
hr: HRESULT; sc:=Nil; hr:=ScriptGetCMap(Canvas.Handle, @sc, @wstr[1], cwstr, SGCM_RTL, pwOutGlyphs); if (hr<>S_OK) and (hr<>S_FALSE) then RaiseLastOSError; ScriptFreeCache(@sc); |
AW: Name von Unicode-Zeichen
Du kannst dich auch mal mit DirectWrite beschäftigen!
Da steckt sehr viel drin, was du sicherlich gebrauchen kannst. Bspw. hat das IDWriteFont Interface eine HasCharacter-Methode. Daneben gibt es noch eine Vielzahl weiterer Sachen, die sicherlich weiterhelfen: ![]()
Delphi-Quellcode:
unit Unit1;
interface uses Winapi.Windows, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Direct2D, Winapi.D2D1; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private function GetCharExists(const Chr: Char): Boolean; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Caption := GetCharExists('†').ToString(TUseBoolStrs.True); end; function TForm1.GetCharExists(const Chr: Char): Boolean; var hr: HRESULT; FontHandle: HFont; LogFont: TLogFont; GdiInterop: IDWriteGdiInterop; WriteFont: IDWriteFont; CharacterExists: BOOL; begin Result := False; hr := DWriteFactory.GetGdiInterop(GdiInterop); if SUCCEEDED(hr) and Assigned(GdiInterop) then begin FontHandle := Self.Font.Handle; if GetObject(FontHandle, SizeOf(LogFont), @LogFont) <> 0 then begin hr := GdiInterop.CreateFontFromLOGFONT(LogFont, WriteFont); if SUCCEEDED(hr) and Assigned(WriteFont) then begin hr := WriteFont.HasCharacter(Ord(Chr), CharacterExists); Result := SUCCEEDED(hr) and CharacterExists; end; end; end; end; end. |
AW: Name von Unicode-Zeichen
Vielleicht als Einstieg, wenn man von der alten GDI/WinApi-Welt kommt:
![]() |
AW: Name von Unicode-Zeichen
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei der ganzen Experimentiererei ist quasi nebenbei noch etwas Nützliches entstanden: Eine Art Zeichentabelle wie die von Windows, nur ein bisschen komfortabler, nicht so klein und fuddelig.
|
AW: Name von Unicode-Zeichen
Mir fehlen da ein paar Komponenten, aber ist der Font Fallback Absicht? Die angezeigten Glyphen sind nicht unbedingt in den Schriftarten enthalten.
|
AW: Name von Unicode-Zeichen
Zitat:
Nebenbei zeigt sich, dass manche VCL-Komponenten bis heute Probleme mit Unicode haben. So funktioniert z.B. die Selektion von bestimmten Unicode-Zeichen in TLabeledEdit nicht. Die Anwendung ist eigentlich nur als Testanwendung entstanden. Die Quellen sind ja dabei, Vorschläge gerne willkommen. |
AW: Name von Unicode-Zeichen
Zitat:
Und ein echtes Add on, einen Font (temporär) laden? (die notwendigen Sourcen kann ich Dir heraus suchen) Muß ich noch erwähnen, daß mir Dein Programm gefällt? Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz