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: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

3 minutes ago, Sherzod said:

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...