powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / MemIniFile и cxGrid.StoreToIni Delphi Xe
5 сообщений из 5, страница 1 из 1
MemIniFile и cxGrid.StoreToIni Delphi Xe
    #39609593
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Ребят помогите плиз, вчера здесь же помогли и подсказали заменить Ini на MemIni, дабы я мог туда записывать русские буква в юникоде.
Теперь столкнулся с проблемой, что если стоит команда cxGrid.StoreToIni, то она отрабатывает корректно и дозаписывает в конец файла все инфу о колонках.
Если же после этого вызвать
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Ini:=TMeminifile.Create(extractfilepath(Application.Exename)+'Settings.ini', TEncoding.Unicode);
  try
    Ini.WriteInteger('Schedule', 'TimePeriod1', 25);
    Ini.WriteInteger('Schedule', 'TimePeriod2', 25);
    Ini.WriteInteger('Schedule', 'TimePeriod3', 25);
    Ini.WriteInteger('Schedule', 'TimePeriod4', 25);
  finally
    Ini.UpdateFile;
    Ini.Free;
  end;



То все, весь файл затирается и остается только секция "Schedule". Причем, если просто записывать в файл через Ini.WriteInteger, то нормально работает, инфа дозаписывается в конец. Но как только туда что-то записать посредством cxGrid.StoreToIni, и следом вызвать TMeminifile.Create - Ini.UpdateFile все стирается к чертям.

Проект на всякий случай приложил тестовый
...
Рейтинг: 0 / 0
MemIniFile и cxGrid.StoreToIni Delphi Xe
    #39609635
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
constructor TcxIniFileWriter.Create(const AStorageName: string; AStream: TStream; AReCreate: Boolean = True);
begin
  inherited Create(AStorageName, AStream, AReCreate);

  FIniFile := TMemIniFile.Create(AStorageName);
  {$IFDEF DELPHI12}FIniFile.Encoding := TEncoding.UTF8;{$ENDIF}
  if FReCreate then
    FIniFile.Clear;
  FIniFile.CaseSensitive := False;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TForm1.btn2Click(Sender: TObject);
var
  Ini: TMeminifile; //необходимо создать объект, чтоб потом с ним работать
  Off_Login, sss : Integer;
begin
  Ini:=TMeminifile.Create(extractfilepath(Application.Exename)+'Settings.ini', TEncoding.Unicode);
  try
    Ini.WriteInteger('Schedule', 'TimePeriod1', 25);
    Ini.WriteInteger('Schedule', 'TimePeriod2', 25);
    Ini.WriteInteger('Schedule', 'TimePeriod3', 25);
    Ini.WriteInteger('Schedule', 'TimePeriod4', 25);
  finally
    Ini.UpdateFile;
    Ini.Free;
  end;

  m1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Settings.ini');
end;
...
Рейтинг: 0 / 0
MemIniFile и cxGrid.StoreToIni Delphi Xe
    #39609667
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

тьфу блин точно :( с чего я вообще TEncoding.Unicode взял... Спасибо!
Тема закрыта
...
Рейтинг: 0 / 0
MemIniFile и cxGrid.StoreToIni Delphi Xe
    #39609699
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikТо все, весь файл затирается и остается только секция "Schedule"

это характерное поведение, когда на вход TEncoding поступает текст, который он не может разобрать (не совпала кодировка)

например когда на вход TUTF8Encoding поступает текст UTF-16 или обычный ANSI CP

aidynchikесли стоит команда cxGrid.StoreToIni

постарайся в эту команду передавать не название файла (могут быть например проблемы с одновременным доступом, или кодировками), а объект-потомок TCustomInifile
ЕМНИП девки так умели, хотя не помню навскидку какой метод или какие свойства за это отвечают.

А дальше ты уже у себя в программе делаешь один или несколько глобальных объектов с настройками.
Причем потом ты их сможешь переключить на хранение в реестре, в БД, в XML - где захочешь.

В общем, примерно так в JediVCL поступили с компонентами автоматического сохранения настроек RxLib - разломали их на две части, которая работает с формой, и которая сохраняет/читает.
...
Рейтинг: 0 / 0
MemIniFile и cxGrid.StoreToIni Delphi Xe
    #39609701
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут кстати плохйо стиль

aidynchik
Код: pascal
1.
2.
3.
4.
  finally
    Ini.UpdateFile;  
    Ini.Free;
  end;



В первой строке вылетает исключение (отвалился сетевой диск с ini-файлом, например. Или файл открыт каким-то другим объектом/потоком/программой )

Вторая тсрока не выполняется, получаем утечку памяти.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / MemIniFile и cxGrid.StoreToIni Delphi Xe
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]