powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Узнать размер TcxPopupEditPopupWindow
22 сообщений из 22, страница 1 из 1
Узнать размер TcxPopupEditPopupWindow
    #39703085
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Узнать размер TcxPopupEditPopupWindow
    #39703135
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11PopupWnd.PopupHeight возвращает 0 (ноль).
А PopupWnd.Height ?
...
Рейтинг: 0 / 0
Узнать размер TcxPopupEditPopupWindow
    #39703137
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PopupWnd.Height возвращает 0
PopupWnd.Width возвращает -1
...
Рейтинг: 0 / 0
Узнать размер TcxPopupEditPopupWindow
    #39703138
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько раз проверил процедуру ClosePopupEdit(), ну т.е. несколько раз открыл и закрыл всплывающее окно, постоянно меняя его размер, в общем, там есть значения у PopupWnd.PopupHeight/PopupWidth, но они там какие-то левые, вернее, там значения от предыдущего размера.
Т.е. чтобы узнать размер, нужно 2 раза открыть и закрыть окно.
Надеюсь, понятно объяснил.
...
Рейтинг: 0 / 0
Узнать размер TcxPopupEditPopupWindow
    #39703151
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

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

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

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

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

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

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

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


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




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


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

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

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

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

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

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

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

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

Код: 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
Узнать размер TcxPopupEditPopupWindow
    #39703200
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не приложилась гифка:

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



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



Cannot access protected symbol TcxCustomDropDownEdit.PopupWindow

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


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

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

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


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