|
|
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Есть форма, которую пользователь может вызвать несколько раз. Т.е. форма редактирования каких-нибудь данных - вызвать на редактирование 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. И для первого, и для второго экземпляров форм строка в реестре выглядит совершенно одинаково, но, думаю, что не в ней дело. А дело в "LayoutControl.Container." Или RestoreLayoutControl нужно сделать процедурой класса в модуле формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 17:20 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
закомментировал "RestoreLayoutControl(dxLayoutControl1);" в процедуре создания формы и ошибка исчезла так как же в моём случае правильно восстанавливать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 17:23 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
А кто тебе разрешал методы контейнера дергать? У тебя контрол - вот и юзай, для начала, его методы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 19:30 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Но у TdxLayoutControl нет RestoreFromRegistry() Или я не понял тебя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 11:16 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
вот так правильно? Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 11:17 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Та же ошибка на строке Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 11:23 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, Я точно не помню, т.к. года три назад это сделал и до сих пор использую в неизменном виде запись лайоута в стрим . Container.StoreToStream/Container.RestoreFromStream Но кажется проблема решилась через параметр aSaveName/aRestoreName. Нужно задать строковой константой этот параметр при сохранении и восстановлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:03 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. также выдает то же самое исключение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:19 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, сохраниться-то перед восстановлением удалось с параметром? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:42 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Я Вас не понял, извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:52 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Вы, наверное, не поняли мою проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:53 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11Я Вас не понял, извините. Удалось ли вызвать Код: pascal 1. Перед восстановлением Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:05 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11Вы, наверное, не поняли мою проблему. Да как же тебя понять, коли ты ничего не говоришь? (c) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:07 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
LayoutSaver, так Container сказали же не трогать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:37 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
если сделать так: Код: pascal 1. 2. т.е. вызвать LayoutControl.Container.StoreToRegistry(); предварительно, то ошибки НЕ возникает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:41 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11 Код: pascal 1. 2. т.е. вызвать LayoutControl.Container.StoreToRegistry(); предварительно , то ошибки НЕ возникает "Предварительно", т.е. непосредственно перед "ReStore"? Зачем вообще тогда "ReStore" делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:59 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
как зачем? а как ВОССТАНОВИТЬ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:13 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, ты читаешь внимательно? Значение слова "непосредственно" понятно? автор"Предварительно", т.е. непосредственно перед "ReStore"? Зачем вообще тогда "ReStore" делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:26 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Значение слова - понятно. Тебя - непонятно. Ты знаешь способ восстановить настройки LayoutControl? Дай пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:34 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Документация? Не, не слышали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:40 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, Пример не дам, т.к. слишком много в нем лишнего. Но у меня устроено так. Думаю, что с registry тоже прокатит. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:50 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Короче пример давай. Или в саппорт или сюда. А то так долго телепатировать можно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:50 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
JaDiДокументация? Не, не слышали. при вызове Restore то же ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:52 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
white_niggerКороче пример давай. Или в саппорт или сюда. А то так долго телепатировать можно... http://files.d-lan.dp.ua/download?file=0398c46b481914d5826fa572a9422f12#uploader Сделайте так: Запустите программу и нажмите кнопку, затем закройте окно, чтобы данные о LayoutControl записались в реестр при закрытии окна. А теперь нажмите кнопку, чтобы создать и открыть первый экземпляр окна, а затем ещё раз, чтобы - второй экземпляр. Если не получится, то закройте программу, затем откройте программу и нажмите кнопку дважды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:09 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, rar не открывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:16 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Use winrar 5, Luke ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:21 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
завтра гляну - как время найду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 17:32 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, У меня с отмеченными изменениями работает Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 09:50 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Так написали же Вам, что использовать Container - не комильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 10:19 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, Ну, кому-то, может, и не комильфо, а меня устраивает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 10:30 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
LayoutSaver, Там, собственно, проблема в том, что без указания StoreName компонент сохраняется с привязкой к имени овнера. Когда начинаешь восстанавливать из такого сохранения компонент, привязаный к овнеру с другим именем, возникает твоя ошибка. А StoreName можно указать только при сохранении через методы контейнера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 10:37 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Ладно, ждём, что сообщит на white_nigger. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 10:49 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Скомпилил пример в сиэттле, нормально нажимается на кнопку хоть пять раз. Запускал несколь раз. Что я должен был увидеть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 11:56 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
white_nigger, перед тем как второй раз на кнопку жамкать, ты первое окошко закрыть успел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 12:03 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
white_niggerСкомпилил пример в сиэттле, нормально нажимается на кнопку хоть пять раз. Запускал несколь раз. Что я должен был увидеть? в архиве есть скомпилированный проект, который выдает: Class TdxLayoutControlContainer not found. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 12:06 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Забыл дописать: DXE3 + Dev 2016.1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 12:17 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
оказывается закрывать не надо было... посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 13:18 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю, ты хочешь сделать один паттерн в реестре, на основе которого будут выглядеть все клоны, по принципу "кто последний записал /color]- тот отец". В этом случае тебе надо принудительно указывать сохраненный объект, и действительно юзать контейнер. Что-то вроде: Код: 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. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:17 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Спасибо, сейчас попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:25 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
тогда правильней так сделать? PatternLayout := LayoutControl.Owner.ClassName + '.' + LayoutControl.Name; Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Форм (классов) разных несколько: форма редактирования, форма параметров поиска, главная форма, ещё какая-то форма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:35 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Немного удивлён, что после StoreToRegistry() надо вызывать Store. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:37 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Ошибок не получил. Работает. Спасибо большое всем, кто помогал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:41 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, вот тебе и вся кошерность :))white_nigger действительно юзать контейнер. [/src]еще маленький совет. не сохраняй лайоут на автомате. или, по крайней мере, сделай галочку "сохранять/не сохранять лайоут". PS после StoreToRegistry() НЕ надо вызывать Store. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:43 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11Немного удивлён, что после StoreToRegistry() надо вызывать Store.Не надо. Это я из твоего кода выкинуть забыл :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:51 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
LayoutSaverне сохраняй лайоут на автомате. Тут прикол в чем: пользователь может свернуть/развернуть группу и это должно сохраниться. Если бы настройки делились на 2 части: 1. Сохранение того, что пользователь менял с помощью дизайнера. 2. Сохранение состояния групп и того, что можно менять без дизайнера. То тогда можно было разделить сохранение/восстановление на 2 части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:55 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
X11, Я о пользователе забочусь. Не каждый хочет ВСЕГДА сохранять лайоут при закрытии формы. А некторые любят каждый раз с чистого листа начинать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 18:08 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Тогда можно сделать цикл по группам и при закрытии формы сохранять состояние: развёрнута/свёрнута. А сам лейаута сохранять только по кнопке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2016, 18:26 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
У меня опять проблема с сохранением в стрим. Решил довести до ума: обернуть всё в класс и, т.к. компонент для сохранения несколько (cxGrid, cxVirticalGrid, dxLayoutControl, dxBarManager), но у всех есть SaveToStream, то и процедуры сохранения можно все отдельные сделать в виде одной, но при этом код сохранения в стрим вынести в отдельную процедуру. Всё сделал, но появилась проблема: dxLayoutControl хоть и сохраняется в базу и загружается из базы без ошибок, но он пустой после восстановления и базы, т.е. все элементы попадают в "Доступные элементы", поэтому невидимы. На сколько я понимаю, то какие-то проблемы с типами классов. Всё сделал на уровне TComponent, чтобы были свойства Parent, Owner и Name.Т.е. в главную процедуру передаю TComponent в виде параметра: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И вот тут-то я обратил внимание, что структура(содержимое) блоб-поля в базе отлична от старого. Вот, чтобы визуально было понятно: Я решил проэкспериментировать и сделал для dxLayoutControl отдельную процедуру, где передавал именно TdxLayoutControl в качестве параметра, а не TComponent и проблема ушла. Т.е. проблема таилась в типе класса передаваемого параметра? С остальными компонентами не тестировал. Собственно вопрос. Чтобы не городить огород с разными процедурами, где будут разные типы входящего параметра, как бы сделать так, чтобы все эти типы (компоненты): cxGrid, cxVirticalGrid, dxLayoutControl, dxBarManager нормально сохранялись в стрим и восстанавливались? Ведь на 99% процедуры для сохранения, например, сетки cxGrid и BarManager похожи. Может быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 11:47 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
В одном случае был layout, а в другом layout.container -- вот и причина. Лично я использую overload и разные параметры на входе специально под разные компоненты... а внутри тот самый is... Причем надо понимать, что настройки сохраняются не все и часть данных отсутствует. Или сохранять надо только определенные вещи. В этом случае как раз и можно добавить доп поля для сохранения-загрузки типа настройки ширина панели, режима отображения или цвета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 12:04 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
JaDiВ одном случае был layout, а в другом layout.container -- вот и причина. Нет. Я уже переделал всё без контейнера, как и советовал white_nigger. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 12:24 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
JaDiЛично я использую overload Ну так текст процедур на пример 90% одинаковый. Т.е. если что-то нужно поменять, то нужно менять у 4-6 процедур. А легче и быстрей же в одной. Какую-то пропустил и вуаля... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 12:27 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
JaDiа в другом layout.container -- вот и причина. там, где правильная запись на картинке, там всё равно используется сохранение без контейнера: dxLayoutControl.SaveToStream(stream); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 12:28 |
|
||
|
dxLayoutControl RestoreFromRegistry
|
|||
|---|---|---|---|
|
#18+
Хорошо было бы, если бы у компонент типа dxBarManager, cxGrid, cxVerticalGrid, dxLayoutControl было бы какое-нибудь событие или свойство, касающееся изменения настроек, а не данных. Чтобы сохранять или предлагать пользователю сохранить настройки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 12:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040428]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
62ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 394ms |

| 0 / 0 |
