Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TdxLayoutControl.SaveToStream сохраняет имя формы :( / 25 сообщений из 40, страница 1 из 2
23.01.2019, 15:57
    #39763614
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Проблема в том, что одна и та же форма создается несколько раз и с разными именами. Например форма просмотра или редактирования товара может быть открыта пользователем 2-3-5 раз.
Предисловие.

К примеру, вот так она объявлена:
Код: pascal
1.
TfmEdit = class(TForm)



перед implementation удалена строка
Код: pascal
1.
2.
Var
fmEdit : TfmEdit;// нет этой строки


но есть процедура, которая создает форму
Код: pascal
1.
2.
3.
4.
procedure CallEditForm(id: integer);
...
....
fmEdit := TfmEdit.Create(fmMain);



В итоге создаётся несколько форм с именами "fmEdit", "fmEdit_1", "fmEdit_2", "fmEdit_3" и т.д.

Я посмотрел, что сохраняет метод dxLayoutControl1.SaveToStream(stream).
Там сохраняется "fmEdit.dxLayoutControlFrmAdd".
Т.е. получается, что когда восстанавливается форма "fmEdit_1", то она оказывается пустая.

Как заставить TdxLayoutControl не обращать внимание на имя формы при сохранении или при загрузке?
Данные сохраняюся в стрим и далее в базу.

Спасибо.
...
Рейтинг: 0 / 0
23.01.2019, 16:01
    #39763618
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Или как заставить использовать что-то своё вместо имени?
Например, вместо имени fmEdit, чтобы использовался класс TfmEdit. Ведь класс у всех одинаковых форм один и тот же.
...
Рейтинг: 0 / 0
23.01.2019, 16:03
    #39763623
Гирлионайльдо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
А ты не создавай новую форму, если уже переменная fmEdit определёна
...
Рейтинг: 0 / 0
23.01.2019, 16:17
    #39763641
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Это не обсуждается.
Пользователь хочет открыть 2 разных товара на форме просмотра.
...
Рейтинг: 0 / 0
23.01.2019, 16:20
    #39763644
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
тут есть решение
https://www.devexpress.com/Support/Center/Question/Details/Q350646/how-to-exclude-form-name-in-tdxlayoutcontrol-savetoinifile

но существующие, записанные в базу данные уже нельзя будет использовать


т.е. теперь в базу нужно сохранять всё заново :(
Код: pascal
1.
LayoutControl.Container.StoreToStream(stream, LayoutControl.Name);



и пересоздавать всё то, что пользователь "надизайнил" с формами
...
Рейтинг: 0 / 0
23.01.2019, 16:28
    #39763661
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
X11
Код: pascal
1.
2.
3.
4.
procedure CallEditForm(id: integer);
...
....
fmEdit := TfmEdit.Create(fmMain);


Попробуй в конце процедуры создания сам переименовывать название формы уникальным инкрементным именем.
...
Рейтинг: 0 / 0
23.01.2019, 16:34
    #39763672
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
так в том-то и дело, что имя должно быть не уникальным
...
Рейтинг: 0 / 0
23.01.2019, 16:37
    #39763674
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
...
Рейтинг: 0 / 0
23.01.2019, 16:40
    #39763677
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
X11так в том-то и дело, что имя должно быть не уникальным
Поменять имя формы на уникальное уже ПОСЛЕ загрузки настроек.
...
Рейтинг: 0 / 0
23.01.2019, 16:46
    #39763683
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Т.е. создать вторую форму с именем fmEdit, загрузить настройки, а потом переименовать?
...
Рейтинг: 0 / 0
23.01.2019, 16:46
    #39763684
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Эхх...
Юзай dxLayoutControl1.Container.StoreToIniFile/RestoreFromIniFile
Последним параметром укажешь нужное имя X11"fmEdit", "fmEdit_1", "fmEdit_2", "fmEdit_3" и т.д.
...
Рейтинг: 0 / 0
23.01.2019, 16:50
    #39763686
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
white_nigger,

это я уже понял, но в этом проблема :(
X11пересоздавать всё то, что пользователь "надизайнил" с формами

нельзя использовать существующие наработки
...
Рейтинг: 0 / 0
23.01.2019, 16:59
    #39763696
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
X11нельзя использовать существующие наработкиНе совсем понял. В каком формате сохранены данные? Приведи пример проблемы
...
Рейтинг: 0 / 0
23.01.2019, 17:10
    #39763706
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
В первом сообщении привел.
...
Рейтинг: 0 / 0
23.01.2019, 17:16
    #39763713
Гирлионайльдо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Мне кажется, что структура программы изначально неправильная.Зачем создавать кучу форм??? Для отображения каких то данных

Не легче ли было бы в одной форме, загружать данные с нужного элемента. Типа окно в окне (Panel, и типа такого) которое открыто по середине. И показывает специфики товара и так далее. А область под окном затемнена

Ну если ты выполняешь заказ какого - то, клиента так скажем. То это его не продуманность, что он пошёл корявой дорожкой

Конечно же можно, добавлять товар в сравнения и в этой же форме выводить определённые характеристики как это сделано в яндекс маркете в таблице
...
Рейтинг: 0 / 0
23.01.2019, 17:21
    #39763726
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
X11т.е. теперь в базу нужно сохранять всё заново :(
и пересоздавать всё то, что пользователь "надизайнил" с формами
Добро пожаловать в мир костылей.
...
Рейтинг: 0 / 0
23.01.2019, 17:23
    #39763728
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Я вот что придумал.
В новой версии программы нужно определять, что использовать:
LayoutControl.LoadFromStream()
или
LayoutControl.Container.RestoreFromStream()

т.е. в базу(в таблицу с блобом) нужно добавить новое поле, где будет храниться версия и если версия пустая, то это старая версия данных и там есть имя формы, а значит нужно применять LayoutControl.LoadFromStream(), а если там, например, цифра 1, то это уже новая версия данных без имени формы и нужно применять LayoutControl.Container.RestoreFromStream().
...
Рейтинг: 0 / 0
23.01.2019, 17:23
    #39763729
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
X11В первом сообщении привел.Мать... чем конкретно Container.StoreTo/RestoreFrom не подходит?
...
Рейтинг: 0 / 0
23.01.2019, 17:24
    #39763734
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
А просто проанализировать первые несколько символов стрима не судьба?
...
Рейтинг: 0 / 0
23.01.2019, 17:33
    #39763749
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
white_niggerX11В первом сообщении привел.Мать... чем конкретно Container.StoreTo/RestoreFrom не подходит?

я ж написал: пользователь уже надизайнил формочек, поэтому
Container.RestoreFrom() не загружает то, что было сохранено методом Layout.SaveToStream(stream);
...
Рейтинг: 0 / 0
23.01.2019, 17:34
    #39763751
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
white_nigger, да, тоже уже подумал об этом
...
Рейтинг: 0 / 0
23.01.2019, 17:36
    #39763754
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
По сигнатуре стрима определяй что передавать в LayoutControl.Container.RestoreFromStream в последнем параметре. Его можно применять в обоих случаях.
...
Рейтинг: 0 / 0
24.01.2019, 10:05
    #39764008
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
что такое сигнатура стрима?
...
Рейтинг: 0 / 0
24.01.2019, 11:02
    #39764072
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
X11,

Это и есть первых несколько байтов в потоке. Как у архивов например.
...
Рейтинг: 0 / 0
24.01.2019, 11:15
    #39764089
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxLayoutControl.SaveToStream сохраняет имя формы :(
Т.е. их надо скопировать в StringStream и проверить, если там что-то похожее на имя формы?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TdxLayoutControl.SaveToStream сохраняет имя формы :( / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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