Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unicode Zeichen 1/3 als ein Zeichen darstellen (https://www.delphipraxis.net/159523-unicode-zeichen-1-3-als-ein-zeichen-darstellen.html)

itblumi 31. Mär 2011 17:43

Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Hallo,

hat jemand eine Idee wie man 1/3 als ein Zeichen darstellen kann?
Ich habe schon vieles versucht, aber ohne Erfolg.
Z.B.:
Delphi-Quellcode:
Edit1.Text := chr($2153);

/// <summary>
///   U+2153   &#8531;   e2 85 93   VULGAR FRACTION ONE THIRD
/// </summary>
VULGAR_FRACTION_ONE_THIRD: Cardinal = $e28593;

Edit1.Text := AnsiChar(VULGAR_FRACTION_ONE_THIRD);
Alles hat nicht funktioniert und mir wurde nur ein viereck angezeigt.

Zu allem Trotz :evil: kann man 1/8 darstellen ob wohl man das viel seltener braucht.
Delphi-Quellcode:
Edit1.Text := chr($215b);
Hat jemand eine Idee von euch?

Assarbad 31. Mär 2011 18:01

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Delphi-Quellcode:
AnsiChar(VULGAR_FRACTION_ONE_THIRD);
dürfte Teil des Problems sein. Schon ohne den Typecast probiert?

Nebenbei: Welche Delphiversion?

himitsu 31. Mär 2011 18:39

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
AnsiChar ginge eh nicht, da es nur bis $ff Platz hat. :zwinker:
und auch $e28593 geht überhaupt nicht, da WideChar ebenso nur nur bis $ffff reicht.

Bei soeinem großen Wert kannst du es nur mit Surrogate-Pairs versuchen und dann benötigst du auch noch einen Font, welcher dieses Zeichen enthält (wenn überhaupt, bieten die meisten Fonst nur Zeichen bis unter $ffff.

Ich bin mir aber sicher, daß es ein Zeichen, wie 1/3 schon in diesesm unteren Bereich gibt.

Oder du nimmst einen Mathe-Font, welcher diese Zeichen direkt im Bereich $20 bis $ff anbietet, wie es z.B. auch bei Marlett und Co. der Fall ist.

Also
Delphi-Quellcode:
chr($2153);
wäre schon richtig gewesen (bei Delphi ab Version 2009.
Bis Delphi 2007 müßte man mit speziellen Unicode-Controls nachrüsten (elPack oder TNTUnicodeControls)

Und wie kommst du eigentlich von $2153 auf $e28593 :?:

Assarbad 31. Mär 2011 18:49

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Zitat:

Zitat von himitsu (Beitrag 1092277)
Und wie kommst du eigentlich von $2153 auf $e28593 :?:

Siehe hier:
Code:
/// U+2153   &#8531;  e2 85 93   VULGAR FRACTION ONE THIRD
... e2 85 93 :roll:

itblumi 31. Mär 2011 19:44

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Ich benutze Delphi2010 also eigentlich sollte es ja UTF8 beherschen.
Aber die Wirklichkeit sieht anders aus.

Ich habe zu erst auf eine UTF-8 Codepage geschaut um mir die richtigen Symbole dafür zu suchen.
hier mein Link:
http://www.utf8-chartable.de/unicode....pl?start=8528

Da stehen die Hexadezimal Werte für die entsprechenden Symbole.
Übrigens ein Type Cast mit AnsiChar funktioniert, aber wahrscheinlich nur in den unteren Bereichen einer Codepage.

Delphi-Quellcode:
/// <summary>
///   U+00BC   ¼   c2 bc   VULGAR FRACTION ONE QUARTER = 1/4
/// </summary>
VULGAR_FRACTION_ONE_QUARTER: Cardinal = $c2bc;

Edit1.Text := AnsiChar(VULGAR_FRACTION_ONE_QUARTER);
Könntest du mir vllt ein Beispiel für eine Surrogate Berechnung geben?

itblumi 31. Mär 2011 19:48

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Wenn ich ein Math Font nehmen würde, dann müsste ich diese Schriftart doch auf jedem Rechner wo mein Programm laufen soll installieren oder?
Und bei vielen PC's wäre das ein zu hoher Konfigurationsaufwand.

himitsu 31. Mär 2011 21:01

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
aso, das war UTF-8

Wenn schon UTF-8, dann muß dieses in einen UTF8String rein (dann kodiert es Delphi automatisch nach Unicode, welches dein Edit haben möchte)
oder decodierst es manuell via UTF8Decode
(in beiden Fällen ist ein Zweierpaar jeweils ein Zeichen/AnsiChar/Byte, also Unicode #$2153 oder #8531 = UTF-8 #$e2#$85#$93)

oder du läßt es gleich Unicode.

Zitat:

Wenn ich ein Math Font nehmen würde, dann müsste ich diese Schriftart doch auf jedem Rechner wo mein Programm laufen soll installieren oder?
Jupp, wobei es auch die Möglichkeit gibt, eine Schriftart dynamisch (nur) im eigenem Programm zu laden. (dann könnte sie im Verzeichnis deines Programmes liegen oder sogar als Resource integriert)

Assarbad 31. Mär 2011 21:04

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Bitte lies doch erstmal unsere Antworten. Himitsu hat sich sogar noch mehr Mühe gegeben als ich mit seiner Antwort und alles relevant steht schon drin. Insbesondere:

Delphi-Quellcode:
chr($2153);
Zitat:

Zitat von itblumi (Beitrag 1092294)
Ich benutze Delphi2010 also eigentlich sollte es ja UTF8 beherschen.
Aber die Wirklichkeit sieht anders aus.

Delphi 2010 soll erstmal vor allem Unicode verstehen. Die Strings sind intern allerdings meines Wissens nach UTF-16 (bzw. UCS-2 auf Windows 2000, NT4). Was du also mit UTF-8 willst und wieso du deine Literale aufdröselst als ob sie UTF-8 wären, obwohl du ja ein WideChar benutzen könntest, ist mir schleierhaft.

Zitat:

Zitat von itblumi (Beitrag 1092294)
Übrigens ein Type Cast mit AnsiChar funktioniert, aber wahrscheinlich nur in den unteren Bereichen einer Codepage.

Nein, der Typecast ist Unsinn, weil ein AnsiChar nur 8 Bits hat und du 16 Bits (WideChar) brauchst. Siehe Himitsus erste Antwort.

Zitat:

Zitat von itblumi (Beitrag 1092294)
Könntest du mir vllt ein Beispiel für eine Surrogate Berechnung geben?

Warum kannst du nicht WideChar benutzen?

@Himitsu: er hat nen Literal den er in einem String (sprich: WideString) verarbeiten will. Wo ist da etwas von UTF-8 zu sehen? Ich seh jedenfalls nix dergleichen.

Bernhard Geyer 31. Mär 2011 21:35

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Zitat:

Zitat von itblumi (Beitrag 1092294)
Ich benutze Delphi2010 also eigentlich sollte es ja UTF8 beherschen.
Aber die Wirklichkeit sieht anders aus.

In wirklichkeit kann Delphi schon seit D3 Unicode - halt nicht in allen Bereichen. Und Delphi verwendet wie Java und .NET für die interne "native" Repräsentation eines Unicodestrings/zeichens UTF-16. UTF8 wird als natives Format bei Freepascal/Lazarus verwendet UTF8.

Für Delphi/.NET ist es sinnvoll UTF16 zu verwenden da die ganze Win32-API seit "gedenken" (müsste W2k sein) UTF16 verwendet. Davor wurde "nur" UCS-2 verwendet.

Wenn deine IDE/Quellcodedateien richtig einstellt sind brauchst du nix machen (Sollte ab D2009 funktionieren):
Delphi-Quellcode:
VULGAR_FRACTION_ONE_QUARTER: Cardinal = $c2bc;
Edit1.Text := VULGAR_FRACTION_ONE_QUARTER;
Du wirst als "altpropertie" noch Teilweise Codpage/Charset find (im Font-Object). Dies solltest du niemals mehr verwenden/umstellen wenn du eine neue IDE-Version hast.

itblumi 31. Mär 2011 21:53

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen
 
Ich habe übrigens jede Konvertierung genutzt WideChar, WideString, AnsiChar, AnsiString, UnicodeString, UTF8To.., alles hat nix geholfen. Bitte probiert es doch selbst, wenn ihr mir nicht glaubt.
Bedenkt aber dabei das ich stets zum ausprobieren ein TEdit genutzt habe. Vllt. liegt es auch an dieser Komponente, ich weis es nicht.

Was mir aber eher wahrscheinlich ist, dass Delphi die genannten Surrogates doch nicht ganz darstellen kann oder es damit eventuelle Probleme gibt. So stellt es sich mir dar.


Was meinst du damit das ich andere Fonts benutzen solle, welche sind denn UTF-8 und welche nicht?
Ich habe bis jetzt nichts gefunden das Delphi nur einige Fonts in UTF-8 unterstützt.
Bitte gib mir ein Beispiel für unterstützte Fonts oder Links damit ich es nach lesen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.
Seite 1 von 2  1 2      

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