EhLib SaveColumnsLayout / RestoreColumnsLayout

belykh
Дата: 26.04.2011 10:14:59
Кто-нибудь использовал методы SaveColumnsLayout / RestoreColumnsLayout для восстановления состояния колонок грида из реестра?
Описание метода такое:
procedure SaveColumnsLayout(ARegIni: TRegIniFIle); overload;
procedure RestoreColumnsLayout(ARegIni: TRegIniFIle; RestoreParams:TColumnEhRestoreParams); overload;
То есть, методу нужно передать объект TRegIniFIle.
Что нужно сделать предаварительно с этим объектом?
Задать ключ? Открыть его? Закрыть его?
Почему разработчики не реализовали открытие ключа внутри метода?

Перекопал интернет — нигде не нашел готового кода использования этих методов
Michael Longneck
Дата: 26.04.2011 10:30:18
15 мин экспериментов дадут больше чем перекапывание в поисках готовенького.
belykh
Дата: 26.04.2011 10:32:52
Копание в инете + 15 минут экспериментов
Следующий шаг форум
Вот я и тут...
Пробовал по-всякому...
Michael Longneck
Дата: 26.04.2011 10:35:54
По всякому это как? Код покажите, и будем думать.
belykh
Дата: 26.04.2011 10:49:57
Michael Longneck,

Код, да пожалуйста:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	TRegIniFile *reg = new TRegIniFile("EK4");
	reg->RootKey = HKEY_CURRENT_USER;
	if (reg->OpenKey("Software\\MyCompany\\MyApp", true))
	{
		DBGridEh1->RestoreColumnsLayout(reg, TColumnEhRestoreParams() << crpColIndexEh << crpColWidthsEh);
	}
	reg->CloseKey();
	delete reg;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
	TRegIniFile *reg = new TRegIniFile("EK4");
	reg->RootKey = HKEY_CURRENT_USER;
	if (reg->OpenKey("Software\\MyCompany\\MyApp", true))
	{
		DBGridEh1->SaveColumnsLayout(reg);
	}
	reg->CloseKey();
	delete reg;
}
Как я понимаю, в реестре должна создаться запись HKEY_CURRENT_USER\Software\MyCompany\MyApp
Но не создается...
Michael Longneck
Дата: 26.04.2011 11:03:25
  reg := nil;
  try
    reg := TRegistryIniFile.Create('', KEY_WRITE);
    reg.RegIniFile.RootKey := HKEY_CURRENT_USER;
    reg.RegIniFile.EraseSection(locPath + locDocType + PathDelim);
    reg.RegIniFile.OpenKey(locPath + locDocType + PathDelim, True);
    Grid.SaveGridLayout(reg, Grid.Name);
  finally
    reg.RegIniFile.CloseKey;
    FreeAndNil(reg);
   end;
belykh
Дата: 26.04.2011 11:18:52
Что-то сохранилось...
Но, видимо не то, что хлтелось бы
Нашел исходник
Посмотрю там
belykh
Дата: 26.04.2011 12:03:48
Нашел свой косяк
Работал в тестовом проекте (грид без привязки к датасету)
SaveColumnsLayout сохраняет в строку по имени поля Grid->Columns->Items[i]->FieldName
Поэтому RestoreColumnsLayout не работал.
На реальном проекте всё будет работать.
belykh
Дата: 26.04.2011 12:05:10
З.Ы.
reg.RegIniFile.EraseSection(locPath + locDocType + PathDelim); делать не нужно
SaveColumnsLayout - это делает сам