In Abständen von einigen Jahren kommt mir immer wieder danach, die Möglichkeiten rund um Unicode zu testen. Es geht um Windows 2000 als Ziel- und Entwicklungsplattform, also die Win NT Schiene, die intern Unicode-basierend ist. Versuche habe ich mit Lazarus-0.9.29-24216-fpc-2.4.1-20100326-win32 gemacht.
Ich habe mir erhofft, dass ich z.B. die Existenz einer Datei L:\uib\examples\lazarus\ĆevapčićiDžabe\Радничка.fb programmatisch feststellen kann. Der Beispielname will zeigen, dass die Existenz einer Systemcodepage, die alle Sonderzeichen abdecken würde, nicht gegeben ist. Genau darum geht es mir: um "Globalität" zu erreichen.
Nun, blauäugig, wie ich bin, habe ich gedacht, dass der Aufruf der API-funktion abzufangen ist, in etwa so (durch die Verwendung meiner eigenen Funktion MyFileExistsUTF8 - hier die Auszüge aus der Unit mit der Definition):
Code: Alles auswählen
interface
// [...]
function MyGetFileAttributes(lpFileName:LPCWSTR):DWORD; external 'kernel32' name 'GetFileAttributesW';
function MyFileExistsUTF8(const Filename: UTF8string): boolean;
function Bool2Str(b:Boolean):ShortString;
// [...]
implementation
// [...]
function UTF8ToWideString(const s : AnsiString) : WideString;
// Based on Mike Lischke's function (Unicode.pas unit, http://www.delphi-gems.com" onclick="window.open(this.href);return false;)
// [...]
begin
// [...]
end;
// [...]
Function MyFileExists (Const FileName : WideString) : Boolean;
var
Attr:Dword;
WS : WideString;
begin
WS:=FileName;
Attr:=MyGetFileAttributes(@WS[1]);
if Attr <> $ffffffff then
Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) = 0
else
Result:=False;
end;
function MyFileExistsUTF8(const Filename: UTF8string): boolean;
begin
// Result:=FileExists(UTF8ToSys(Filename));
Result:=MyFileExists(UTF8ToWideString(Filename));
ShowMessage('FileExistsUTF8 Debug:'
+ LineEnding + Filename
+ LineEnding + UTF8ToSys(Filename)
+ LineEnding + Bool2Str(Result)
);
end;
Hätte jemand einen Rat für mich? Sorry, wenn das Ganze eine dumme Fragestellung ist.
Danke!
Borut