x11 Posted April 29, 2020 Posted April 29, 2020 У некоторых компонентов-контейнеров, типа TUniFieldSet есть свойство Collapsible, что весьма удобно. Пользователь может свернуть/развернуть контейнер. Но нет свойства Collapsed, которое бы отвечало за состояние панели и которое можно было бы менять программно. Если пользователь свернул контейнер TUniFieldSet и закрыл окно, то он ожидает, что при следующем открытии окна этот контейнер будет свернут. Другими словами, контейнерам не хватает свойства Collapsed, чтобы программно управлять панелью. Чтобы при открытии окна, указать UniFieldSet1.Collapsed := False; Такое свойство есть у TUniPanel. Quote
stas Posted April 29, 2020 Posted April 29, 2020 procedure TMainForm.UniFormCreate(Sender: TObject); begin UniFieldSet1.JSInterface.JSConfig('collapsed',[true]); end; Quote
x11 Posted April 29, 2020 Author Posted April 29, 2020 Ещё раз спрошу. Как при закрытии окна/фрейма узнать состояние контейнера: свернут или нет? Quote
stas Posted April 29, 2020 Posted April 29, 2020 ajaxRequest(O1B,'checkCollapsed',['collapsed='+O1B.collapsed]); where O1B= UniFieldSet.jsName; 1 Quote
x11 Posted April 29, 2020 Author Posted April 29, 2020 2 hours ago, stas said: where O1B= UniFieldSet.jsName; а это что? Quote
stas Posted April 29, 2020 Posted April 29, 2020 Это мне лень было переключаться на другой язык. Quote
x11 Posted April 29, 2020 Author Posted April 29, 2020 Вот видишь, поленился и пришлось писать еще одно сообщение Quote
x11 Posted April 30, 2020 Author Posted April 30, 2020 У TUniFieldSet нет метода ajaxRequest. Можешь дать более менее понятный пример? Я так и недопонял, что подставлять вместо O1B? Просто UniFieldSet1? Quote
Sherzod Posted April 30, 2020 Posted April 30, 2020 1 hour ago, x11 said: У TUniFieldSet нет метода ajaxRequest. К примеру: 1. UniFieldSet.ClientEvents.ExtEvents -> beforecollapse, beforeexpand (или же collapse, expand): function beforecollapse(fieldset, eOpts) { ajaxRequest(this, 'checkCollapsed', ['collapsed='+!this.collapsed]); } function beforeexpand(fieldset, eOpts) { ajaxRequest(this, 'checkCollapsed', ['collapsed='+!this.collapsed]); } Или же (лучше) использовать collapse, expand (this.collapsed вместо !this.collapsed)... 2. procedure TMainForm.UniFieldSet1AjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = 'checkCollapsed' then begin // Здесь будет использоваться переменная // Params.Values['collapsed'] // end; end; 1 Quote
x11 Posted May 5, 2020 Author Posted May 5, 2020 Т.е. в событиях закрытия и создания TUniForm/TUniFrame никак не получится? Я к тому, что вариант с событиями UniFieldSet.ClientEvents.ExtEvents весьма неудобный. Например, на форме лежит -10-20 компонент типа TUniFieldSet. И у всех нужно заполнить это событие. Где-то ошибся и всё исправляй, переписывай. Поэтому я ещё раз обращаюсь к авторам UniGUI. Не соблаговолите ли вы добавить в VCL свойство collapsed, чтобы его можно было читать и изменять. Quote
x11 Posted April 28, 2021 Author Posted April 28, 2021 On 4/30/2020 at 11:51 AM, Sherzod said: function beforecollapse Подскажите, а какое свойство использовать у unimPanel? Нужно выловить момент разворачивания панели. Было бы здорово, если бы в VCL добавили эти события. Quote
Sherzod Posted April 28, 2021 Posted April 28, 2021 4 minutes ago, x11 said: unimPanel beforecollapse имеете в виду? Quote
x11 Posted April 28, 2021 Author Posted April 28, 2021 Да, чтобы у знать, что пользователь развернул панель. Чтобы после разворачивания панели можно было там что-то сделать, например, наполнить списки или еще что-то. А после сворачивания очистить списки за ненадобностью. beforeCollapse + beforeExpand Quote
Sherzod Posted April 28, 2021 Posted April 28, 2021 Just now, x11 said: beforeCollapse procedure TMainmForm.UnimFormCreate(Sender: TObject); begin UnimPanel1.JSInterface.JSAddListener('beforecollapse', 'function(){ajaxRequest(this, "checkCollapsed", ["collapsed="+!this.collapsed]);}') end; Quote
x11 Posted April 28, 2021 Author Posted April 28, 2021 Не 12 minutes ago, Sherzod said: beforecollapse т.е. для того, чтобы поймать момент разворачивания, мне нужно заменить на beforExpand? Quote
Sherzod Posted April 28, 2021 Posted April 28, 2021 On 4/30/2020 at 1:51 PM, Sherzod said: function beforecollapse(fieldset, eOpts) { ajaxRequest(this, 'checkCollapsed', ['collapsed='+!this.collapsed]); } function beforeexpand(fieldset, eOpts) { ajaxRequest(this, 'checkCollapsed', ['collapsed='+!this.collapsed]); } Ну, я просто привел код для первого события. Quote
Sherzod Posted April 28, 2021 Posted April 28, 2021 3 minutes ago, x11 said: чтобы поймать момент разворачивания, мне нужно заменить на beforExpand? Да. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.