Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Есть форма, которую пользователь может вызвать несколько раз. Т.е. форма редактирования каких-нибудь данных - вызвать на редактирование 2-3 записи из БД.
Т.е. создаётся несколько одинаковых форм одно и то же типа. Тип один и тот же, а имена разные: "fmEditFom", "fmEditFom_1" и т.д.
На форме есть dxLayoutControl.
Первый экземпляр создаётся без ошибок.
Второй уже вызывает исключение:
exception
Project raised exception class EClassNotFound with message 'Class TdxLayoutControlContainer not found'.



Код восстановления настроек:
procedure TfmEditFom.FormCreate(Sender: TObject);
begin
...
...
...
    RestoreLayoutControl(dxLayoutControl1);
...

end;



//процедура RestoreLayoutControl живёт в отдельном модуле
procedure RestoreLayoutControl(LayoutControl: TdxLayoutControl);
begin
  try
    LayoutControl.BeginUpdate;

    if RegistryKeyExists(sRegStorKeyLAC + LayoutControl.Owner.ClassName + '_' + LayoutControl.Name) then
      LayoutControl.Container.RestoreFromRegistry(sRegStorKeyLAC + LayoutControl.Owner.ClassName + '_' + LayoutControl.Name);

  finally
    LayoutControl.EndUpdate;
  end;
end;


И для первого, и для второго экземпляров форм строка в реестре выглядит совершенно одинаково, но, думаю, что не в ней дело.
А дело в "LayoutControl.Container."

Или RestoreLayoutControl нужно сделать процедурой класса в модуле формы?
9 ноя 16, 17:20    [19876060]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
закомментировал "RestoreLayoutControl(dxLayoutControl1);" в процедуре создания формы и ошибка исчезла

так как же в моём случае правильно восстанавливать?
9 ноя 16, 17:23    [19876076]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1884
А кто тебе разрешал методы контейнера дергать? У тебя контрол - вот и юзай, для начала, его методы...
9 ноя 16, 19:30    [19876637]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Но у TdxLayoutControl нет RestoreFromRegistry()
Или я не понял тебя?
10 ноя 16, 11:16    [19878261]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
вот так правильно?
      LayoutControl.OptionsStoring.RegistryPath := sRegStorKeyLAC + LayoutControl.Owner.ClassName + '_' + LayoutControl.Name;
      LayoutControl.Restore;
10 ноя 16, 11:17    [19878268]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Та же ошибка на строке
LayoutControl.Restore;
10 ноя 16, 11:23    [19878309]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11,

Я точно не помню, т.к. года три назад это сделал и до сих пор использую в неизменном виде запись лайоута в стрим .
Container.StoreToStream/Container.RestoreFromStream
Но кажется проблема решилась через параметр aSaveName/aRestoreName.
Нужно задать строковой константой этот параметр при сохранении и восстановлении.
10 ноя 16, 12:03    [19878531]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
LayoutControl.LoadFromRegistry()


также выдает то же самое исключение
10 ноя 16, 12:19    [19878613]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11,
сохраниться-то перед восстановлением удалось с параметром?
10 ноя 16, 13:42    [19879065]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Я Вас не понял, извините.
10 ноя 16, 13:52    [19879127]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Вы, наверное, не поняли мою проблему.
10 ноя 16, 13:53    [19879132]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11
Я Вас не понял, извините.

Удалось ли вызвать
LayoutControl.Container.StoreToRegistry(....., cMyLyoutSaveName);
Перед восстановлением
LayoutControl.Container.ReStoreFromRegistry(....., cMyLyoutSaveName);
10 ноя 16, 14:05    [19879201]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11
Вы, наверное, не поняли мою проблему.

Да как же тебя понять, коли ты ничего не говоришь? (c)
10 ноя 16, 14:07    [19879221]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
LayoutSaver, так Container сказали же не трогать
10 ноя 16, 14:37    [19879383]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
если сделать так:
LayoutControl.Container.StoreToRegistry();
LayoutControl.Container.ReStoreFromRegistry();


т.е. вызвать LayoutControl.Container.StoreToRegistry(); предварительно, то ошибки НЕ возникает
10 ноя 16, 14:41    [19879418]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11
LayoutControl.Container.StoreToRegistry();
LayoutControl.Container.ReStoreFromRegistry();
т.е. вызвать LayoutControl.Container.StoreToRegistry(); предварительно, то ошибки НЕ возникает

"Предварительно", т.е. непосредственно перед "ReStore"? Зачем вообще тогда "ReStore" делать?
10 ноя 16, 14:59    [19879536]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
как зачем?
а как ВОССТАНОВИТЬ
10 ноя 16, 15:13    [19879628]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11,
ты читаешь внимательно? Значение слова "непосредственно" понятно?
автор
"Предварительно", т.е. непосредственно перед "ReStore"? Зачем вообще тогда "ReStore" делать?
10 ноя 16, 15:26    [19879726]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Значение слова - понятно. Тебя - непонятно.
Ты знаешь способ восстановить настройки LayoutControl? Дай пример.
10 ноя 16, 15:34    [19879778]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3663
Документация? Не, не слышали.

К сообщению приложен файл. Размер - 26Kb
10 ноя 16, 15:40    [19879821]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
Egoр
Member

Откуда:
Сообщений: 817
X11,

Пример не дам, т.к. слишком много в нем лишнего.
Но у меня устроено так. Думаю, что с registry тоже прокатит.
const
  cLayoutSaveName : String = 'SpecialSavedLayout';

//Процедура сохранения окошка
procedure TMyForm.saveToStream();
begin
....
    LayoutControl.Container.StoreToStream(aStream, cLayoutSaveName);
....
end;
//Процедура восстановления окошка
procedure TMyForm.loadFromStream();
begin
....
    LayoutControl.Container.RestoreFromStream(aStream, cLayoutSaveName);
....
end;
10 ноя 16, 15:50    [19879872]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1884
Короче пример давай. Или в саппорт или сюда. А то так долго телепатировать можно...
10 ноя 16, 15:50    [19879877]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
JaDi
Документация? Не, не слышали.


при вызове Restore то же ошибка
10 ноя 16, 15:52    [19879887]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
white_nigger
Короче пример давай. Или в саппорт или сюда. А то так долго телепатировать можно...


http://files.d-lan.dp.ua/download?file=0398c46b481914d5826fa572a9422f12#uploader

Сделайте так:
Запустите программу и нажмите кнопку, затем закройте окно, чтобы данные о LayoutControl записались в реестр при закрытии окна.

А теперь нажмите кнопку, чтобы создать и открыть первый экземпляр окна, а затем ещё раз, чтобы - второй экземпляр.

Если не получится, то закройте программу, затем откройте программу и нажмите кнопку дважды.
10 ноя 16, 16:09    [19879978]     Ответить | Цитировать Сообщить модератору
 Re: dxLayoutControl RestoreFromRegistry  [new]
LayoutSaver
Guest
X11,
rar не открывается
10 ноя 16, 16:16    [19880017]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Delphi Ответить