Цитата:
Сообщение от Freeman
Вот это очень и очень странно, поскольку на XP и 2003 GetACP возвращала именно кодировку региональных настроек, а не локализации.
|
На XP я и проверял. По поводу локализации это я на вскидку сказал, возможно и не от локализации (просто не знаю от чего уж тогда), но уж точно не от региональных настроек.
Вот для примера на русскоязычной WinXP установил языковый стандарт "Итальянский (Италия)", расположение "Танзания" и язык ввода по-умолчанию "Английский (США) - (США)". Запускаю такой код:
Код:
type
_cpinfoExA = record
MaxCharSize: UINT; { max length (bytes) of a char }
DefaultChar: array[0..MAX_DEFAULTCHAR - 1] of Byte; { default character }
LeadByte: array[0..MAX_LEADBYTES - 1] of Byte; { lead byte ranges }
UnicodeDefaultChar: WideChar;
Codepage: UINT;
CodePageName: array[0..MAX_PATH -1] of AnsiChar;
end;
TCPInfoExA = _cpinfoExA;
TCPInfoEx = TCPInfoExA;
function GetCPInfoEx(CodePage: UINT; dwFlags: DWORD; var lpCPInfoEx: TCPInfoEx): BOOL; stdcall;
external kernel32 name 'GetCPInfoExA';
procedure TForm1.Button1Click(Sender: TObject);
var
LCPInfo: TCPInfoEx;
begin
if GetCPInfoEx(GetACP, 0, LCPInfo) then
begin
ShowMessageFmt('$%4x (%d) => "%s"', [LCPInfo.Codepage, LCPInfo.Codepage, LCPInfo.CodePageName]);
end;
end;
Который в результате тем не менее выдаёт: $ 4E3 (1251) => "1251 (ANSI - кириллица)":
Цитата:
Сообщение от hilaryon
хех, сразу возник вопрос, что делать с элементами которые не имеют DefaultEncoding свойства? -)
|
Можно ещё загружать через RawByteString:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
fs: TFileStream;
s: RawByteString;
begin
fs := TFileStream.Create('ИмяФайла', fmOpenRead);
try
SetLength(s, fs.Size);
fs.Read(Pointer(s)^, fs.Size);
SetMultiByteConversionCodePage(1251); // Это достаточно сделать однажды, например в FormCreate
Edit1.Text := s;
finally
fs.Free;
end;
end;
Цитата:
Сообщение от hilaryon
русификация у меня грузится через TIniFile.. придется видимо от него отказаться ( кодировки он не поддерживает
|
Обычный TIniFile лучше вообще не использовать. В том же модуле есть TMemIniFile полностью реализующий функциональность TIniFile и даже чуть больше.
Цитата:
Сообщение от hilaryon
реально жаль что нельзя установить в приложении кодировку и чтобы он не брал настройки с винды (
|
Я экспериментировал с DelphiXE2. Возможно в XE5 это исправили.