x11 Posted September 18, 2020 Share Posted September 18, 2020 Хотелось бы дать возможность пользователю сделать мультивыбор. С помощью какой мобильной компоненты это можно реализовать? Link to comment Share on other sites More sharing options...
Sherzod Posted September 18, 2020 Share Posted September 18, 2020 1 hour ago, x11 said: Хотелось бы дать возможность пользователю сделать мультивыбор. С помощью какой мобильной компоненты это можно реализовать? Я проанализирую. Link to comment Share on other sites More sharing options...
Sherzod Posted September 19, 2020 Share Posted September 19, 2020 On 9/18/2020 at 4:21 PM, x11 said: С помощью какой мобильной компоненты это можно реализовать? Добрый день, Вы можете попробовать использовать UnimSelect. 1. UnimSelect1.Picker = dptFloated 2. procedure TMainmForm.UnimFormCreate(Sender: TObject); begin UnimSelect1.JSInterface.JSConfig('multiSelect', [True]) end; 1 Link to comment Share on other sites More sharing options...
x11 Posted September 19, 2020 Author Share Posted September 19, 2020 Спасибо, очень надеюсь, разработчики добавят свойство multiSelect, чтобы его можно было использовать в Диспетчере свойств. 1 Link to comment Share on other sites More sharing options...
x11 Posted September 19, 2020 Author Share Posted September 19, 2020 Ок, заполнить могу так while not qTypes.Eof do begin UnimSelect1.Items.AddObject(qTypesNAME.Value, pointer(qTypesID.Value)); qTypes.Next; end; а как теперь получить значения выделенных строк? Как понять, что та или иная строка выделена? Link to comment Share on other sites More sharing options...
Sherzod Posted September 19, 2020 Share Posted September 19, 2020 Ok, будем анализировать дальше. 1 Link to comment Share on other sites More sharing options...
x11 Posted September 22, 2020 Author Share Posted September 22, 2020 @Sherzod Похожая проблема у TUnimSegmentedButton: свойство Pressed есть у кнопки, но оно не работает. И до сих пор не исправлено? Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 On 9/19/2020 at 5:28 PM, x11 said: а как теперь получить значения выделенных строк? Как понять, что та или иная строка выделена? Добрый день, На данный момент, могу только привести примерное обходное решение, попробуйте. 1. procedure TMainmForm.UnimFormCreate(Sender: TObject); begin with UnimSelect1.JSInterface do begin JSConfig('multiSelect', [True]); JSAddListener('change', 'function(me){ajaxRequest('+ Self.WebForm.JSName +', "selEvents", ["objName="+me.uname, "values="+me.getValue()])}'); end; end; 2. procedure TMainmForm.UnimFormAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = 'selEvents' then begin if FindComponent(Params.Values['objName'])<>nil then begin //(FindComponent(Params.Values['objName']) as TUnimSelect) Переменная := Params.Values['values']; end; end; end; 1 Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 Присвоить значение, примерно так: UnimSelect1.JSInterface.JSCode(#1'.setValue(["3","4","5"]);') 1 Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 On 9/19/2020 at 2:50 PM, Sherzod said: 1. UnimSelect1.Picker = dptFloated Со значением dptFloated удобно тем, что список большой, на пол экрана, галочки видны, но не хватает кнопки OK (Done) для закрытия/подтверждения. Можно ее как-то добавить? Кнопка Done есть у значения dptAuto, но в этом случае сам список неудобный: маленький (только 3 строки) и нет галочек. Спасибо. Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 3 minutes ago, x11 said: но не хватает кнопки OK (Done) для закрытия/подтверждения. Для закрытия, нужно проанализировать. Но, подтверждение работает "автоматически". Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 Just now, Sherzod said: Но, подтверждение работает "автоматически". все равно это неудобно, пользователь тыркает в экран и попадает в какой-нибудь unimEdit и ему всплывает клавиатура... а она не должна всплывать... Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 8 minutes ago, x11 said: все равно это неудобно, пользователь тыркает в экран и попадает в какой-нибудь unimEdit и ему всплывает клавиатура... а она не должна всплывать... Может, как-то так: function afterCreate(sender) { var done = new Ext.Button({ text: 'Закрыть' }); done.render(sender.getPicker()); } Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 Если строк мало (5 и меньше), то кнопка Закрыть нормально видна. Если строк много, то кнопка или вообще не видна, или чуть-чуть видна Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 15 minutes ago, x11 said: Если строк мало (5 и меньше), то кнопка Закрыть нормально видна. Если строк много, то кнопка или вообще не видна, или чуть-чуть видна function afterCreate(sender) { var done = new Ext.Button({ text: 'Закрыть', renderTo: sender.getPicker(), style: 'position: absolute; bottom: 0px; width: 100%;' }); //done.render(sender.getPicker()); } Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 Спасибо за оперативность 1 Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 On 9/19/2020 at 3:28 PM, x11 said: Как понять, что та или иная строка выделена? осталось еще немного: как понять в любой момент времени, какие строки выделены заполняю названия + ID while not qTypes.Eof do begin UnimSelect1.Items.AddObject(qTypesNAME.Value, pointer(qTypesID.Value)); qTypes.Next; end; как мне получить ID выбранных строк? Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 33 minutes ago, x11 said: как мне получить ID выбранных строк? Я проанализирую. Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 1 hour ago, x11 said: как мне получить ID выбранных строк? 1. with UnimSelect1 do begin Clear; // while not EOF do... JSInterface.JSCode(#1'.getStore().add({id: "1", val: "Значение1"});'); JSInterface.JSCode(#1'.getStore().add({id: "2", val: "Значение2"});'); end; 2. function afterCreate(sender) { var done = new Ext.Button({ text: 'Закрыть', renderTo: sender.getPicker(), style: 'position: absolute; bottom: 0px; width: 100%;' }); sender.getSelIds = function(sender) { let Ids = ""; if (sender.getSelection() == null) return ""; sender.getSelection().forEach(function(item) { Ids += item.id + "," }); return Ids.slice(0, -1); }; } 3. procedure TMainmForm.UnimFormAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = 'selEvents' then begin if FindComponent(Params.Values['objName'])<>nil then //(FindComponent(Params.Values['objName']) as TUnimSelect) Переменная := Params.Values['selIds']; end; end; 1 Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 4. procedure TMainmForm.UnimFormCreate(Sender: TObject); begin with UnimSelect1.JSInterface do begin JSConfig('multiSelect', [True]); JSAddListener('change', 'function(me){ajaxRequest('+ Self.WebForm.JSName +', "selEvents", ["objName="+me.uname, "values="+me.getValue(), "selIds="+me.getSelIds(me)])}'); end; end; 1 Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 1 hour ago, Sherzod said: procedure TMainmForm.UnimFormAjaxEvent( получается, что я не могу прочитать в любой момент времени значения ID выбранных строк, а только когда пользователь их непосредственно выбирает? Получается, нужно где-то отдельно держать какой-то глобальный массив и менять его в событии UnimFormAjaxEvent? Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 1 minute ago, x11 said: Получается, нужно где-то отдельно держать какой-то глобальный массив и менять его в событии UnimFormAjaxEvent? Это решение является обходным, на данный момент... 1 Link to comment Share on other sites More sharing options...
x11 Posted September 23, 2020 Author Share Posted September 23, 2020 Спасибо, вроде получилось. Но вот еще мальнькая проблемка. Я заполняю placeHolder, FormControl.JSInterface.JSConfig('placeholder', [sText]); но при выборе он все равно остается Link to comment Share on other sites More sharing options...
Sherzod Posted September 23, 2020 Share Posted September 23, 2020 1 minute ago, x11 said: Я заполняю placeHolder, FormControl.JSInterface.JSConfig('placeholder', [sText]); но при выборе он все равно остается Я чуть позже проанализирую... Link to comment Share on other sites More sharing options...
Sherzod Posted September 24, 2020 Share Posted September 24, 2020 23 hours ago, x11 said: Но вот еще мальнькая проблемка. Я заполняю placeHolder, FormControl.JSInterface.JSConfig('placeholder', [sText]); но при выборе он все равно остается procedure TMainmForm.UnimFormCreate(Sender: TObject); begin with UnimSelect1.JSInterface do begin JSConfig('multiSelect', [True]); JSConfig('_placeHolder', ['Test']); JSAddListener('painted', 'function(me){if (me.getValue()) {me.setPlaceholder()} else {me.setPlaceholder(me._placeHolder)}}'); JSAddListener('change', 'function(me){if (me.getValue()) {me.setPlaceholder()} else {me.setPlaceholder(me._placeHolder)} ajaxRequest('+ Self.WebForm.JSName +', "selEvents", ["objName="+me.uname, "values="+me.getValue(), "selIds="+me.getSelIds(me)])}'); end; end; 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now