Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Узнать размер TcxPopupEditPopupWindow / 22 сообщений из 22, страница 1 из 1
16.09.2018, 14:20
    #39703085
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm1.ClosePopupEdit(ParentControl: TWinControl; cxVerticalGrid: TcxVerticalGrid);
Var
  PopupWnd: TcxPopupEditPopupWindow;
begin
  PopupWnd := TcxPopupEditPopupWindow(ParentControl);
  PopupWnd.ClosePopup;
  label1.Caption := PopupWnd.PopupHeight.ToString;
end;



PopupWnd.PopupHeight возвращает 0 (ноль).

Задача простая. Узнать размеры всплывающего окна, чтобы запомнить их при закрытии формы и при создании - восстановить.
...
Рейтинг: 0 / 0
16.09.2018, 18:43
    #39703135
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
X11PopupWnd.PopupHeight возвращает 0 (ноль).
А PopupWnd.Height ?
...
Рейтинг: 0 / 0
16.09.2018, 18:48
    #39703137
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
PopupWnd.Height возвращает 0
PopupWnd.Width возвращает -1
...
Рейтинг: 0 / 0
16.09.2018, 18:54
    #39703138
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Несколько раз проверил процедуру ClosePopupEdit(), ну т.е. несколько раз открыл и закрыл всплывающее окно, постоянно меняя его размер, в общем, там есть значения у PopupWnd.PopupHeight/PopupWidth, но они там какие-то левые, вернее, там значения от предыдущего размера.
Т.е. чтобы узнать размер, нужно 2 раза открыть и закрыть окно.
Надеюсь, понятно объяснил.
...
Рейтинг: 0 / 0
16.09.2018, 19:33
    #39703151
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Привет.

А что содержит PopupWnd.ClientRect и PopupWnd.ViewInfo?
В смысле, PopupWnd.ViewInfo.Bounds и PopupWnd.ViewInfo.ClientRect?

Еще можно воспользоваться GetWindowPlacement/SetWindowPlacement.

P.S. Проверить свой совет смогу только завтра, на работе.

С уважением, Polesov.
...
Рейтинг: 0 / 0
16.09.2018, 20:11
    #39703165
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
X11,

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

Напомню, что высота попапа динамическая и зависит от количества записей и разрешенного количество для показа (если это комбобокс).
...
Рейтинг: 0 / 0
16.09.2018, 20:17
    #39703168
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
PolesovА что содержит PopupWnd.ClientRect

В момент свёртывания вроде бы то, что доктор прописал. Потому что там правильный родитель:
Код: pascal
1.
ClosePopupEdit(cxGroupBox1.Parent, cxVerticalGrid1);


т.е. здесь в качестве cxGroupBox1. Parent правильная компонента.




А вот в момент закрытия формы, когда нужно сохранить настройки в базу, не ме могу понять, что сюда правильно передать:
Код: pascal
1.
PopupWnd := TcxPopupEditPopupWindow(?);


если подставляю cxGroupBox1.Parent, то в качестве родителя выступает уже сама форма TForm1, а не всплывающее окно вертикальной сетки.

Кстати, таких проблем нет, если TcxPopupEdit, как самостоятельная отдельная компонента лежит на форме.
С cxGrid`ом не экспериментировал.
...
Рейтинг: 0 / 0
16.09.2018, 20:19
    #39703169
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
JaDiНапомню, что высота попапа динамическая и зависит от количества записей и разрешенного количество для показа (если это комбобокс).

У меня во всплывающем окне лежит cxGroupBox, а в нём уже другие компоненты, т.е. такая себе мини-форма с таблицей/деревом и кнопками.
...
Рейтинг: 0 / 0
16.09.2018, 20:23
    #39703172
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
X11,

т.е. при попапе групбокс не помещается и его надо подобрать под ширину попапа, который всплывает в полях с разной шириной. Верно?
...
Рейтинг: 0 / 0
16.09.2018, 20:26
    #39703177
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Нет, с размерами там всё норм - попап нормально подстраивает под себя cxGroupBox.

Нужно при закрытии окна (TForm) сохранить те размеры всплывающего окна (попапа), которые пользователь установил и при открытии окна, соответственно, восстановить размеры попапа.
...
Рейтинг: 0 / 0
16.09.2018, 20:40
    #39703185
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
На событии Properties.CloseUp можно получить ширину окна через popupEdit.PopupWindow.Width
...
Рейтинг: 0 / 0
16.09.2018, 20:41
    #39703187
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
JaDi,

т.е. сохранять данные по контролу во временное значение, а когда вся форма закроется -- сохранять уже в базу (или куда там идут эти настройки).
...
Рейтинг: 0 / 0
16.09.2018, 20:54
    #39703191
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
JaDiНа событии Properties.CloseUp можно получить ширину окна через popupEdit.PopupWindow.Width

ну это я понял, но хотелось при закрытии окна...
осталось понять, как правильно восстановить размеры всплывающего попапа
...
Рейтинг: 0 / 0
16.09.2018, 20:57
    #39703192
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
X11,

при закрытии окна попап был давно уже уничтожен... Даже если окно закрывается, когда этот попап показывается -- ничего не мешает проверить этот момент и если попап активен, то брать значение не из последнего сохраненного, а прямо из него.
...
Рейтинг: 0 / 0
16.09.2018, 21:13
    #39703199
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Вот код, который сохраняет и восстанавливает ширину попапа (с использованием доп хака для обновления окна):

Код: 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.
40.
41.
42.
43.
type
  TForm11 = class(TForm)
    cxPopupEdit2: TcxPopupEdit;
    Panel1: TPanel;
    cxMemo1: TcxMemo;
    cxEditRepository1: TcxEditRepository;
    EditRepository_PopupEditor: TcxEditRepositoryPopupItem;
    cxDBVerticalGrid1: TcxDBVerticalGrid;
    dxMemData1: TdxMemData;
    dxMemData11: TStringField;
    dxMemData12: TStringField;
    DataSource1: TDataSource;
    cxDBVerticalGrid1DBEditorRow1: TcxDBEditorRow;
    procedure EditRepository_PopupEditorPropertiesCloseUp(Sender: TObject);
    procedure cxPopupEdit2PropertiesPopup(Sender: TObject);
  private
    LastPopupWidth: Integer;
  public
  end;

  // hack to access popup refresh method
  TcxPopupWindowAccess = class(TcxCustomEditPopupWindow);

var
  Form11: TForm11;

implementation

{$R *.dfm}

procedure TForm11.cxPopupEdit2PropertiesPopup(Sender: TObject);
begin
  // restore popup size
  (Sender as TcxPopupEdit).PopupWindow.Width := LastPopupWidth;
  TcxPopupWindowAccess((Sender as TcxPopupEdit).PopupWindow).RefreshPopupWindow;
end;

procedure TForm11.EditRepository_PopupEditorPropertiesCloseUp(Sender: TObject);
begin
  // save popup size
  LastPopupWidth := (Sender as TcxPopupEdit).PopupWindow.Width;
  cxMemo1.Lines.Add('w = ' + LastPopupWidth.ToString());
end;
...
Рейтинг: 0 / 0
16.09.2018, 21:15
    #39703200
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Не приложилась гифка:

...
Рейтинг: 0 / 0
17.09.2018, 12:51
    #39703524
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
JaDi
Код: pascal
1.
(Sender as TcxPopupEdit).PopupWindow.Width := LastPopupWidth;



Cannot access protected symbol TcxCustomDropDownEdit.PopupWindow
...
Рейтинг: 0 / 0
17.09.2018, 13:52
    #39703605
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
X11JaDi
Код: pascal
1.
(Sender as TcxPopupEdit).PopupWindow.Width := LastPopupWidth;



Cannot access protected symbol TcxCustomDropDownEdit.PopupWindow

Значит более новая версия девок. Можно вот так попробовать:
TcxPopupWindowAccess((Sender as TcxPopupEdit)).PopupWindow.Width := LastPopupWidth;
...
Рейтинг: 0 / 0
17.09.2018, 15:48
    #39703715
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Undeclared identifier: 'PopupWindow'


...
Рейтинг: 0 / 0
17.09.2018, 15:56
    #39703722
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
X11,

значит где-то косяк... TcxPopupWindowAccess = class(TcxCustomEditPopupWindow) надо в интерфейсной части объявлять.
...
Рейтинг: 0 / 0
17.09.2018, 16:06
    #39703731
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
посмотрел в исходниках, как объявлен " TcxCustomEditPopupWindow = class(TdxCustomIncrementalFilteringPopupWindow)"

там свойства PopupWindow вообще нет
...
Рейтинг: 0 / 0
17.09.2018, 16:10
    #39703734
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать размер TcxPopupEditPopupWindow
Такс..... вот так работает
Прямо при создании формы
Код: pascal
1.
2.
3.
4.
5.
//читаем из базы в PopupRectRegions
...
...
    TcxPopupEditProperties(rowRegion.Properties.EditProperties).PopupHeight := PopupRectRegions.h;
    TcxPopupEditProperties(rowRegion.Properties.EditProperties).PopupWidth  := PopupRectRegions.w;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Узнать размер TcxPopupEditPopupWindow / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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