Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / dxLayoutControl RestoreFromRegistry / 25 сообщений из 54, страница 1 из 3
09.11.2016, 17:20
    #39344364
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Есть форма, которую пользователь может вызвать несколько раз. Т.е. форма редактирования каких-нибудь данных - вызвать на редактирование 2-3 записи из БД.
Т.е. создаётся несколько одинаковых форм одно и то же типа. Тип один и тот же, а имена разные: "fmEditFom", "fmEditFom_1" и т.д.
На форме есть dxLayoutControl.
Первый экземпляр создаётся без ошибок.
Второй уже вызывает исключение:
exceptionProject raised exception class EClassNotFound with message 'Class TdxLayoutControlContainer not found'.


Код восстановления настроек:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
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 нужно сделать процедурой класса в модуле формы?
...
Рейтинг: 0 / 0
09.11.2016, 17:23
    #39344367
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
закомментировал "RestoreLayoutControl(dxLayoutControl1);" в процедуре создания формы и ошибка исчезла

так как же в моём случае правильно восстанавливать?
...
Рейтинг: 0 / 0
09.11.2016, 19:30
    #39344444
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
А кто тебе разрешал методы контейнера дергать? У тебя контрол - вот и юзай, для начала, его методы...
...
Рейтинг: 0 / 0
10.11.2016, 11:16
    #39344641
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Но у TdxLayoutControl нет RestoreFromRegistry()
Или я не понял тебя?
...
Рейтинг: 0 / 0
10.11.2016, 11:17
    #39344643
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
вот так правильно?
Код: pascal
1.
2.
      LayoutControl.OptionsStoring.RegistryPath := sRegStorKeyLAC + LayoutControl.Owner.ClassName + '_' + LayoutControl.Name;
      LayoutControl.Restore;
...
Рейтинг: 0 / 0
10.11.2016, 11:23
    #39344653
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Та же ошибка на строке
Код: pascal
1.
LayoutControl.Restore;
...
Рейтинг: 0 / 0
10.11.2016, 12:03
    #39344688
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11,

Я точно не помню, т.к. года три назад это сделал и до сих пор использую в неизменном виде запись лайоута в стрим .
Container.StoreToStream/Container.RestoreFromStream
Но кажется проблема решилась через параметр aSaveName/aRestoreName.
Нужно задать строковой константой этот параметр при сохранении и восстановлении.
...
Рейтинг: 0 / 0
10.11.2016, 12:19
    #39344709
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Код: pascal
1.
LayoutControl.LoadFromRegistry()



также выдает то же самое исключение
...
Рейтинг: 0 / 0
10.11.2016, 13:42
    #39344812
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11,
сохраниться-то перед восстановлением удалось с параметром?
...
Рейтинг: 0 / 0
10.11.2016, 13:52
    #39344826
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Я Вас не понял, извините.
...
Рейтинг: 0 / 0
10.11.2016, 13:53
    #39344828
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Вы, наверное, не поняли мою проблему.
...
Рейтинг: 0 / 0
10.11.2016, 14:05
    #39344842
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11Я Вас не понял, извините.
Удалось ли вызвать
Код: pascal
1.
LayoutControl.Container.StoreToRegistry(....., cMyLyoutSaveName);

Перед восстановлением
Код: pascal
1.
LayoutControl.Container.ReStoreFromRegistry(....., cMyLyoutSaveName);
...
Рейтинг: 0 / 0
10.11.2016, 14:07
    #39344844
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11Вы, наверное, не поняли мою проблему.
Да как же тебя понять, коли ты ничего не говоришь? (c)
...
Рейтинг: 0 / 0
10.11.2016, 14:37
    #39344879
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
LayoutSaver, так Container сказали же не трогать
...
Рейтинг: 0 / 0
10.11.2016, 14:41
    #39344888
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
если сделать так:
Код: pascal
1.
2.
LayoutControl.Container.StoreToRegistry();
LayoutControl.Container.ReStoreFromRegistry();



т.е. вызвать LayoutControl.Container.StoreToRegistry(); предварительно, то ошибки НЕ возникает
...
Рейтинг: 0 / 0
10.11.2016, 14:59
    #39344920
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11
Код: pascal
1.
2.
LayoutControl.Container.StoreToRegistry();
LayoutControl.Container.ReStoreFromRegistry();

т.е. вызвать LayoutControl.Container.StoreToRegistry(); предварительно , то ошибки НЕ возникает
"Предварительно", т.е. непосредственно перед "ReStore"? Зачем вообще тогда "ReStore" делать?
...
Рейтинг: 0 / 0
10.11.2016, 15:13
    #39344943
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
как зачем?
а как ВОССТАНОВИТЬ
...
Рейтинг: 0 / 0
10.11.2016, 15:26
    #39344969
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11,
ты читаешь внимательно? Значение слова "непосредственно" понятно?
автор"Предварительно", т.е. непосредственно перед "ReStore"? Зачем вообще тогда "ReStore" делать?
...
Рейтинг: 0 / 0
10.11.2016, 15:34
    #39344981
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Значение слова - понятно. Тебя - непонятно.
Ты знаешь способ восстановить настройки LayoutControl? Дай пример.
...
Рейтинг: 0 / 0
10.11.2016, 15:40
    #39344994
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Документация? Не, не слышали.
...
Рейтинг: 0 / 0
10.11.2016, 15:50
    #39345005
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11,

Пример не дам, т.к. слишком много в нем лишнего.
Но у меня устроено так. Думаю, что с registry тоже прокатит.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
const
  cLayoutSaveName : String = 'SpecialSavedLayout';

//Процедура сохранения окошка
procedure TMyForm.saveToStream();
begin
....
    LayoutControl.Container.StoreToStream(aStream, cLayoutSaveName);
....
end;
//Процедура восстановления окошка
procedure TMyForm.loadFromStream();
begin
....
    LayoutControl.Container.RestoreFromStream(aStream, cLayoutSaveName);
....
end;
...
Рейтинг: 0 / 0
10.11.2016, 15:50
    #39345007
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
Короче пример давай. Или в саппорт или сюда. А то так долго телепатировать можно...
...
Рейтинг: 0 / 0
10.11.2016, 15:52
    #39345010
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
JaDiДокументация? Не, не слышали.

при вызове Restore то же ошибка
...
Рейтинг: 0 / 0
10.11.2016, 16:09
    #39345030
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
white_niggerКороче пример давай. Или в саппорт или сюда. А то так долго телепатировать можно...

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

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

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

Если не получится, то закройте программу, затем откройте программу и нажмите кнопку дважды.
...
Рейтинг: 0 / 0
10.11.2016, 16:16
    #39345034
LayoutSaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dxLayoutControl RestoreFromRegistry
X11,
rar не открывается
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / dxLayoutControl RestoreFromRegistry / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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