На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Ошибка , При Enabled=true
    Эх, что за судьба. Точнее, карма. Ладно, я уже давно смирился с тем, что у меня не ставятся чужие компоненты. Это еще можно пережить. Но тут! Я где-то полгода назад делал компонент, он у меня тогда поставился (чем дальше - тем хуже :)), потом я снес Билдер, а теперь он мне очень нужен. Ну я решил его поставить. После того, как испытал кучу морок, тот, наконец, установился. Но наблюдается странная вещь. Если у него Enabled=false (что, почему-то, по умолчанию, хотя я при описании свойства писал default=true), то все идет нормально. То есть проект запускается. Но как только ставим Enabled=true, то при нажатии F9 тут же вываливается исключение:
    Цитата
    Project XXX raised Exception class EReadError with message 'Property Enabled does not exist'. Process stopped. ...
    Так всегда. Я вообще надоумеваю: как такое в принципе может быть? Надеюсь, что кто-то поделится дельным советом... Или хотя бы натолкнет на мысль, на пусть истинный :) :o

    Добавлено в :
    Вот, еще только что заметил. Если ставишь Enabled=false и Visible=false, то та же самая проблема с Visible - "Property Visible does not exist". Судя по всему, проблема в компонента, но я в нем ничего не изменял и не трогал! Вроде бы :). Ну буду искать, хотя опять же: как такое может быть в принципе??? :rolleyes:
      Ты компонент выложи, а мы посмотрим. :)
        Эта тема уже обсуждалась... Ключевое слово default обозначает способ сохранения данных свойства в файл DFM, а не устанавливает свойство в это значение. В твоём случае когда Enabled==true, свойство в файл DFM не сохраняется. Для дальнейшего анализа надо видеть код.
          Код всего компонента не буду выкладывать. Ибо он очень большой. Вот как описаны у меня некоторые свойства.
          ExpandedWrap disabled
            __property bool Enabled = { read=FEnabled, write=SetEnabled, default=true };
            void __fastcall SetEnabled(bool Value)
            { FEnabled=Value; Repaint(); }
             
            __property Visible;
            // и также другие унаследованные свойства, чтобы сделать их видимыми
             
            __property TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter };
            __property TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave };
            // и другие собственные события
             
            __property OnMouseDown;
            // и другие унаследованные события
          Вроде бы ничего особенного.
            Цитата
            KAV, 19.03.04, 10:32
            __property Visible;
            // и также другие унаследованные свойства, чтобы сделать их видимыми


            почему просто так ?
            __property Visible
              Ну вроде бы это свойство объявлено в классе-предке, и здесь просто пишем его в секции __published, чтобы сделать видимым в Инспекторе Объектов.
                похоже на паскаль, там так прописывают. Сейчас как раз паскалевские исходники смотрю. Для С этого не надо, во всяком случае я не писал, но свойства оставались.
                  А метод SetEnabled в каком разделе лежит?
                    Цитата
                    похоже на паскаль, там так прописывают. Сейчас как раз паскалевские исходники смотрю. Для С этого не надо, во всяком случае я не писал, но свойства оставались.
                    :huh: Например, я не прописал так событие OnClick - его и не было... Видимо, это зависит от того, в каком разделе стоят эти свойства у классов-предков.
                    Цитата
                    А метод SetEnabled в каком разделе лежит?
                    Это как функция-член класса, описана в нем, а на самом деле ее реализация в cpp-файле. Но там только делается: FEnabled присваивается текущему и перерисовка. За все остальное отвечает метод Paint. В сообщении №4 я написал ее в классе, так как, ИМХО, особой разницы в этом нет.
                    Скажу также, что компонент унаследован от TCustomControl.
                    P.S. Но у меня такое чувство, что я что-то неправильно делаю. И, если кто-то тут мне поможет, это не значит, что ставить компоненты в дальнейшем получится. Как говорится: "Можно голодному первобытному человеку дать рыбу и он станет сытым. А можно дать ему удочку и научить его ловить рыбу" ;)
                      Даже если у property есть default, это значение надо руками устанавливать в конструкторе. Покажи конструктор, а еще лучше - весь исходник, попробуем разобрать по косточкам. :)


                      Цитата
                      Sazabis, 19.03.04, 12:22
                      почему просто так ?
                      __property Visible
                      Таким образом можно сменить атрибут доступа(было protected - стало __published)
                        Вот-с:
                        Цитата
                        You can specify an access method instead of a data member in the read and write parts of a property declaration. Access methods should be protected, and are usually declared as virtual; this allows descendant components to override the property’s implementation.
                        Avoid making access methods public. Keeping them protected ensures that application developers do not inadvertently modify a property by calling one of these methods.
                          То, что Вы выделили красным и вокруг него, переводится как "обычно объявляются виртуальными" :)
                          Сомнительно, что это может как-то относиться к сути проблемы. Это просто стандартные рекомендации объектно-ориентированного программирования :)
                            Ну ладно, уговорили ;)

                            Для решения проблемы, надо просто открыть ВСЕ формы проекта, содержащие "больной" компонент, в IDE C++Builder. IDE будет ругаться, но на все жать "Ignore". Сохранить форму после успешой загрузки. Тогда старые "битые" (отсутсвующие) свойства будут удалены.
                              У меня сейчас стало неожиданно мало времени :), так что вопрос пока откладывается. Но потом всплывет из небытия как только так сразу ;). Хотя я компонент попытаюсь переделать, может, что и получится...

                              Добавлено в :
                              P.S. Иваныч, регистрируйся :)
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0370 ]   [ 15 queries used ]   [ Generated: 17.05.24, 15:31 GMT ]