Jump to content

Не работает событие AlignPosition у uniFieldContainer


x11

Recommended Posts

Во фрейме есть несколько контейнеров TuniFieldContainer. Layout построен на Border.

Т.е. пользователь может менять размеры контейнеров мышкой. Но на бэкэнде как узнать новый размер контейнера, чтобы сохранить ширину или высоту. И чтобы при следующем сеансе восстановить те размеры, которые установил для себя пользователь.

Link to comment
Share on other sites

На данный момент, думаю Вы можете установить общий обработчик для всех панелей на контейнере.

procedure TMainForm.UniPanel1Resize(Sender: TUniControl; OldWidth,
  OldHeight: Integer);
begin
  oldWidth
  OldHeight
  (Sender as TUniPanel).Name
end;

 

Link to comment
Share on other sites

Поймите, проблема не в этом конкретном событии.

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

Link to comment
Share on other sites

14 minutes ago, x11 said:

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

Понимаю. Но, с другой стороны, это и есть Client-side alignment. 

Link to comment
Share on other sites

Хорошо, тогда как в onResize назначить новые размеры?

код в этом событии не работает

  (Sender as TuniPanel).Width := (Sender as TuniPanel).Width;

 

код тоже не работает:

uniPanel1.Width := (Sender as TuniPanel).Width;

 

Link to comment
Share on other sites

Смотрите какая ситуация.

На форме три панели, я их обвел красным.

Пользователь тянет за воображаемый сплиттер влево, я его обозначил синим.

По идее меняется размер левой (первой) панели, но код:

procedure TfrdAppSettings.pnlSysfilesLeftResize(Sender: TUniControl; OldWidth, OldHeight: Integer);
begin
  UniMainModule.StoreRestore.StorePropertiesToDB(self, Sender as TuniPanel, constWidth);// сохранить в базу размер


  ShowMessage((Sender as TuniPanel).Name);


end;

показывает имя средней панели.

Тогда как получить новую ширину левой панели?

Т.е. получается, что у левой панели (LayoutConfig.Region := west) событие Resize никогда не срабатывает.

Screenshot_27.jpg

Link to comment
Share on other sites

1 hour ago, Sherzod said:
Clientside Alignment - Layout Border

 

берем ваш пример, добавляем код

procedure TMainForm.UniPanel1Resize(Sender: TUniControl; OldWidth, OldHeight: Integer);
begin
  ShowMessage((Sender as TuniPanel).Name);
end;

 

Вопрос. Как узнать новые размеры UniPanel1?

Screenshot_28.jpg

Link to comment
Share on other sites

3 hours ago, x11 said:

И чтобы при следующем сеансе восстановить те размеры, которые установил для себя пользователь.

Есть одно решение на основе stateful (CookieProvider).

Link to comment
Share on other sites

14 hours ago, Sherzod said:

Есть одно решение на основе stateful (CookieProvider).

Вы не поняли. Я не прошу решения, как хранить и восстанавливать размеры.

Я не могу получить размеры измененной панели. Событие просто не срабатывает.

Как это сделать?

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...