Unicode Workshop
In diesem Kapitel finden Sie Beispiele und Lösungen für die Praxis zu den Themen:
- Unicode Allgemein im Programm und auf der Oberfläche (GUI)
- Umgang mit Unicode auf Dateiebene (Stand 08/2017)
Bevor Sie sich jedoch entschließen ein unicodefähige Anwendung zu erstellen, oder gar ein vorhandene auf Unicode
umzustellen (ich garantiere: das ist kein Zuckerschlecken) sollten Sie sich folgende Frage stellen:
Auf welchen Betriebssystemen sollen meine Anwendungen laufen?
Lautet Ihre Antwort:
- auf Windows 2000 und neuer, so können Sie Ihren gesamten Code auf Unicode umstellen!
- ab Windows 98, so sollten Sie zu Beginn ihres Programms die Version des Betriebssystems ermitteln und mit Hilfe einer boolschen Variablen (z.B. isUnicode) jede Funktion um die Abfrage If isUnicode Then... Else... End If erweitern.
Öffnen Sie dazu in der IDE den Dialog "Projekteigenschaften". Dadurch wird beim Compilieren (und auch in der IDE) der Codeabschnitt #If ANSISupport Then... benutzt;
Für reine Unicode Anwendungen setzen Sie ANSISupport = 0. Dadurch wird beim Compilieren (und auch in der IDE) der Codeabschnitt zwischen #Else und #End If benutzt, das heißt: |
Hierzu ein kurzes Beispiel für den Quellcodeaufbau anhand der API "MessageBox"
(es wird davon ausgegangen, dass die globale Variable isUnicode bereits bei Programmstart von einer anderen Funktion ermittelt wurde):
#If ANSISupport Then Private Declare Function MessageBoxA Lib "user32" (ByVal hWnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal msgType As VbMsgBoxStyle) As VbMsgBoxResult #End If Private Declare Function MessageBoxW Lib "user32" (ByVal hWnd As Long, _ ByVal lpText As Long, ByVal lpCaption As Long, ByVal msgType As VbMsgBoxStyle) As VbMsgBoxResult Public Function MessageBox(ByVal hWnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal mbStyle As VbMsgBoxStyle) As VbMsgBoxResult #If ANSISupport Then ' allow both variants, if ANSI should be supported If isUnicode Then MessageBox = MessageBoxW(hWnd, StrPtr(lpText), StrPtr(lpCaption), mbStyle) Else MessageBox = MessageBoxA(hWnd, lpText, lpCaption, mbStyle) End If #Else ' fast: only UNICODE version MessageBox = MessageBoxW(hWnd, StrPtr(lpText), StrPtr(lpCaption), mbStyle) #End If End Function
ralf schlegel
im Dezember 2012