AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi7 mit nur einer Unit Unicode fähig machen

Ein Thema von derMischka · begonnen am 10. Jun 2013 · letzter Beitrag vom 22. Okt 2019
Antwort Antwort
Seite 1 von 7  1 23     Letzte » 
derMischka

Registriert seit: 21. Jun 2007
Ort: Dresden
32 Beiträge
 
Delphi 7 Professional
 
#1

Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 13:26
Hallo Community,

Ihr habt mir schon oft aus der Klemme geholfen. Nun möchte ich euch auch mal was hoffentlich Nützliches liefern.

Ich habe eine Unit gecodet, die eure Komponenten/Controls nur mit dem Hinzufügen meiner kleinen Unit Unicode-fähig macht.
Dabei werden immer noch die "normalen" strings verstanden (Abwärtskompatibel).

Dies habe ich erreicht, indem ich die Windows-Api-Funktionen auf eigene Funktionen "umgebogen" habe, die die Strings in WideChar/Unicode
umwandelt und dann die entsprechenden Windows-Api-Funktionen mit der "W"(für WideChar/Unicode)-Erweiterung aufruft.

Diese Unit gibt auch Chin. bzw. Kyril. Zeichen auf einen Deutschen/nicht multilingualen System wieder.
Die Unit läuft soweit.
Bin aber für Verbesserungsvorschläge dankbar. Die Richedit-Komponente habe ich noch nicht zum Unicode verstehen bekommen.

Zur Benutzung:

die unit einfach in die uses-Klausel hinzu fügen.
Wenn ihr einen Widestring habt, der nun durch ein Control angezeigt werden soll, diesen einfach mit der Funktion
WideStringToUtf8 zu einen string konvertieren und diesen string an das Control übergeben.

Delphi-Quellcode:
 
var ss : string
begin
  ss := WideStringToUtf8(WideString);
   control1.caption := ss
viel Spaß damit
Miniaturansicht angehängter Grafiken
owinapiunicode_screenshot.png   owinapiunicode_opendialog.png  
Angehängte Dateien
Dateityp: pas oWinApiUnicode.pas (52,0 KB, 196x aufgerufen)

Geändert von derMischka (10. Jun 2013 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 13:36
Nette Idee.

Ähnliche Ansätze habe ich für 1-2 Controls auch als ich 2002 unsere Anwendung Unicode-Enabled habe.
Aber ein Glück das ich mit jetzt nicht mehr mit diesem UTF8-Trick herumschlagen muss sondern direkte (Dank Elpack und 2-3 anderen Unicode-Controls) das nicht mehr benötige
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 15:07
Interessant!

Für die Umwandlung von UTF8 <-> Widestring verwende ich immer die Windows API.
Als Zusatzbonus kann man neben UTF8 auch andere Codepages als Ziel oder Quelle angeben.
Delphi-Quellcode:
function StringToWideStringEx(const S: string; CodePage: Word): WideString;
var
  InputLength,
  OutputLength: Integer;
begin
  InputLength := Length(S);
  OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0);
  SetLength(Result, OutputLength);
  MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength);
end;

function WideStringToStringEx(const WS: WideString; CodePage: Word): string;
var
  InputLength,
  OutputLength: Integer;
begin
  InputLength := Length(WS);
  OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, nil, 0, nil, nil);
  SetLength(Result, OutputLength);
  WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, PChar(Result), OutputLength, nil, nil);
end;


function UTF8ToWideString(const S: string): WideString;
begin
   Result := StringToWideStringEx(S, CP_UTF8);
end;

function WideStringToUTF8(const WS: WideString): string;
begin
   Result := WideStringToStringEx(WS, CP_UTF8);
end;
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 15:31
Für die Umwandlung von UTF8 <-> Widestring verwende ich immer die Windows API.
Als Zusatzbonus kann man neben UTF8 auch andere Codepages als Ziel oder Quelle angeben
Geht aber erst in den "letzten" Windows-Versionen.
Win9x kannte die UTF-8 "Codepage" noch nicht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 18:20
Win9x kannte die UTF-8 "Codepage" noch nicht.
Das erste Window mit ernstzunehmendem Unicode-Support war Windows NT 4.
MultiByteToWideChar() und WideCharToMultiByte() benötigen mindestens Windows 2000.
Alles unterhalb Win 2000 würde ich heutzutage eh nicht mehr als Ziel akzeptieren.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 20:49
Das erste Window mit ernstzunehmendem Unicode-Support war Windows NT 4.
Wir habens auch mit Win9x hin bekommen (gab ca. 10 APIs die Unicode konnten. Hat gereicht um die GUI komplett Unicodefähig zu haben

Alles unterhalb Win 2000 würde ich heutzutage eh nicht mehr als Ziel akzeptieren.
Ist bei uns auch so W2K ist zwar noch supportet, fliegt aber bald raus.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.604 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 10. Jun 2013, 21:19
Ist bei uns auch so W2K ist zwar noch supportet, fliegt aber bald raus.
Bei uns ist es schon rausgeflogen. Unter XP gibt es in der Regel keinen Support mehr.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
derMischka

Registriert seit: 21. Jun 2007
Ort: Dresden
32 Beiträge
 
Delphi 7 Professional
 
#8

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 12. Jun 2013, 12:04
Habe inzwischen noch die Windows Funktion DrawTextEx eingebunden (wird bei mir vor allem von den LMD Tools verwendet).

der Mischka

Wie kann man man den originalen Beitrag (#1) wieder bearbeiten. Würde gerne die aktuellste Version immer in Beitrag #1 haben.
Angehängte Dateien
Dateityp: pas oWinApiUnicode.pas (52,2 KB, 65x aufgerufen)

Geändert von derMischka (12. Jun 2013 um 12:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 12. Jun 2013, 12:44
Cool, danke für die Arbeit.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
derMischka

Registriert seit: 21. Jun 2007
Ort: Dresden
32 Beiträge
 
Delphi 7 Professional
 
#10

AW: Delphi7 mit nur einer Unit Unicode fähig machen

  Alt 13. Jun 2013, 17:20
Und wieder ein Update ...

würde mich über Testergebnisse von D5-D7 Nutzer freuen.

der Mischka
Angehängte Dateien
Dateityp: pas oWinApiUnicode.pas (52,7 KB, 111x aufgerufen)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:38 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