Jump to content

tunidbgrid color combo


zanona

Recommended Posts

Работает. Спасибо огромное!

Осталось совсем немного.

А как теперь программно назначить цвет выпадающему списку?

Т.е. как при открытии формы из TColor выбрать программно цвет в UniComboBox1?

function TColorToHex(Color : TColor) : string;
 begin
    Result :=
      IntToHex(GetRValue(Color), 2) +
      IntToHex(GetGValue(Color), 2) +
      IntToHex(GetBValue(Color), 2) ;
 end;

как эту строку теперь передать в ColorCombobox?

 

  • Upvote 1
Link to comment
Share on other sites

26 minutes ago, x11 said:

А как теперь программно назначить цвет выпадающему списку?

Т.е. как при открытии формы из TColor выбрать программно цвет в UniComboBox1?.

Да. В таком случае, нужно также держать массив "colors" на стороне сервера, т.е. этот массив:

  sender.colors = {
        NULL: '#ffffff00',
        ALICEBLUE: '#F0F8FF',
        ANTIQUEWHITE: '#FAEBD7',
        AQUA: '#00FFFF',
        AQUAMARINE: '#7FFFD4',
        ...

 

Link to comment
Share on other sites

А можно ли не держать постоянный js-массив,

sender.colors = {
        ALICEBLUE: '#F0F8FF',
        ANTIQUEWHITE: '#FAEBD7',
        AQUA: '#00FFFF',
...
...

а формировать его и потом передавать его при создании фрейма?

Тогда на бэкэнде можно проверить, есть ли в массиве цветов нужное значение и, если нету, то добавить еще одно значение и уже потом отправить массив в компоненту, в браузер.

 

Вы мне как-то давали пример, как отправлять список колонок для мобильной сетки в браузер:

procedure SetFieldsToJS(dbg: TUnimDBListGrid);
var
 cols: string;
begin
// отправить в JS имена столбцов для xtemplate

  for var i := 0 to pred(dbg.Columns.Count) do
    Cols :=  Cols + '"' + UpperCase(dbg.Columns[I].FieldName) + '",';

  Cols := '[' + Cols + ']';
  dbg.JSInterface.JSAssign('fieldsNames', [dbg.JSInterface.JSStatement(Cols)]);// в бразуер отправятся имена в UPPERCASE

  // http://forums.unigui.com/index.php?/topic/15793-named-params-in-xtemplate-tunimdblistgrid/&tab=comments#comment-86752
end;

вот по такому примеру бы сделать... а?

Link to comment
Share on other sites

Еще один вариант. Более оптимизированный. Оставить массив как есть, т.е. как Вы и сделали. Но добавить только одно новое свойство (переменную) и в эту JS-переменную передавать значение цвета при создании фрейма.

А уже в JS-коде, как и раньше, проверять значение (НЕ имя, а именно значение) и если такого цвета нет в готовом массиве, то брать это значение из этой дополнительной переменной.

Т.е. поменять вот эту часть кода:

sender.getHexa = (color) => {
        return sender.colors[color.toUpperCase()] ?
            sender.colors[color.toUpperCase()] :
            'color not found';
    };

и в ней использовать дополнительную переменную.

 

 

Link to comment
Share on other sites

7 minutes ago, x11 said:

а формировать его и потом передавать его при создании фрейма?

Тогда на бэкэнде можно проверить, есть ли в массиве цветов нужное значение и, если нету, то добавить еще одно значение и уже потом отправить массив в компоненту, в браузер.

Я это и имел в виду.

Link to comment
Share on other sites

смотрите, как это работает в других компонентах

 

// добавить кастомный нестандартный цвет в список
colorCat.Properties.CustomColors.AddColor(DataSet1.FieldByName('color').Value, DataSet1.FieldByName('color').Value);

// указать, выбрать цвет программно
colorCat.EditValue             := DataSet1.FieldByName('color').Value;

 

Screenshot_1.jpg

Link to comment
Share on other sites

  • 3 months later...
On 7/14/2021 at 12:34 PM, Sherzod said:

Я чуть изменил код:

этот пример можно как-то адаптировать для мобильной версии комбобокса?

там же другие свойства и другие события.

Я имею ввиду unimSelect.

 

Link to comment
Share on other sites

43 minutes ago, x11 said:

этот пример можно как-то адаптировать для мобильной версии комбобокса?

там же другие свойства и другие события.

Я имею ввиду unimSelect.

Я постараюсь проанализировать.

Link to comment
Share on other sites

15 hours ago, Sherzod said:

для мобильной версии  - UnimComboBox.

И в нем можно применить все то, что сделано в этом вашем примере?

Но в мобильной версии отсутствует событие afterrender.

Подскажите, пожалуйста, как переделать мобильную версию с учетом вашего примера?

Спасибо.

Link to comment
Share on other sites

3 hours ago, Sherzod said:

Можно добавить свою логику. 

Вы слишком хорошего мнения обо мне 😁

Дело в том, что я, как и многие здесь, не знаю ExtJS. Поэтому даже не представляю что там писать. И как применить.

 

Link to comment
Share on other sites

Проблема еще в том, что программно тоже цвет не меняется

comboColor.ItemIndex := 5;

Т.е. само название подставляется правильно, текс, а цвет прямоугольника остается старый.

Screenshot_21.jpg

Link to comment
Share on other sites

  • 1 month later...

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