x11 Posted April 29, 2020 Share Posted April 29, 2020 У некоторых компонентов-контейнеров, типа TUniFieldSet есть свойство Collapsible, что весьма удобно. Пользователь может свернуть/развернуть контейнер. Но нет свойства Collapsed, которое бы отвечало за состояние панели и которое можно было бы менять программно. Если пользователь свернул контейнер TUniFieldSet и закрыл окно, то он ожидает, что при следующем открытии окна этот контейнер будет свернут. Другими словами, контейнерам не хватает свойства Collapsed, чтобы программно управлять панелью. Чтобы при открытии окна, указать UniFieldSet1.Collapsed := False; Такое свойство есть у TUniPanel. Quote Link to comment Share on other sites More sharing options...
stas Posted April 29, 2020 Share Posted April 29, 2020 procedure TMainForm.UniFormCreate(Sender: TObject); begin UniFieldSet1.JSInterface.JSConfig('collapsed',[true]); end; Quote Link to comment Share on other sites More sharing options...
x11 Posted April 29, 2020 Author Share Posted April 29, 2020 Ещё раз спрошу. Как при закрытии окна/фрейма узнать состояние контейнера: свернут или нет? Quote Link to comment Share on other sites More sharing options...
stas Posted April 29, 2020 Share Posted April 29, 2020 ajaxRequest(O1B,'checkCollapsed',['collapsed='+O1B.collapsed]); where O1B= UniFieldSet.jsName; 1 Quote Link to comment Share on other sites More sharing options...
x11 Posted April 29, 2020 Author Share Posted April 29, 2020 2 hours ago, stas said: where O1B= UniFieldSet.jsName; а это что? Quote Link to comment Share on other sites More sharing options...
stas Posted April 29, 2020 Share Posted April 29, 2020 Это мне лень было переключаться на другой язык. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 29, 2020 Author Share Posted April 29, 2020 Вот видишь, поленился и пришлось писать еще одно сообщение Quote Link to comment Share on other sites More sharing options...
x11 Posted April 30, 2020 Author Share Posted April 30, 2020 У TUniFieldSet нет метода ajaxRequest. Можешь дать более менее понятный пример? Я так и недопонял, что подставлять вместо O1B? Просто UniFieldSet1? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 30, 2020 Share 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 Link to comment Share on other sites More sharing options...
x11 Posted May 5, 2020 Author Share Posted May 5, 2020 Т.е. в событиях закрытия и создания TUniForm/TUniFrame никак не получится? Я к тому, что вариант с событиями UniFieldSet.ClientEvents.ExtEvents весьма неудобный. Например, на форме лежит -10-20 компонент типа TUniFieldSet. И у всех нужно заполнить это событие. Где-то ошибся и всё исправляй, переписывай. Поэтому я ещё раз обращаюсь к авторам UniGUI. Не соблаговолите ли вы добавить в VCL свойство collapsed, чтобы его можно было читать и изменять. Quote Link to comment Share on other sites More sharing options...
x11 Posted July 30, 2020 Author Share Posted July 30, 2020 up Quote Link to comment Share on other sites More sharing options...
x11 Posted April 28, 2021 Author Share Posted April 28, 2021 On 4/30/2020 at 11:51 AM, Sherzod said: function beforecollapse Подскажите, а какое свойство использовать у unimPanel? Нужно выловить момент разворачивания панели. Было бы здорово, если бы в VCL добавили эти события. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 28, 2021 Share Posted April 28, 2021 4 minutes ago, x11 said: unimPanel beforecollapse имеете в виду? Quote Link to comment Share on other sites More sharing options...
x11 Posted April 28, 2021 Author Share Posted April 28, 2021 Да, чтобы у знать, что пользователь развернул панель. Чтобы после разворачивания панели можно было там что-то сделать, например, наполнить списки или еще что-то. А после сворачивания очистить списки за ненадобностью. beforeCollapse + beforeExpand Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 28, 2021 Share 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 Link to comment Share on other sites More sharing options...
x11 Posted April 28, 2021 Author Share Posted April 28, 2021 Не 12 minutes ago, Sherzod said: beforecollapse т.е. для того, чтобы поймать момент разворачивания, мне нужно заменить на beforExpand? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 28, 2021 Share 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 Link to comment Share on other sites More sharing options...
Sherzod Posted April 28, 2021 Share Posted April 28, 2021 3 minutes ago, x11 said: чтобы поймать момент разворачивания, мне нужно заменить на beforExpand? Да. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 28, 2021 Author Share Posted April 28, 2021 Спасибо. Вроде получилось. Quote Link to comment Share on other sites More sharing options...
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.