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

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Предисловие.
Все, кто пользуется DevExpress, знают, что есть, например, у cxVerticalGrid или у cxGrid колонки, где можно указать разный тип в свойстве EditProperties. Например, можно указать PopupEdit или ComboBox.

Есть процедура сохранения и восстановления свойств указанной компоненты через stream в базу/из базы (BLOB).
Со статичными свойствами проблем нет, а с вышеописанными (EditProperties) - проблема: они просто не восстанавливаются.

В базе вижу, что сохраняется.
Картинка с другого сайта.

Вижу, что достаётся из базы правильное значение, но значение не восстанавливается.
Свойство PopupAutoSize отключено (False).

процедура сохранения:
//передаём rowType строку вертикальной сетки
// у rowType свойство EditProperties = PopupEdit
StorePropertiesStream(self, rowType, VarArrayOf(['Properties.EditProperties.PopupWidth', 'Properties.EditProperties.PopupHeight']));


procedure StorePropertiesStream(const Form: TForm; const AComponent: TComponent; const AProps: TStrArray);
Var
 i: integer;
 cxPropertiesStore1: TcxPropertiesStore;
 q: TpFibQuery;
 stream: TMemoryStream;
begin
// создем q: TpFibQuery и заполняем SQL


  cxPropertiesStore1 := TcxPropertiesStore.Create(Application);
  stream := TMemoryStream.Create;
  try
    cxPropertiesStore1.StorageName := Form.ClassName;
    cxPropertiesStore1.StorageType := stStream;

    with TcxPropertiesStoreComponent(cxPropertiesStore1.Components.Add) do
    begin
      Component := AComponent;
      for I := 0 to Length(AProps) - 1 do
        Properties.Add(AProps[i]);
    end;//with

     cxPropertiesStore1.StorageStream := Stream;
     cxPropertiesStore1.StoreTo;
...
...
...
q.ExecQuery;


Ошибок во время компиляции и исполнения нет.
Delphi Tokyo.
5 сен 18, 11:37    [21665289]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
А тип восстанавливается правильно ?
5 сен 18, 12:21    [21665419]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
А тип прописан жёстко. Я же его во время design-time указываю.
5 сен 18, 12:27    [21665434]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Может где-то нужны какие-то спец. манипуляции с приведением типов (TcxPopupEditProperties)?
5 сен 18, 13:20    [21665566]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Процедура восстановления

procedure RestorePropertiesStream(const Form: TForm; const AComponent: TComponent; const AProps: TStrArray);
Var
 i: integer;
 cxPropertiesStore1: TcxPropertiesStore;
 q: TpFibQuery;
 stream: TMemoryStream;
begin
  // создем q: TpFibQuery и заполняем SQL

  cxPropertiesStore1 := TcxPropertiesStore.Create(Application);
  stream := TMemoryStream.Create;
  try
    cxPropertiesStore1.StorageName := Form.ClassName;
    cxPropertiesStore1.StorageType := stStream;

    with TcxPropertiesStoreComponent(cxPropertiesStore1.Components.Add) do
    begin
      Component := AComponent;
      for I := 0 to Length(AProps) - 1 do
        Properties.Add(AProps[i]);
    end;//with

    try
...
...
      q.ExecQuery;
      q.FieldByName('STREAM').SaveToStream(stream);

      if stream.Size > 0 then
      begin
        stream.Position := 0;
        cxPropertiesStore1.StorageStream := Stream;
        cxPropertiesStore1.RestoreFrom;
      end;
...
...

проверил stream.Size - всегда больше 0
5 сен 18, 13:25    [21665583]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Что могу сказать ? F7 тебе в помощь
5 сен 18, 15:50    [21665895]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Какой-то баг, наверное.
Выполняю при создании формы:
    TcxPopupEditProperties(rowRegion.Properties.EditProperties).PopupWidth := gbRegions.Width;
    TcxPopupEditProperties(rowRegion.Properties.EditProperties).PopupHeight := gbRegions.Height;

Но всё равно popup всплывает того размера, который был задан в design-time

Т.е. я в качестве настроек высоты и ширины храню непосредственно настройки компоненты, которая выступает в качестве визуального элемента, в данном случае cxGroupBox.
12 сен 18, 13:23    [21672075]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
А если в OnInitPopup ?
12 сен 18, 13:44    [21672113]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Всё равно всплывает установленный во время дизайна размер :(
12 сен 18, 13:55    [21672129]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Properties.PopupAutoSize
12 сен 18, 14:15    [21672179]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
я об этом написал в самом начале

X11
Свойство PopupAutoSize отключено (False).
12 сен 18, 14:32    [21672218]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Картинка с другого сайта.
12 сен 18, 14:43    [21672238]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
DimaBr, когда открыл попап, поменял размер и закрыл, то если его открыть снова - проблемы нет.
Проблема именно после создания формы и самого попапа.
12 сен 18, 14:47    [21672249]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Картинку видишь ? ни строчки кода
12 сен 18, 14:49    [21672257]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
вижу, и что? не понял вопроса
12 сен 18, 15:18    [21672299]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
DimaBr, в том-то и дело.
Ты программно присвой высоту и ширину, т.е. не в дизайне.
12 сен 18, 15:49    [21672360]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Картинка с другого сайта.
12 сен 18, 16:02    [21672389]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
При чем здесь cxPopupEdit? Речь о cxVerticalGrid с соответствующей строкой.
12 сен 18, 16:05    [21672397]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3663
X11,

У гридов не сохраняются настройки полей/колонок типа формата -- только те, что визуально видны и доступны пользователю для изменений, поэтому надо через кастомные свойства делать. Вот тут техподдержка подсказывает как:
https://www.devexpress.com/Support/Center/Question/Details/T300811/the-storetostream-method-does-not-save-column-s-format-properties

автор
This behavior is described in the "TcxCustomGridView.StoreToStream" help topic:
"... include only those settings that can be adjusted by end-users: the position, size, and visibility within a View, sort order, etc."

In other words, if you customize some additional settings in code, you need to store their values manually. You can use the following column events to store custom properties:

OnGetStoredProperties;
OnGetStoredPropertyValue;
OnSetStoredPropertyValue.
12 сен 18, 16:10    [21672413]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Я не сохраняю настройки cxVerticalGrid`а.
Мне нужно сохранить и восстановить ширину и высоту выпадающего окна, которое встроено в EditProperties строки.
12 сен 18, 16:17    [21672430]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3663
X11,

EditProperties пересоздаются каждый раз по новой при начале редактирования или отрисовки... Их вообще никак нельзя менять "через строку", есть спец события, когда это можно делать.
12 сен 18, 16:19    [21672437]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3663
JaDi,

Точнее, пересоздаются контролы на основе этих настроек, поэтому их нельзя прямым доступом менять.
12 сен 18, 16:20    [21672440]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
12 сен 18, 16:36    [21672462]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3663
X11,

OnGetProperties (или как-то так у колонки) -- вот там и можно менять на нужные настройки... Либо сделать несколько готовых, либо генерировать список этих пропертией в отдельный список перед загрузкой данных и из него назначать уже на событии (будет нормально работать, если записей немного).
12 сен 18, 16:42    [21672473]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Всё равно не понимаю, ЧЯДНТ
Картинка с другого сайта.
12 сен 18, 23:08    [21672878]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
И даже так
Картинка с другого сайта.
12 сен 18, 23:15    [21672881]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
DimaBr
И даже так
13 сен 18, 09:26    [21673099]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Скопировал вертикальную сетку в новый чистый проект - проблема ушла.
**Ищу проблему в текущем проекте :(
13 сен 18, 10:11    [21673145]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Прежде чем ГОЛОСИТЬ, нужно проверить на пустом проекте, на тестовом примере
13 сен 18, 10:42    [21673187]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Проблема в том, что я не нахожу проблему в текущем проекте.
Я добавил в текущем проекте новую строку в VerticalGrid и привязал к этой строке тот же GroupBox и здесь проблема... даже с новой строкой.
13 сен 18, 11:27    [21673259]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
TcxPopupEditProperties(vgClientsAddEditorRow1.Properties.EditProperties).PopupWidth    := gbRegions.Width;
    TcxPopupEditProperties(vgClientsAddEditorRow1.Properties.EditProperties).PopupHeight   := gbRegions.Height;


вот в чем проблема... я задаю значения не жёстко цифрами, а беру значения у gbRegions, gbRegions заранее подстраивается под размеры строки vgClientsAddEditorRow1 с popup`ом.
13 сен 18, 11:31    [21673270]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
DimaBr
Member

Откуда:
Сообщений: 10664
Может в gbRegions не те значения ?
13 сен 18, 11:38    [21673280]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
DimaBr, ну вот да, получается, что не те :(
Не хотелось заводить какие-то новые переменные или объекты для хранения ширины и высоты.

Т.е. перед сохранением придётся получить в отдельные переменные выоту и ширину и сохранить их, а потом считать из базы в эти переменные и присвоить ширине и высоте.
13 сен 18, 13:31    [21673488]     Ответить | Цитировать Сообщить модератору
 Re: TcxPropertiesStore и динамические свойства Properties.EditProperties  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12247
Ещё один сюрприз.
i := TcxPopupEditProperties(rowRegion.Properties.EditProperties).PopupHeight;

PopupHeight возвращает 0

а привязанный к Popup`у GroupBox всегда возвращает свой начальный размер, хоть на всю форму его растягивай
13 сен 18, 15:15    [21673705]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить