Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.78.155] |
|
Сообщ.
#1
,
|
|
|
Эх, что за судьба. Точнее, карма. Ладно, я уже давно смирился с тем, что у меня не ставятся чужие компоненты. Это еще можно пережить. Но тут! Я где-то полгода назад делал компонент, он у меня тогда поставился (чем дальше - тем хуже ), потом я снес Билдер, а теперь он мне очень нужен. Ну я решил его поставить. После того, как испытал кучу морок, тот, наконец, установился. Но наблюдается странная вещь. Если у него Enabled=false (что, почему-то, по умолчанию, хотя я при описании свойства писал default=true), то все идет нормально. То есть проект запускается. Но как только ставим Enabled=true, то при нажатии F9 тут же вываливается исключение:
Цитата Так всегда. Я вообще надоумеваю: как такое в принципе может быть? Надеюсь, что кто-то поделится дельным советом... Или хотя бы натолкнет на мысль, на пусть истинный Project XXX raised Exception class EReadError with message 'Property Enabled does not exist'. Process stopped. ... Добавлено в : Вот, еще только что заметил. Если ставишь Enabled=false и Visible=false, то та же самая проблема с Visible - "Property Visible does not exist". Судя по всему, проблема в компонента, но я в нем ничего не изменял и не трогал! Вроде бы . Ну буду искать, хотя опять же: как такое может быть в принципе??? |
Сообщ.
#2
,
|
|
|
Ты компонент выложи, а мы посмотрим.
|
Сообщ.
#3
,
|
|
|
Эта тема уже обсуждалась... Ключевое слово default обозначает способ сохранения данных свойства в файл DFM, а не устанавливает свойство в это значение. В твоём случае когда Enabled==true, свойство в файл DFM не сохраняется. Для дальнейшего анализа надо видеть код.
|
Сообщ.
#4
,
|
|
|
Код всего компонента не буду выкладывать. Ибо он очень большой. Вот как описаны у меня некоторые свойства.
__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; // и другие унаследованные события |
Сообщ.
#5
,
|
|
|
Цитата KAV, 19.03.04, 10:32 __property Visible; // и также другие унаследованные свойства, чтобы сделать их видимыми почему просто так ? __property Visible |
Сообщ.
#6
,
|
|
|
Ну вроде бы это свойство объявлено в классе-предке, и здесь просто пишем его в секции __published, чтобы сделать видимым в Инспекторе Объектов.
|
Сообщ.
#7
,
|
|
|
похоже на паскаль, там так прописывают. Сейчас как раз паскалевские исходники смотрю. Для С этого не надо, во всяком случае я не писал, но свойства оставались.
|
Сообщ.
#8
,
|
|
|
А метод SetEnabled в каком разделе лежит?
|
Сообщ.
#9
,
|
|
|
Цитата Например, я не прописал так событие OnClick - его и не было... Видимо, это зависит от того, в каком разделе стоят эти свойства у классов-предков.похоже на паскаль, там так прописывают. Сейчас как раз паскалевские исходники смотрю. Для С этого не надо, во всяком случае я не писал, но свойства оставались. Цитата Это как функция-член класса, описана в нем, а на самом деле ее реализация в cpp-файле. Но там только делается: FEnabled присваивается текущему и перерисовка. За все остальное отвечает метод Paint. В сообщении №4 я написал ее в классе, так как, ИМХО, особой разницы в этом нет.А метод SetEnabled в каком разделе лежит? Скажу также, что компонент унаследован от TCustomControl. P.S. Но у меня такое чувство, что я что-то неправильно делаю. И, если кто-то тут мне поможет, это не значит, что ставить компоненты в дальнейшем получится. Как говорится: "Можно голодному первобытному человеку дать рыбу и он станет сытым. А можно дать ему удочку и научить его ловить рыбу" |
Сообщ.
#10
,
|
|
|
Даже если у property есть default, это значение надо руками устанавливать в конструкторе. Покажи конструктор, а еще лучше - весь исходник, попробуем разобрать по косточкам.
Цитата Таким образом можно сменить атрибут доступа(было protected - стало __published) Sazabis, 19.03.04, 12:22 почему просто так ? __property Visible |
Сообщ.
#11
,
|
|
|
Вот-с:
Цитата 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. |
Сообщ.
#12
,
|
|
|
То, что Вы выделили красным и вокруг него, переводится как "обычно объявляются виртуальными"
Сомнительно, что это может как-то относиться к сути проблемы. Это просто стандартные рекомендации объектно-ориентированного программирования |
Сообщ.
#13
,
|
|
|
Ну ладно, уговорили
Для решения проблемы, надо просто открыть ВСЕ формы проекта, содержащие "больной" компонент, в IDE C++Builder. IDE будет ругаться, но на все жать "Ignore". Сохранить форму после успешой загрузки. Тогда старые "битые" (отсутсвующие) свойства будут удалены. |
Сообщ.
#14
,
|
|
|
У меня сейчас стало неожиданно мало времени , так что вопрос пока откладывается. Но потом всплывет из небытия как только так сразу . Хотя я компонент попытаюсь переделать, может, что и получится...
Добавлено в : P.S. Иваныч, регистрируйся |