x11 Posted September 18, 2020 Posted September 18, 2020 Хотелось бы дать возможность пользователю сделать мультивыбор. С помощью какой мобильной компоненты это можно реализовать? Quote
Sherzod Posted September 18, 2020 Posted September 18, 2020 1 hour ago, x11 said: Хотелось бы дать возможность пользователю сделать мультивыбор. С помощью какой мобильной компоненты это можно реализовать? Я проанализирую. Quote
Sherzod Posted September 19, 2020 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 Quote
x11 Posted September 19, 2020 Author Posted September 19, 2020 Спасибо, очень надеюсь, разработчики добавят свойство multiSelect, чтобы его можно было использовать в Диспетчере свойств. 1 Quote
x11 Posted September 19, 2020 Author Posted September 19, 2020 Ок, заполнить могу так while not qTypes.Eof do begin UnimSelect1.Items.AddObject(qTypesNAME.Value, pointer(qTypesID.Value)); qTypes.Next; end; а как теперь получить значения выделенных строк? Как понять, что та или иная строка выделена? Quote
x11 Posted September 22, 2020 Author Posted September 22, 2020 @Sherzod Похожая проблема у TUnimSegmentedButton: свойство Pressed есть у кнопки, но оно не работает. И до сих пор не исправлено? Quote
Sherzod Posted September 23, 2020 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 Quote
Sherzod Posted September 23, 2020 Posted September 23, 2020 Присвоить значение, примерно так: UnimSelect1.JSInterface.JSCode(#1'.setValue(["3","4","5"]);') 1 Quote
x11 Posted September 23, 2020 Author Posted September 23, 2020 On 9/19/2020 at 2:50 PM, Sherzod said: 1. UnimSelect1.Picker = dptFloated Со значением dptFloated удобно тем, что список большой, на пол экрана, галочки видны, но не хватает кнопки OK (Done) для закрытия/подтверждения. Можно ее как-то добавить? Кнопка Done есть у значения dptAuto, но в этом случае сам список неудобный: маленький (только 3 строки) и нет галочек. Спасибо. Quote
Sherzod Posted September 23, 2020 Posted September 23, 2020 3 minutes ago, x11 said: но не хватает кнопки OK (Done) для закрытия/подтверждения. Для закрытия, нужно проанализировать. Но, подтверждение работает "автоматически". Quote
x11 Posted September 23, 2020 Author Posted September 23, 2020 Just now, Sherzod said: Но, подтверждение работает "автоматически". все равно это неудобно, пользователь тыркает в экран и попадает в какой-нибудь unimEdit и ему всплывает клавиатура... а она не должна всплывать... Quote
Sherzod Posted September 23, 2020 Posted September 23, 2020 8 minutes ago, x11 said: все равно это неудобно, пользователь тыркает в экран и попадает в какой-нибудь unimEdit и ему всплывает клавиатура... а она не должна всплывать... Может, как-то так: function afterCreate(sender) { var done = new Ext.Button({ text: 'Закрыть' }); done.render(sender.getPicker()); } Quote
x11 Posted September 23, 2020 Author Posted September 23, 2020 Если строк мало (5 и меньше), то кнопка Закрыть нормально видна. Если строк много, то кнопка или вообще не видна, или чуть-чуть видна Quote
Sherzod Posted September 23, 2020 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()); } Quote
x11 Posted September 23, 2020 Author 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 выбранных строк? Quote
Sherzod Posted September 23, 2020 Posted September 23, 2020 33 minutes ago, x11 said: как мне получить ID выбранных строк? Я проанализирую. Quote
Sherzod Posted September 23, 2020 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 Quote
Sherzod Posted September 23, 2020 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 Quote
x11 Posted September 23, 2020 Author Posted September 23, 2020 1 hour ago, Sherzod said: procedure TMainmForm.UnimFormAjaxEvent( получается, что я не могу прочитать в любой момент времени значения ID выбранных строк, а только когда пользователь их непосредственно выбирает? Получается, нужно где-то отдельно держать какой-то глобальный массив и менять его в событии UnimFormAjaxEvent? Quote
Sherzod Posted September 23, 2020 Posted September 23, 2020 1 minute ago, x11 said: Получается, нужно где-то отдельно держать какой-то глобальный массив и менять его в событии UnimFormAjaxEvent? Это решение является обходным, на данный момент... 1 Quote
x11 Posted September 23, 2020 Author Posted September 23, 2020 Спасибо, вроде получилось. Но вот еще мальнькая проблемка. Я заполняю placeHolder, FormControl.JSInterface.JSConfig('placeholder', [sText]); но при выборе он все равно остается Quote
Sherzod Posted September 23, 2020 Posted September 23, 2020 1 minute ago, x11 said: Я заполняю placeHolder, FormControl.JSInterface.JSConfig('placeholder', [sText]); но при выборе он все равно остается Я чуть позже проанализирую... Quote
Sherzod Posted September 24, 2020 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 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.