Показать сообщение отдельно
Старый 04.06.2025, 15:42   #3  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
321 / 893 (30) +++++++
Регистрация: 23.10.2012
any2enum - пробовал, из int (formComboBox.selection()) не получится enum.
Решение придумал на основании похожей ветки, где нужно было из anyType получить enumId (Как получить из элемента enum-а код типа (enum-а)?).

Не удалось придумать что-то проще, чем "закат солнца":
X++:
    str strHexBigToLittleEndian(str _hexStr)
    {
        str ret;
        int jMax = strLen(_hexStr),
            j    = jMax;
        #DEFINE.NEXTCHAR(1)
        #DEFINE.OFFSET(2)
        ;
        
        while (j >= #OFFSET)
        {
            ret += subStr(_hexStr, j - #NEXTCHAR, #OFFSET);
        
            j -= #OFFSET;
        }

        return ret;
    }
X++:
    anyType int2enum(enumId _enumId, int _value)
    {
        #DEFINE.BLOBFORMAT('07fd04\%1ff')
        #DEFINE.ENUMIDOFFSET(8)
        #DEFINE.ENUMIDX(1)
        #DEFINE.HEXWIDTH(6)
        str blobStr = strFmt(#BLOBFORMAT, strHexBigToLittleEndian(int2hex(_enumId << #ENUMIDOFFSET | _value, #HEXWIDTH)));
        ;

        return conPeek(ContainerClass::blob2Container(BinData::stringToData(blobStr)), #ENUMIDX);
    }
Соответственно, вызов: value2enum(formComboBox.enumType(), formComboBox.selection()); тип, в данном случае, переменной будет сохранён.
Конечно, на тему быстродействия заикаться не приходится, ну для разовых операций - вполне.

Последний раз редактировалось Товарищ ♂uatr; 04.06.2025 в 16:03.
За это сообщение автора поблагодарили: S.Kuskov (5), Logger (5).