Gewusst wie: Schreiben von Unicode Win32-Anwendungen mit Delphi

Dieses Dokument beschreibt die grundlegenden Schritte, die Sie durchführen sollten, wenn Sie Anwendung vollständig Unicode aktiviert können Sie ändern möchten.

Sie müssen keinen Sie Anwendung auf Unicode-Anwendung ändern, wenn Sie es für asiatische Sprachen lokalisieren möchten. Ein standard Ansi Delphi-Applikation kann um gut asiatische Sprachen lokalisiert werden. Wenn Sie Sie Anwendung in Japanisch auf Western Windows ausführen möchten hat es jedoch eine Unicode-Anwendung sein. Andernfalls werden alle Zeichenfolgen fälschlicherweise als Mojibake Zeichenfolgen anzeigen.

Wollen Sie Ihre Anwendung auf eine Sprache zu lokalisieren, die nicht Code Seite Unterstützung hat z. B. Hindi, die Sie, haben damit Sie Anwendung Unicode aktiviert.

Bevor Sie beginnen, ändern Sie Anwendung von Ansi in Unicode sorgfältig denke, wenn Sie oder Ihre Kunden ein Bedürfnis haben, Ihre Anwendung auf verschiedenen Sprachen als Ihre Windows auszuführen, oder müssen Sie für die Sprache zu lokalisieren, die nicht Codeseite unterstützt hat. Denken Sie daran, dass am meisten westliche Sprachen die gleichen Codepage verwenden und miteinander kompatibel sind. Dies bedeutet, dass Sie deutschen Anwendung auf Französisch oder Englisch Windows und umgekehrt ausführen können.

Verwenden Sie geerbte Formulare

Wenn Sie richtig schreiben internationalisiert Code Sie die Standardverhalten von jeder Form und Frame ändern müssen. Deshalb Sie besser ableiten abstrakter Form aus TForm und alle Ihre Formulare aus diesem Formular abgeleitet ist. Tun Sie demselben Formular-Frame. Dies macht es einfach, das Formular im Konstruktor des Basisformulars initialisieren.

Verwenden Sie eine Unicode-Bibliothek

Aktuelle VCL-Komponenten bieten keine Unterstützung für Unicode. Der Grund ist, dass jede Zeichenfolgeneigenschaft als Zeichenfolge und nicht WideString ist. Damit Ihre Anwendung vollständig Unicode aktiviert Sie die standard-VCL-Komponenten wie z. B. TLabel, TEdit, etc. können nicht verwenden. Stattdessen müssen Sie Unicode aktiviert-Steuerelemente verwenden. Dies wird in Delphi 2008 geändert werden. Derzeit sind zwei Unicode aktiviert Komponente Bibliotheken. Sie sind:

Bibliothek URL
TMS-Unicode-Component-Pack http://www.tmssoftware.com/tmsuni.htm
LMD ElPack http://www.lmdinnovative.com/products/lmdelpack/

Beide Komponente-Bibliotheken bieten vollständigen Komponentensatz der Unicode aktiviert. TMS Komponenten Namen und Eigenschaften sind nahezu identisch mit der ursprünglichen VCL Komponenten, sodass es einfach ist, vorhandene Ansi-Formulare zu konvertieren bilden Unicode-Formulare. ElPack-Komponentennamen sind ein bißchen anders, sodass konvertieren etwas schwieriger ist.

Konvertieren Sie vorhandene Formulare

In vielen Fällen haben Sie ein vorhandenes Projekt, das Sie in Unicode-Projekt konvertieren möchten. Erste ersetzt alle vorhandene Komponenten sehr kompliziert erscheinen mag, aber es ist eigentlich sehr einfach. Diese wie es gemacht wird.

  1. Installieren der Unicode-Komponente-Bibliothek zu Delphi's Komponente palette.
  2. Öffnen Sie das Formular, das Sie konvertieren möchten
  3. Ändern Sie in Text-Ansicht. Klicken Sie mit der rechten Maustaste auf das Formular und wählen Sie „ Ansicht als Text.
  4. Ändern Sie die Namen der Komponenten Typ von ursprünglichen VCL-Namen in Unicode Namen. Z. B. Wenn Sie TMS Komponenten Änderung TLabel, TTntLabel, TEdit, TTntEdit und TButton, TTntButton verwenden.
  5. Zurück zur Formularansicht ändern. Klicken Sie mit der rechten Maustaste auf das Formular und wählen Sie „ Ansicht as Form.
  6. Verschieben Sie Formular ein Bit, damit Sie verschmutzt und speichern Sie Sie. Delphi wird einen Fehler angezeigt. Meldung der Komponentennamen in der Form und Quelle stimmen nicht überein.
    TNT-Schaltfläche-Warnung
    Drücken Sie Ja, um den Typnamen in der Quelle entsprechend des Formulars Namen konvertieren. Diese Fehlermeldung ist Show, nachdem für jede Komponente, die Sie geändert.

Wenn Sie TMS Steuerelemente ändern die jede Form von TForm auf TTntForm base Form verwenden. Wenn Sie ElPack verwenden TElFormCaption zu jedem Formular hinzufügen.

Ändern Sie internen Stringdaten von String in WideString

Halten Sie alle interne Daten in Unicode. Dies bedeutet WideString anstelle von String verwenden, wenn Sie Zeichenfolgen verarbeiten.

Bitte beachten, dass VCL WideString automatisch in AnsiString konvertiert. Das macht einige aller Daten beschädigt werden, wenn es über ASCII enthält Zeichen und die System-Codepage des Ihr Windows entspricht nicht der Standard-Codepage des die Stringdaten.

Manchmal müssen Sie Ansi-Zeichenfolge verwenden. Verwenden Sie AnsiString anstelle von String. Dies vereinfacht die platzierte ermitteln, die bereits eingecheckt wurden. Wenn Sie String-Variable sehen müssen Sie beschlossen, wenn Sie dies in WideString oder AnsiString ändern.

Unicode-Dateinamen

Verarbeiten Sie alle Dateinamen als WideString. Verwenden Sie das Dialogfeld Komponenten und Systemfunktionen ihrer Unicode-Bibliothek, anstatt die standard-VCL-Komponenten und Funktionen. Zum Beispiel wenn Sie hatte

ifFileExists(fileName) dann begin... End;

Ändern Sie (Wenn Sie TMS verwenden)

ifWideFileExists(fileName) dann begin... End;

Verwendung Unicode-Version Win32 API

Wenn Sie aufrufen, Win32 API prüfen ob es eine Unicode-Version der API ist. Die Unicode-Version hat den gleichen Namen mit Ausnahme seiner hat am Ende der Name der Funktion W. Zum Beispiel wenn Sie mit dem folgenden Code ist

FunktionIsFileReadOnly(constfileName:String): Boolean; begin Ergebnis: =

 FileExists(fileName) und ((GetFileAttributes(PChar(fileName)) und FILE_ATTRIBUTE_READONLY) Lt; > 0); Ende;

Ändern Sie, um

FunktionIsFileReadOnly(constfileName: WideString): Boolean; begin Ergebnis: =

 WideFileExists(fileName) und ((GetFileAttributesW(PWideChar(fileName)) und FILE_ATTRIBUTE_READONLY) Lt; > 0); Ende;

Diese einfachen Schritte können Sie Sie vorhandene Ansi leicht ändern Anwendung in Unicode-Anwendung.