Показать сообщение отдельно
  #15  
Старый 27.03.2009, 18:50
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 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 метра.
Ответить с цитированием