
27.03.2009, 18:50
|
 |
Активный
|
|
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
|
|
Функции WinAPI WritePrivateProfileStringA и WritePrivateProfileStringW сохраняют текст а ANSI, поэтому придется самому писать функции записи в ini файл (а для чтения подойдет и готовая WinAPI функция GetPrivateProfileStringW).
Т.е. записываем вручную, а читаем через GetPrivateProfileStringW.
Код:
//записываем
procedure TForm1.Button2Click(Sender: TObject);
var
w: hwnd;
x, l: dword;
s: PWideChar;
begin
l:= Length(Edit1.Text)*2 + Length('[aa]' + #13#10 + 'gg=')*2 + 1; // вычисляем длину юникодовой строки (в строке каждый символ занимает 2 байта + 1 байт управляющий)
GetMem(s, l);
StringToWideChar('[aa]' + #13#10 + 'gg=' + Edit1.Text, s, 256);
w:= CreateFileW('c:\ss.ini', GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);
WriteFile(w, s[0], lstrlenW(s)*2, x, nil);
CloseHandle(w);
FreeMem(s, l);
end;
//читаем
function Set_ReadString(const Section, Ident, Default: string): string; // аналог функции измодуля IniFiles, но с поддержкой юникода
var
Buffer: array[0..2047] of WideChar;
begin
SetString(Result, Buffer, GetPrivateProfileStringW(StringToOleStr(Section),
StringToOleStr(Ident), StringToOleStr(Default), Buffer, SizeOf(Buffer), 'c:\ss.ini'));
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit1.Text:= Set_ReadString('aa', 'gg', '');
end;
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
|