x11 Posted May 26, 2020 Posted May 26, 2020 Подскажите, какой компонентой можно сделать примерно такой горизонтальный список для мобильной формы? Чтобы можно было выбирать либо одно значение, либо несколько? Я вижу, что есть UnimSegmentedButton. Но там, если я правильно понял, можно сделать только один выбор, т.е. только одну кнопку нажать. Если в UnimSegmentedButton можно сделать множественный выбор (MultiSelect), подскажите, как это сделать? К сожалению, документации по TUnimSegmentedButton не нашел ни в оффлайне, ни в онлайне. Спасибо. Quote
Sherzod Posted May 26, 2020 Posted May 26, 2020 1 hour ago, x11 said: Я вижу, что есть UnimSegmentedButton. Но там, если я правильно понял, можно сделать только один выбор, т.е. только одну кнопку нажать. Если в UnimSegmentedButton можно сделать множественный выбор (MultiSelect), подскажите, как это сделать? Первым делом можете включить этот конфиг: procedure TMainmForm.UnimFormCreate(Sender: TObject); begin UnimSegmentedButton1.JSInterface.JSConfig('allowMultiple', [True]); end; 1 Quote
x11 Posted May 26, 2020 Author Posted May 26, 2020 А как програмно управлять нажатием кнопок? Например, как очистить выбор? for I := 0 to pred(UnimSegmentedButton1.Items.Count) do UnimSegmentedButton1.Items[i].Pressed := false; Так не получается. Ничего не происходит. Кнопки остаются нажатыми. Quote
Sherzod Posted May 26, 2020 Posted May 26, 2020 16 minutes ago, x11 said: А как програмно управлять нажатием кнопок? Например, как очистить выбор? for I := 0 to pred(UnimSegmentedButton1.Items.Count) do UnimSegmentedButton1.Items[i].Pressed := false; Так не получается. Ничего не происходит. Кнопки остаются нажатыми. http://forums.unigui.com/index.php?/topic/12506-unimsegmentedbutton-set-button-pressed-programmatically/&do=findComment&comment=66556 1 Quote
x11 Posted May 26, 2020 Author Posted May 26, 2020 Спасибо. Ещё вопрос. А как получить значение? Пишу .Items[0].Pressed then .... и ничего не происходит, хотя кнопка нажата... Извините, но я не могу понять, зачем разработчики ввели свойство Pressed, если оно ничего не дает? Ничего не меняет. Quote
Sherzod Posted May 26, 2020 Posted May 26, 2020 38 minutes ago, x11 said: А как получить значение? Пишу .Items[0].Pressed then .... и ничего не происходит, хотя кнопка нажата... Извините, но я не могу понять, зачем разработчики ввели свойство Pressed, если оно ничего не дает? Ничего не меняет. Я открыл два запроса в портале поддержки. 41 minutes ago, x11 said: зачем разработчики ввели свойство Pressed, если оно ничего не дает? Ничего не меняет. Обходной путь... 1 Quote
x11 Posted May 26, 2020 Author Posted May 26, 2020 1 minute ago, Sherzod said: Обходной путь... т.е. самому менять при выборе? Ну ОК. Вот я делаю так. В событии UnimSegmentedButton1.OnClick я пишу procedure TfmmSearchParams.UnimSegmentedButton1Click(Sender: TUnimButtonItem); begin Sender.Pressed := not Sender.Pressed;// меняем значение на обратное при каждом клике end; Теперь где-то на другой кнопке вешаю код if UnimSegmentedButton1.Items[0].Pressed then ShowMessage('UnimSegmentedButton1.Items[0].Pressed'); Меняю значение кнопки и проверяю... ShowMessage вообще никогда не отображается, не важно в каком состоянии кнопка. Quote
x11 Posted May 26, 2020 Author Posted May 26, 2020 Ещё проблема в событии procedure TfmmSearchParams.UnimSegmentedButton1Click(Sender: TUnimButtonItem); begin Sender.Pressed := not Sender.Pressed;// меняем значение на обратное при каждом клике ShowMessage(Sender.Caption) end; Я добавил ShowMessage(Sender.Caption), для теста и наглядности. ShowMessage отображается ТОЛЬКО при включении кнопки. Когда повторно щелкаешь по кнопке, чтобы отключить (отжать) её, то ShowMessage не появляется на экране. Quote
Sherzod Posted May 27, 2020 Posted May 27, 2020 13 hours ago, x11 said: ShowMessage отображается ТОЛЬКО при включении кнопки. Когда повторно щелкаешь по кнопке, чтобы отключить (отжать) её, то ShowMessage не появляется на экране. procedure TMainmForm.UnimFormCreate(Sender: TObject); begin with UnimSegmentedButton1.JSInterface do begin JSConfig('allowDepress', [True]); JSConfig('allowMultiple', [True]); JSAddListener('toggle', 'function(container, button, pressed){if (!pressed) ajaxRequest(this, "toggle", ["btn="+button.nm, "prsd="+pressed])}'); end; end; Quote
x11 Posted May 27, 2020 Author Posted May 27, 2020 Вот ещё проблема. Несколько раз нажимаю кнопки. Включаю и отключаю, но ShowMessage не отображается. procedure TfmmSearchParams.UnimSegmentedButton1Click(Sender: TUnimButtonItem); begin Sender.Pressed := not Sender.Pressed; if Sender.Pressed then ShowMessage(Sender.Caption + ' ' + Sender.Index.ToString); end; Т.е. на данный момент остается вопрос: как узнать состояние кнопки в тот или иной момент? Quote
Sherzod Posted May 27, 2020 Posted May 27, 2020 21 minutes ago, x11 said: Т.е. на данный момент остается вопрос: как узнать состояние кнопки в тот или иной момент? Если хотите я попробую дать Вам обходное решение, используя: procedure TMainmForm.UnimSegmentedButton1AjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = 'toggle' then begin // end; end; Или же, в портале поддержки уже есть запрос, который мы постараемся исправить в следующих версиях. 1 Quote
x11 Posted May 27, 2020 Author Posted May 27, 2020 Ладно, пока не горит, нет срочности. Подожду исправления проблемы. Спасибо Quote
x11 Posted September 22, 2020 Author Posted September 22, 2020 @Sherzod Вы про меня забыли. Я ужен почти полгода не могу нормально ничего сделать в мобильной версии своего проекта. За что не возьмусь, почти ничего не работает в библиотеке или чего-то вообще нет. Одно не работает должным образом, каких-то компонент вообще не хватает или свойств/событий не хватает. Если вышеуказанное свойство Pressed как-то и можно установить с помощью JS, то как его прочитать? Часть функционала как бы и есть у ExtJS Modern, но в UniGUI приходится его допиливать с помощью JS. То же самое сейчас с unimSelect + multiselect http://forums.unigui.com/index.php?/topic/15111-мультивыбор-для-touch-extmodern/&do=findComment&comment=82700 Quote
stas Posted September 22, 2020 Posted September 22, 2020 4 hours ago, x11 said: Вы про меня забыли Вы не правы, никто про Вас не забыл. Смотрите, я на сайте с основания и большинство постов, это ответы. Вы на сайте не так давно. У Вас постов больше чем у меня почти в два раза. И большинство вопросов. Многие вещи Фаршад просто не успевает создать, для этого существует документация про Ext.Modern, прежде всего нужно смотреть там. Вы не одни на форуме и, если посмотреть , сколько Вам отвечали, то Вы не можете похвастаться на отсутствие внимания. Quote
x11 Posted September 23, 2020 Author Posted September 23, 2020 Иногда техподдержка оперативно помогает, за что большое спасибо. А иногда, вот как сейчас, приходится ждать.... Дело еще и не в том, техподдержка быстрая или медленная, а в том, что функционал недоделан. Эта тема - прекрасный пример. Есть TUnimSegmentedButton, но функционал этой компоненты рассчитан только на то, чтобы показать покупателю, что это есть, но оно до конца не работает, т.е. просто кнопки нажимаются и это видно визуально, но от этого толку мало, т.к. программно к кнопкам просто так не добраться с помощью Delphi-кода и нужно ще писать обвязку с помощью JS-кода. Вот как и с соседней теме с TunimSelect >>> А таких компонент, как дерево с мультивыбором (чекбоксами), как ListView для вывода разнородных данных и с кнопками, вообще нету Quote
x11 Posted September 25, 2020 Author Posted September 25, 2020 On 9/22/2020 at 6:55 PM, stas said: Вы не правы, никто про Вас не забыл. дело не во мне. Вот, как видно, прошло ПОЛТОРА года, а воз и ныне там. Компонента есть, а программистам самим приходится допиливать функционал. Quote
x11 Posted September 25, 2020 Author Posted September 25, 2020 @Sherzod при нажатии вижу индекс нажатой кнопки, а как понять состояние кнопки в любой момент времени? Например, пользователь сохраняет в базу данные. Нажимает кнопку Сохранить на ToolBar и мне надо в базу записать индексы только нажатых кнопок. Как понять, какие кнопки нажаты, а какие нет? Придется какую-то глобальную переменную держать в модуле формы? Или у TUnimSegmentedButton есть какое-то свойство-массив, отвечающее за состояние кнопок? procedure TfmmSearchParams.btnsRoomsClick(Sender: TUnimButtonItem); begin self.ShowToast(Sender.Caption + ' ' + Sender.Index.ToString); end; Quote
Sherzod Posted September 25, 2020 Posted September 25, 2020 25 minutes ago, x11 said: Например, пользователь сохраняет в базу данные. Нажимает кнопку Сохранить на ToolBar и мне надо в базу записать индексы только нажатых кнопок. Как понять, какие кнопки нажаты, а какие нет? Придется какую-то глобальную переменную держать в модуле формы? Или у TUnimSegmentedButton есть какое-то свойство-массив, отвечающее за состояние кнопок? Добрый день, Я проанализирую. Quote
Sherzod Posted September 25, 2020 Posted September 25, 2020 1 hour ago, x11 said: Например, пользователь сохраняет в базу данные. Нажимает кнопку Сохранить на ToolBar и мне надо в базу записать индексы только нажатых кнопок. Как понять, какие кнопки нажаты, а какие нет? Придется какую-то глобальную переменную держать в модуле формы? Или у TUnimSegmentedButton есть какое-то свойство-массив, отвечающее за состояние кнопок? Попробуйте. 1. procedure TMainmForm.UnimFormCreate(Sender: TObject); begin with UnimSegmentedButton1.JSInterface do begin JSConfig('allowDepress', [True]); JSConfig('allowMultiple', [True]); JSAddListener('toggle', 'function(container, button, pressed){ajaxRequest(this, "toggle", ["btnIndx="+this.indexOf(button), "prsd="+pressed])}'); end; end; 2. procedure TMainmForm.UnimSegmentedButton1AjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = 'toggle' then begin (Sender as TUnimSegmentedButton).Items[Params.Values['btnIndx'].ToInteger()].Pressed := Params.Values['prsd'].ToBoolean() end; end; 3. procedure TMainmForm.UnimButton1Click(Sender: TObject); var I: Integer; begin for I := 0 to UnimSegmentedButton1.Items.Count - 1 do if UnimSegmentedButton1.Items[I].Pressed then // end; 1 Quote
x11 Posted September 25, 2020 Author Posted September 25, 2020 UnimSegmentedButton1AjaxEvent почему-то два раза подряд срабатывает при нажатии. И ошибка при втором срабатывании: Project raised exception class EConvertError with message ''' is not a valid integer value for Integer type'. А при отжатии кнопки все норм, один раз срабатывает и ошибок нет. Quote
Sherzod Posted September 25, 2020 Posted September 25, 2020 7 minutes ago, x11 said: И ошибка при втором срабатывании: Project raised exception class EConvertError with message ''' is not a valid integer value for Integer type'. Хмм, в моем случае, работает без ошибок. Quote
x11 Posted September 25, 2020 Author Posted September 25, 2020 и событие 1 раз срабатывает? именно при нажатии, а не при отжатии Quote
Sherzod Posted September 25, 2020 Posted September 25, 2020 Я ещё раз проверю... Но ошибка не возникает. Quote
x11 Posted September 25, 2020 Author Posted September 25, 2020 а теперь добавьте в событие вот такой код procedure TfmmSearchParams.UnimSegmentedButton1Click(Sender: TUnimButtonItem); begin if sender.Pressed then Self.ShowToast('111'); end; и должно срабатывать 2 раза и на второй раз будет ошибка. По идее, я не устанавливаю значение здесь, а всего-лишь читаю. Вроде бы ошибки и срабатывания AjaxEvent быть не должно? Quote
x11 Posted September 25, 2020 Author Posted September 25, 2020 1 hour ago, Sherzod said: for I := 0 to UnimSegmentedButton1.Items.Count - 1 do if UnimSegmentedButton1.Items[I].Pressed then Еще не проверял, но я подозреваю, что в этом случае будет 5 раз AjaxEvent, если у мен 5 кнопок. Т.е. на каждую итерацию в цикле будет выполняться запрос... 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.