Конференция "Компоненты" » Не отображается Published-свойство перечислимого типа [D7, WinXP]
 
  • 0leg (26.03.07 19:20) [0]
    Пишу компонент, хочу сделать у него published-свойство перечислимого типа, чтобы оно отображалось в Инспекторе объектов в виде выпадающего списка.

    Проблема в том, что Инспектор отображает перечислимый тип только если его элементы нумеруются с нуля и идут по-порядку:

    type
     TMyEnum = (meFirst, meSecond); // отображается правильно
     TMyEnum = (meFirst = 0, meSecond = 1); // тоже правильно
     TMyEnum = (meFirst = 5, meSecond = 1); // НЕ ВЫВОДИТСЯ !!



    компонент у меня примерно такой:

     TMyComponent = class(TComponent)
     private
       fMyEnum: TMyEnum;
     .................
     published
       property Test: TMyEnum read fMyEnum write fMyEnum;
     end;



    Как поступить, если в моем перечислимом типе элементы нумеруются произвольным образом???

    (я хочу хранить в этом свойстве список системных констант)
  • Юрий Зотов © (26.03.07 19:53) [1]
    С таким не сталкивался, но проблему можно обойти: вбить системные константы в массив, а перечислимое свойство использовать в качестве индекса этого массива.
  • 0leg © (26.03.07 20:01) [2]

    > С таким не сталкивался, но проблему можно обойти: вбить
    > системные константы в массив, а перечислимое свойство использовать
    > в качестве индекса этого массива.

    констант много - 40-50 штук, хотелось бы по-проще.
  • Юрий Зотов © (27.03.07 01:53) [3]
    Чем вбивание констант в перечислимый тип проще вбивания их же в массив?
  • DimaBr (27.03.07 08:56) [4]
    Возможен такой вариант
    TMyEnum1 = (me1,me2,me3,me4,me5,me6);
    TMyEnum2 = me3..me6;

  • DimaBr (27.03.07 09:29) [5]

    TMyEnum = (meFirst = 5, meSecond = 1);
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Caption := GetEnumName(TypeInfo(TMyEnum),1);
    end;



    [Error] Unit1.pas(36): Type 'TMyEnum' has no type info
  • DrPass © (27.03.07 13:07) [6]
    {$TYPEINFO ON}
  • DimaBr (27.03.07 14:47) [7]

    > DrPass ©   (27.03.07 13:07) [6]
    > {$TYPEINFO ON}

    А сам то пробывал ???
  • 0leg © (27.03.07 17:39) [8]

    > Чем вбивание констант в перечислимый тип проще вбивания
    > их же в массив?

    намного проще. Поскольку при использовании массива придется забивать не только массив, но и элементы перечислимого типа, используемые для его индексации. К тому же значения системных констант я задаю сам (стандартного pas-файла нету), а в перечислении очень удобно можно соединить объявление с присваиванием.



    // При использовании массива:

    const
     cFIRST = 5;
     cSECOND = 1;
     cEND = 4;
    type
     TMyEnum = (meFirst, meSecond, meEnd);
    var
     MyArray: array [0..2] of integer = {cFIRST, cSECOND, cEND};

    // А ХОЧЕТСЯ ТАК:

    type
     TMyEnum = (meFirst = 5, meSecond = 1, meEnd = 4);





    > {$TYPEINFO ON}

    не помогает, уже пробовал
  • Юрий Зотов © (27.03.07 18:20) [9]
    Вариант 1:
    type
     TMyEnum = (meFirst = 5, meSecond = 1, meEnd = 4);



    Вариант 2:
    type
     TMyEnum = (meFirst, meSecond , meEnd);
    const
     MyArray: array [TMyEnum] of integer = (5, 1, 4);



    И какая разница?
  • 0leg © (28.03.07 15:21) [10]

    > Юрий Зотов ©   (27.03.07 18:20) [9]
    > Вариант 1:type  TMyEnum = (meFirst = 5, meSecond = 1, meEnd
    > = 4);Вариант 2:type  TMyEnum = (meFirst, meSecond , meEnd);
    > const  MyArray: array [TMyEnum] of integer = (5, 1, 4);И
    > какая разница?

    имхо первый вариант занимает меньше памяти и удобочитаемость лучше. Числа в массиве придется каждое комментировать, чтобы при изменении ручками не отсчитывать номера элементов.

    Но это конечно мелочи..
    Так как хотел похоже не получится.
    Спасибо всем. Тема закрыта.
  • jack128 © (28.03.07 21:49) [11]
    0leg   (26.03.07 19:20)
    TMyEnum = (meFirst = 5, meSecond = 1); // НЕ ВЫВОДИТСЯ !!

    им не будет.  Для таких типов компилятор не генерирует RTTI,  со всеми вытекающимии..
  • homm © (28.03.07 22:30) [12]
    > И какая разница?

    В убодстве написания и, особено, исправления таких вот структур.
  • Юрий Зотов © (29.03.07 00:03) [13]
    > 0leg ©   (28.03.07 15:21) [10]

    Числа в типе тоже придется комментировать. После чего удобочитаемость становится одинаковой.

    > homm ©   (28.03.07 22:30) [12]

    Спасибо.
    :о)
 
Конференция "Компоненты" » Не отображается Published-свойство перечислимого типа [D7, WinXP]
Есть новые Нет новых   [119027   +44][b:0][p:0.001]