AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Unicode-Beschreibung eines Zeichen auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode-Beschreibung eines Zeichen auslesen

Ein Thema von stz · begonnen am 29. Jul 2006 · letzter Beitrag vom 29. Jul 2006
Antwort Antwort
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#1

Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 16:39
Moin Moin,
es gibt ja zu jedem Unicode Zeichen auch eine Beschreibung, z.B.:
Zitat von Unicode:
ä ($00E4) Kleiner lateinischer Buchstabe A mit Diärese
Windows scheint diese auch zu kennen, da die Zeichentabelle diese Beschreibung in der StatusBar anzeigen kann.

Wie komm ich nun an dieses Beschreibung heran? Gibt es dafür etwas in der API?

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 17:10
1. Der dokumentiert Weg:

lege dir selbst eine Liste an und benutze z.B. das hier als Vorlage.

2. Der undokumentierte Weg:

das Programm charmap.exe benutzt getuname.dll (zumindest unter XP), die Funktion lässt sich so unter Delphi nutzen:

Delphi-Quellcode:
function GetUName(cCodwW: WideChar; pBufferW: PWideChar): integer;
  stdcall; external 'getuname.dll';

function GetUnicodeName(code: WideChar): WideString;
begin
  SetLength(Result, 256);
  SetLength(Result, GetUName(code, @Result[1]));
end;
(vorsicht: ungetestet)
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 17:28
Hi,
wie so oft ist der undokumentierte Weg doch der einfachere (und auf deutsch hab ichs dann auch noch). Allerdings habe ich nicht so ganz verstanden, wie du WideString und PWideChar vermischt. (Der Compiler hats glaub ich auch nicht verstanden, jedenfalls hat er nur die ersten 5 Buchstaben der Beschreibung geliefert), aber so gehts:
Delphi-Quellcode:
function GetUnicodeName(code: WideChar): String;
var
  buffer: PWideChar;
begin
  GetMem(buffer, 255);
  GetUName(code, buffer);
  Result := buffer;
  FreeMem(buffer, sizeof(buffer^));
end;
meinen herzlichen Dank für
Zitat von Flocke:
Delphi-Quellcode:
function GetUName(cCodwW: WideChar; pBufferW: PWideChar): integer;
  stdcall; external 'getuname.dll';


Gruß
Malte

PS: Hat bei mir auch unter W2k SP4 funktioniert.
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 17:37
Zitat von stz:
Allerdings habe ich nicht so ganz verstanden, wie du WideString und PWideChar vermischt. (Der Compiler hats glaub ich auch nicht verstanden, jedenfalls hat er nur die ersten 5 Buchstaben der Beschreibung geliefert), ...
Also ich gerade extra nochmal einfach den Code von oben kopiert, in Delphi eingefügt, ausprobiert und es funktioniert. Die Funktion "GetUName" liefert das Ergebnis von LoadStringW zurück (die Anzahl der WideChars im Ergebnis), darum sollte das SetLength eigentlich funktionieren.

Wenn du deinen Code beibehalten möchtest, dann mache aber aus der 255 eine 512 (oder 256 * SizeOf(WideChar)).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 18:03
Zitat von Flocke:
Also ich gerade extra nochmal einfach den Code von oben kopiert, in Delphi eingefügt, ausprobiert und es funktioniert. Die Funktion "GetUName" liefert das Ergebnis von LoadStringW zurück (die Anzahl der WideChars im Ergebnis), darum sollte das SetLength eigentlich funktionieren.
Ich fürchte unter W2k ist der Rückgabewert ein anderer. Ich bekomme als Eregbnis von GetUnicodeName('Ä') mit deiner Funktion nur "Große" und mit meiner "Großer lateinischer Buchstabe A mit Diärese".

Zitat von Flocke:
Wenn du deinen Code beibehalten möchtest, dann mache aber aus der 255 eine 512 (oder 256 * SizeOf(WideChar)).
Richtig, ist ja WideChar...
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 18:12
so, also jetzt nochmal richtig:
Delphi-Quellcode:
function GetUName(cCodwW: WideChar; pBufferW: PWideChar): integer;
  stdcall; external 'getuname.dll';

function GetUnicodeName(code: WideChar): String;
var
  buffer: PWideChar;
begin
  GetMem(buffer, 256 * SizeOf(WideChar));
  try
    GetUName(code, buffer);
    Result := buffer;
  finally
    FreeMem(buffer, sizeof(buffer^));
  end;
end;
Anbei ein Bild von der Anwendung (ist bzw. wird ein Teil von MEdit).

Gruß
Malte
Miniaturansicht angehängter Grafiken
zeichentabelle_241.png  
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 19:21
Zitat von stz:
so, also jetzt nochmal richtig:
Delphi-Quellcode:
function GetUName(cCodwW: WideChar; pBufferW: PWideChar): integer;
  stdcall; external 'getuname.dll';

function GetUnicodeName(code: WideChar): String;
var
  buffer: PWideChar;
begin
  GetMem(buffer, 256 * SizeOf(WideChar));
  try
    GetUName(code, buffer);
    Result := buffer;
  finally
    FreeMem(buffer, sizeof(buffer^));
  end;
end;
Anbei ein Bild von der Anwendung (ist bzw. wird ein Teil von MEdit).

Gruß
Malte
Nicht ganz ...
Zitat von Borland-Hilfe:
...
Der optionale Parameter Size enthält die Größe der freizugebenden dynamischen Variable (in Byte). Wenn er angegeben wird, muss er der Byte-Anzahl bei der Zuweisung mit GetMem entsprechen.
Lass den zweiten Parameter bei FreeMem einfach weg. Da wir nicht wissen, ob und wie wir den Rückgabewert von GetUName auswerten können, sollten man den Puffer vielleicht auch initialisieren.

Mein Vorschlag:
Delphi-Quellcode:
function GetUName(cCodwW: WideChar; pBufferW: PWideChar): integer;
  stdcall; external 'getuname.dll';

function GetUnicodeName(code: WideChar): string;
var
  Buffer: PWideChar;
begin
  GetMem(Buffer, 256 * SizeOf(WideChar));
  try
    Buffer^ := #0;
    GetUName(code, Buffer);
    Result := Buffer;
  finally
    FreeMem(Buffer);
  end;
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Unicode-Beschreibung eines Zeichen auslesen

  Alt 29. Jul 2006, 21:46
Zitat von Flocke:
Mein Vorschlag
angenommen

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:23 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