Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Türkische Zeichen (https://www.delphipraxis.net/142495-tuerkische-zeichen.html)

Bruzzler 29. Okt 2009 10:08


Türkische Zeichen
 
Hallo ich habe eine Frage, ist es mit Delphi 2007 möglich Türkische Zeichen darzustellen?

Die Türkischen Zeichen kommen wohl im ISO-8859-3 Charset vor.

Für Antworten wäre ich dankbar.

himitsu 29. Okt 2009 10:11

Re: Türkische Zeichen
 
Zitat:

Zitat von Bruzzler
Hallo ich habe eine Frage, ist es mit Delphi 2007 möglich Türkische Zeichen darzustellen?

sowas wurde hier vor Kurzem schonmal besprochen
z.B. zu finden über Hier im Forum suchenZeichen darstellen (es gibt ja nicht nur türkisch)

http://www.delphipraxis.net/internal...hen+darstellen
http://www.delphipraxis.net/internal...hlight=charset
usw.

Bruzzler 29. Okt 2009 10:26

Re: Türkische Zeichen
 
mh.....also in dem Thema ist aber leider nichts was mir hilft, da Delphi2007 ja nicht UNICODE fähig ist, kann ich schlecht mit UNICODE arbeiten. Ganz davon abgesehen geht es bei mir nicht um eine WEB Anwendung. Noch eine Anregung?
Die Suche habe ich schon bemüht......

himitsu 29. Okt 2009 10:35

Re: Türkische Zeichen
 
Unicode kann Delphi schon lange und die fehlenden unicodefähigen Komponenten kann man nachrüsten. :)


Aber wenn es nur um die HTML-Ausgabe geht und nicht um die GUI, dann könntest du entweder

WideCharToMultiByte nutzen und Unicodestrings (WideString) in ein passendes Format übersetzen
oder
du verwendest einfach UTF-8 (dafür hat Delphi einige einfache Funktionen direkt an Board)

oder
Man ignoriert einfach alles [cl](dafür darf es aber nirgendwo eine Brücker über Unicode geben, womöglich dann die Codierung zerstört wird)[/cl]
und sagt ganz einfach "so, dieser AnsiString ist jetzt ISO-8859-3" und fertig.
Dann nur nur noch als "ANSI" ausliefern, aber im Header sagen es wäre ISO-8859-3.
Hierfür muß man aber auch die ganzen Zeichen schon kodiert ablegen oder ebenfalls via WideCharToMultiByte in SingleByte (AnsiString) umwandeln.

Bruzzler 29. Okt 2009 10:36

Re: Türkische Zeichen
 
Naja nachrüsten, ist eben nicht so einfach und es geht nicht um eine WEB Anwendung......

mkinzler 29. Okt 2009 10:42

Re: Türkische Zeichen
 
Warum soll nachrüsten nicht moeglich sein? z.B. mit den TNTUnicode/Komponenten

himitsu 29. Okt 2009 10:48

Re: Türkische Zeichen
 
Ups, das nicht überlesen :oops:

Nachrüsten: TMS (hat TNT aufgekauf und ist nun kostenpflichtig, aber dafür aktueller) und die "alten" kostenlosen TNT-Unicode-Controls
Die TNTs sind einfach nur Unicode-Protierungen der delphieigenen VCL.

Also bis auf einige Typumstellungen und ein paar kleine Erweiterungen sind sie von Außen gesehn genauso aufgebaut wie die Originale.

Du bräuchtest diese also nur zu installieren und dann via Refactoring (per Hand) die Typen in deiner Anwendung ersetzen
aus TEdit wird TTntEdit usw. (brauch man einfach nur in der .PAS und .DFM ersetzen)
und danach hast du Unicode.

oder einfach nur so
http://www.delphipraxis.net/internal...&highlight=TNT

Bruzzler 29. Okt 2009 10:49

Re: Türkische Zeichen
 
Naja weil das Projekt schon eine beachtliche Größe hat und nicht einfach wild Komponenten reinwandern sollten. Da aber Türkisch nicht unbedingt UNICODE benötigt muss es doch auch irgendwie anders möglich sein.

himitsu 29. Okt 2009 10:54

Re: Türkische Zeichen
 
Zitat:

Zitat von Bruzzler
Naja weil das Projekt schon eine beachtliche Größe hat und nicht einfach wild Komponenten reinwandern sollten.

Außer gegen "kompatible" Komponenten auszutauschen und dafür zu sorgen, daß diese mit UnicodeStrings versorgt werden, ist da nicht viel zu ändern.
(im Notfall die AnsiString-Zuweisungen mit UTF8Decode/UTF8Encode versehen, wenn man die Anwendung nicht auf UnicodeStrings umwandeln kann)

Zitat:

Zitat von Bruzzler
Da aber Türkisch nicht unbedingt UNICODE benötigt muss es doch auch irgendwie anders möglich sein.

Wenn du einen passenden CharSet findest (siehe ersten verlinken Thread), dann kannst du es auch darüber versuchen.
Mußt diesen CharSet dann nur bei allen "nötigen" Komponenten setzen.

Wenn das Programm in einem tyrkischen Windows läuft, dann ist da der Standard-CharSet (DEFAULT_CHARSET) vermutlich schon auf türkisch und man muß nichts umstellen, sondern nutzt es einfach.

Bruzzler 29. Okt 2009 10:57

Re: Türkische Zeichen
 
Das mit UTF8ENcode funktioniert nicht, schon ausprobiert. Aber es muss doch auch ohne Fremdkomponenten gehen. Naja evtl. muss ich anders ansetzen.....

himitsu 29. Okt 2009 11:03

Re: Türkische Zeichen
 
Zitat:

Zitat von Bruzzler
Das mit UTF8ENcode funktioniert nicht, schon ausprobiert. Aber es muss doch auch ohne Fremdkomponenten gehen. Naja evtl. muss ich anders ansetzen.....

UTF8Encode bringt nur was, wenn die andere Seite auch das Unicode versteht, welches da rauskommt.
Und die VCL ist nunmal nur ANSI (bis D2007).

Der einzige Weg dort einen anderen "Zeichensatz" anzuzeigen, geht über .Font.CharSet
oder Man zeichent die Controls selber (OwnerDraw und Co.).
Dort kann man aus dem im AnsiString codierten Text, wie es beliebt, in Unicode umwandeln und dieses über unicodefähige DrawText-Funktionen selber ausgeben.

Oder man tauscht eben die Komponenten aus.

Tyrael Y. 29. Okt 2009 11:17

Re: Türkische Zeichen
 
Zitat:

Zitat von himitsu
Wenn du einen passenden CharSet findest (siehe ersten verlinken Thread), dann kannst du es auch darüber versuchen.

Delphi-Quellcode:
  myComponent.Font.CharSet := TURKISH_CHARSET;

himitsu 29. Okt 2009 11:39

Re: Türkische Zeichen
 
Zitat:

Zitat von Tyrael Y.
Delphi-Quellcode:
  myComponent.Font.CharSet := TURKISH_CHARSET;

OK, die Delphi 7 IDE kannte es noch nicht (könnte man sich aber selbstdefinieren)

Bernhard Geyer 29. Okt 2009 12:24

Re: Türkische Zeichen
 
Zitat:

Zitat von Bruzzler
Naja nachrüsten, ist eben nicht so einfach und es geht nicht um eine WEB Anwendung......

Also eine Anwendung im IIS? Oder nur eine Anwendung die Webseiten darstellen kann?

Zitat:

Zitat von Bruzzler
Das mit UTF8ENcode funktioniert nicht, schon ausprobiert.

UTF8Encode/Decode funktioniert schon seit D6. Was machst du genau?

Bruzzler 29. Okt 2009 12:53

Re: Türkische Zeichen
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von Bruzzler
Naja nachrüsten, ist eben nicht so einfach und es geht nicht um eine WEB Anwendung......

Also eine Anwendung im IIS? Oder nur eine Anwendung die Webseiten darstellen kann?

KEINE WEB ANWENDUNG!!!!!!

Zitat:

Zitat von Bruzzler
Das mit UTF8ENcode funktioniert nicht, schon ausprobiert.
Zitat:

Zitat von Bernhard Geyer
UTF8Encode/Decode funktioniert schon seit D6. Was machst du genau?


Ich habe mehrere Sachen getestet:

Delphi-Quellcode:
var
  temp: widestring;

begin

 temp := UTF8ENCODE('Türkische Zeichen');
 Label1.Caption := temp;
end
Delphi-Quellcode:
var
  temp: string;

begin

 temp := UTF8ENCODE('Türkische Zeichen');
 Label1.Caption := temp;
end
Delphi-Quellcode:
var
 temp: widestring;
 temp2: string;
begin

 temp := 'Türkische Zeichen';
 temp2 := UTF8ENCODE(temp);
 Label1.Caption := temp2;
end
Delphi-Quellcode:
begin
 Label1.Caption := UTF8ENCODE('Türkische Zeichen');
end
Kommt nur "Müll" raus.

Bernhard Geyer 29. Okt 2009 13:00

Re: Türkische Zeichen
 
Zitat:

Zitat von Bruzzler
KEINE WEB ANWENDUNG!!!!!!

Blöder Zeilenumbruch :wall:

Zitat:

Zitat von Bruzzler
temp := UTF8ENCODE('Türkische Zeichen');

Die Pas-Dateien werden alls Unicode/UTF8-Technisch gespeichert. Ich würde mal fast darauf tippen das u.U. hier schon der Compiler mist baut.
Was passiert hier:

Delphi-Quellcode:
var
temp: widestring;
temp2: string;
begin

temp := 'Türkische Zeichen';
temp2 := UTF8ENCODE(temp);
Label1.Caption := temp + ' -> ' + temp2;
Und welche Codepage hat dein Windows? Die Zuweisung String := WideString könnte eine zerstörende Codepagewandlung verursachen.

mkinzler 29. Okt 2009 13:00

Re: Türkische Zeichen
 
Ein normales Label kann auch keinen UTF8-(Unicode) anzeigen

Bruzzler 29. Okt 2009 13:09

Re: Türkische Zeichen
 
Zitat:

Zitat von mkinzler
Ein normales Label kann auch keinen UTF8-(Unicode) anzeigen

Sicher? Das erklärt einiges....*g*

Zitat:

Zitat von Bernhard Geyer

Zitat:

Zitat von Bruzzler
temp := UTF8ENCODE('Türkische Zeichen');

Die Pas-Dateien werden alls Unicode/UTF8-Technisch gespeichert. Ich würde mal fast darauf tippen das u.U. hier schon der Compiler mist baut.
Was passiert hier:

Delphi-Quellcode:
var
temp: widestring;
temp2: string;
begin

temp := 'Türkische Zeichen';
temp2 := UTF8ENCODE(temp);
Label1.Caption := temp + ' -> ' + temp2;

MH....kommt der gleiche Müll raus, aber laut mkinzler gehts ja eh nicht.

D.h. aber Türkisch muss sich auch ohne Unicode darstellen lassen.

himitsu 29. Okt 2009 13:17

Re: Türkische Zeichen
 
jupp, UTF-8 kann die VCL nicht anzeigen ... alles was sie bekommt, wird als ANSI angesehn (egal was drinnen ist) und dieses wird dann von Windows über den gewählten CharSet interpretiert.

Und Unicode/WideString wird nach ANSI umgewandelt, wofür die aktuelle Standard-Codepage verwendet wird, welche in einem deutschen Windows natürlich deutsch spricht.

theoretischer Code:
wie gesagt, du mußt das schon selber in den gewünschen Zeichensatz umwandeln
und jetzt muß man nun noch die passende CodePage zum entsprechenden CharSet rausfinden.
Delphi-Quellcode:
var U: WideString;
  S: AnsiString;
  C: LongWord;
  i: Integer;

begin
// dieses besser gleich im OI einstellen
Label1.Font.CharSet := TURKISH_CHARSET;

U := 'türkische Zeichen';
C := 28599 {ISO 8859-9 Turkish};
//C := 1254 {ANSI Turkish; Turkish (Windows)};

i := WideCharToMultiByte(C, 0, PWideChar(U), -1, nil, 0, '?', nil);
SetLength(S, i - 1);
WideCharToMultiByte(C, 0, PWideChar(U), -1, PAnsiChar(S), i, '?', nil);
//Label1.Font.CharSet := TURKISH_CHARSET;
Label1.Caption := S;

Du willst praktisch das machen, was ich dort mit dem Chinesischen versucht hab:
(ein paar Posts weiter ist auch der QuellCode)
http://www.delphipraxis.net/internal...090323#1090323
und nun mußt du noch deinen Text in die passende Codepage/Charset umwandeln.

Bernhard Geyer 29. Okt 2009 13:18

Re: Türkische Zeichen
 
Zitat:

Zitat von Bruzzler
MH....kommt der gleiche Müll raus, aber laut mkinzler gehts ja eh nicht.

Ganz vergessen. Nach 7 Jahren ElPack weiß ich fast gar nicht mehr das Delphi 6 kein Unicode kann :mrgreen:

Zitat:

Zitat von Bruzzler
D.h. aber Türkisch muss sich auch ohne Unicode darstellen lassen.

Auf einem Türkischen rechner kein Problem - aber mit Codepages/Charsets keine Chance. Das ist eine Krückenlösung die nur teilweise funktioniert.

p80286 29. Okt 2009 13:27

Re: Türkische Zeichen
 
Hallo Bruzzler,

was ist eigentlich Dein Problem?
Wenn du eine Datei mit einem türkischen (ansi) Text hast, dann brauchst Du nur einen Font, der die notwendigen Zeichen an der richtigen Stelle hat. Und die richtige Stelle wird über die verwendete Codepage definiert.
Mit SansSerive könntest du da ein Problem bekommen, weil es da weder die beiden i (mit und ohne i-Punkt) noch das "s mit komma" gibt, mit Arial hast Du eine Chance, das es klappt (TURKISH_CHARSET [162]).

In welcher Kodierung (UTF8 / Unicode....) der Text gespeichert wurde, ist in sofern irrelevant, als der notwendige Font für die Anzeige zur Verfügung stehen muß, sonst gibt's halt nur Müll.

Gruß
K-H

Bruzzler 29. Okt 2009 13:37

Re: Türkische Zeichen
 
Zitat:

Zitat von p80286
Hallo Bruzzler,

was ist eigentlich Dein Problem?
Wenn du eine Datei mit einem türkischen (ansi) Text hast, dann brauchst Du nur einen Font, der die notwendigen Zeichen an der richtigen Stelle hat. Und die richtige Stelle wird über die verwendete Codepage definiert.
Mit SansSerive könntest du da ein Problem bekommen, weil es da weder die beiden i (mit und ohne i-Punkt) noch das "s mit komma" gibt, mit Arial hast Du eine Chance, das es klappt (TURKISH_CHARSET [162]).

In welcher Kodierung (UTF8 / Unicode....) der Text gespeichert wurde, ist in sofern irrelevant, als der notwendige Font für die Anzeige zur Verfügung stehen muß, sonst gibt's halt nur Müll.

Gruß
K-H


Sorry, aber wenn du aufmerksam lesen würdest, wüsstest du, dass es nicht um Dateien geht, sondern mein Programm soll eben Türkisch anzeigen. Also es soll nicht "Klicken" auf dem Button stehen, sondern das Türkische pendant dazu.

himitsu 29. Okt 2009 13:45

Re: Türkische Zeichen
 
das hier ist übrigens "klicken" auf Türkisch, im der CodePage 1254 [ ANSI Turkish; Turkish (Windows) ] kodiert und als deutsches ANSI angezeigt
Delphi-Quellcode:
Label1.Font.CharSet := TURKISH_CHARSET;
Label1.Caption := 'Týklayýn';
so wird es dann im türkischen Zeichensatz dargestellt
(natürlich vorausgesetzt ein passender Zeichensatz ist installiert)
angezeigter Text von Label1
Tıklayın


umgewandelt wurde es von Unicode über die Funktion da oben

Bruzzler 29. Okt 2009 14:20

Re: Türkische Zeichen
 
Zitat:

Zitat von himitsu
das hier ist übrigens "klicken" auf Türkisch, im der CodePage 1254 [ ANSI Turkish; Turkish (Windows) ] kodiert und als deutsches ANSI angezeigt
Delphi-Quellcode:
Label1.Font.CharSet := TURKISH_CHARSET;
Label1.Caption := 'Týklayýn';
so wird es dann im türkischen Zeichensatz dargestellt
(natürlich vorausgesetzt ein passender Zeichensatz ist installiert)
angezeigter Text von Label1
Tıklayın


umgewandelt wurde es von Unicode über die Funktion da oben


Naja das ist immerhin eine vorzeitige Lösung.....bis ich was besseres/pefekteres gefunden habe.


Danke mal vorab an alle.....


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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