Jump to content

Отрисовка и выбор цвета с помощью uniComboBox


x11

Recommended Posts

Есть небольшой проект (пример), как использовать стандартный uniComboBox для выбора цвета с помощью готовых констант TAlphaColor.

Но есть и проблема: не получается правильно установить и перерисовать цвет программно.

Для воспроизведения выберите в списке какой-нибудь текст, а потом нажмите кнопку Установить (красный)  цвет.

Буду благодарен, если подскажите, что и где дописать/переписать, чтобы можно было и программно устанавливать цвет в TuniComboBox.

Screenshot_1.jpg

UniGUI_ColorComboBox.zip

Link to comment
Share on other sites

Уважаемый @Sherzod буду признателен, если Вы поможете, и если Вы сможете адаптировать код для мобильной версии TUnimComboBox.

Заранее благодарен.

Link to comment
Share on other sites

On 2/2/2022 at 2:30 PM, x11 said:

Но есть и проблема: не получается правильно установить и перерисовать цвет программно.

Для воспроизведения выберите в списке какой-нибудь текст, а потом нажмите кнопку Установить (красный)  цвет.

Буду благодарен, если подскажите, что и где дописать/переписать, чтобы можно было и программно устанавливать цвет в TuniComboBox.

Добрый день,

Попробуйте:

procedure TMainForm.SelectColorInCombo(color: TColor);
begin
//программно выбрать цвет в списке
  //comboColor.ItemIndex := comboColor.items.IndexOfObject(Pointer(color));
  comboColor.JSInterface.JSCall('setSelection', [comboColor.items.IndexOfObject(Pointer(color))]);
end;

 

  • Thanks 1
Link to comment
Share on other sites

On 2/2/2022 at 2:32 PM, x11 said:

Уважаемый @Sherzod буду признателен, если Вы поможете, и если Вы сможете адаптировать код для мобильной версии TUnimComboBox.

Заранее благодарен.

Нужно будет проанализировать... Но, не знаю, как быстро.

  • Thanks 1
Link to comment
Share on other sites

On 2/2/2022 at 2:32 PM, x11 said:

адаптировать код для мобильной версии TUnimComboBox

Или Вы будете использовать всегда такой вариант?

21 hours ago, Sherzod said:

image.png.cea002a91d42341c9bb5fb3033ef0da1.png

 

Link to comment
Share on other sites

On 2/2/2022 at 2:30 PM, x11 said:

Но есть и проблема: не получается правильно установить и перерисовать цвет программно.

Остаётся этот момент для мобильной версии...

Link to comment
Share on other sites

21 hours ago, Sherzod said:

Попробуйте

 

Есть небольшая проблема.

Нужно при создании/открытии формы программно выбрать цвет.

Добавляю последнюю строку в процедуру procedure TMainmForm.FillColorsByMacro:

...
...
  UnimComboBox1.ItemIndex := UnimComboBox1.items.IndexOfObject(Pointer(clLime));
end;

Цвет выбирается, но рисуется неправильно.

Screenshot_5.jpg

Link to comment
Share on other sites

Если при открытии окна последней строкой поставить :

UnimComboBox1.JSInterface.JSCode(#1'.setValue(Object.keys('#1'.colors)['+ UnimComboBox1.items.IndexOfObject(Pointer(clLime)).ToString() +']);')

то появляется сообщение с текстом "-1" и цвет не clLime

Screenshot_6.jpg

Link to comment
Share on other sites

Еще проблема.

Заменил в вашем коде на константу clLime

procedure TMainmForm.UnimButton1Click(Sender: TObject);
begin
  UnimComboBox1.JSInterface.JSCode(#1'.setValue(Object.keys('#1'.colors)['+ UnimComboBox1.items.IndexOfObject(Pointer(clLime)).ToString() +']);')
end;

появляется сообщение с текстом "90", но цвет совсем не clLime

 

Screenshot_7.jpg

Link to comment
Share on other sites

Сделал лог загрузки констант.

Оказалось, что некоторые цвета загружаются дважды, т.к. в TAlphaColorRec = record их тоже по две

Screenshot_23.jpg

Screenshot_22.jpg

Screenshot_24.jpg

Link to comment
Share on other sites

14 hours ago, x11 said:

Оказалось, что некоторые цвета загружаются дважды, т.к. в TAlphaColorRec = record их тоже по две

Здравствуйте,

Тогда Вы можете попробовать создать свой массив констант.

Link to comment
Share on other sites

6 hours ago, Sherzod said:

Тогда Вы можете попробовать создать свой массив констант.

Можно и своих, но можно и добавить 2 строки кода для игнора дубликатов:

1. slColors.Duplicates := dupIgnore; // запретить дубликаты

2. if comboColor.Items.IndexOfObject(Pointer(rgb)) = -1 then // проверить, нет ли уже такого цвета в списке
    comboColor.Items.AddObject(AlphaColorVal.ToUpperInvariant, Pointer(rgb));// добавить имя цвета + значение в Objects

 

Link to comment
Share on other sites

7 minutes ago, x11 said:

После нажатия на кнопку Clrear цвет остается.

Программно можете "очистить"?

Я имею в виду Вы можете обрабатывать событие.

Link to comment
Share on other sites

3 minutes ago, Sherzod said:

Я имею в виду Вы можете обрабатывать событие.

Вы имеете в виду событие компоненты в браузере?

Или событие на бэкэнде?

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...