Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
ВнизСвойства в классах Найти похожие ветки
← →
Top Gun (2003-04-07 19:42) [0]В компонентах можно использовать ключевое слово property (в объявлении типа). А неужели нельзя использовать свойства в просто классах ?
Ну например, есть класс:
type
TClass = class;
property Left:word read FLeft write SetLeft default 0;
end;
То есть, я хочу, чтобы у этого класса было свойство Left, при записи которого вызывалась процедура SetLeft. Но такая конструкция не компилируется, пишет Field or method identifier expected
А очень хочется. Просто это очень бы упростило работу с классом конечных пользователей.
Компонент создавать не хочу, потому как не нужно мне добавлять в палитру компонентов еще одну иконку.
Идеально было бы все это оформить в виде модуля. Подключаешь модуль к проекту и используешь TClass
← →
malkolinge(fprgotpass0 (2003-04-07 19:52) [1]А где описакние САМОГО МЕТОДА ?
Кроме этого TClass нельзя использовать...
например
TmyClass=Class
private
procedure SetLeft(Value:Integer)
fleft:Integer;
public
property left:integer read FLeft wrire SetLeft;
end;
И не забудь описать сами методы доступа
а еще можно написать property Left нажать ctrl+c и делфи сама за тебя почти все сделает
← →
kravchuk (2003-04-07 19:53) [2]А чего же ты не объявил в класе FLeft и SetLeft!?
и "TClass = class;" в конце не должно быть ";"
← →
Юрий Зотов (2003-04-07 20:04) [3]> А неужели нельзя использовать свойства в просто классах?
Сколько угодно (см. TFont, TCanvas, TBrush, TPen, TList, TCollection, TCollectionItem и т.д.). Только не так, как Вы написали. Ниже жирным шрифтом выделены ошибки.
type
TClass {Переопределение стандартного идентификатора}
= class ; {точка с запятой не нужна - отсюда и ошибка}
property Left:word read FLeft write SetLeft default 0;
end;
> Компонент создавать не хочу, потому как не нужно мне добавлять
> в палитру компонентов еще одну иконку
Можно создавать компоненты и без этого (см. RegisterNoIcon). Выбор "компонент - не компонент" диктуется вовсе не иконкой в палитре, а требуемой функциональностью нового класса.
И еще - обратите внимание на класс TPersistent и директиву компилятора {$M+}, {$M-} (в хелпе есть). Полезно, если Ваш класс должен уметь выступать published-свойством компонентов.
← →
malkolinge(fp) (2003-04-07 20:17) [4]Интересно, а для чего в этом случае использовать published поля ? По всей видимости сохранять значения свойств в потоке не придеться или я не прав ?
> И еще - обратите внимание на класс TPersistent и директиву
> компилятора {$M+}, {$M-} (в хелпе есть). Полезно, если Ваш
> класс должен уметь выступать published-свойством компонентов.
Выступлю в роли хелпа
Для published полей генерируеться инфрмация времени выполнения. Такие поле можгут быть сохранены в поток. М+ включает генерацию такой информации(RTTI). M+ можно опустить в случае, если базовый класс откомпилирован с такой директивой. Пример такого класса Tpersistent. Если Вы планируете, чтоб ваш класс не был компонентом, однако хотите, чтоб он сохранялся в поток и был виден в инспекторе обьектов используйте в качестве предка TPersistent. Бутет что-то вроде всем известного Tfont
← →
Top Gun (2003-04-07 22:00) [5]Нда, тормозить не запретишь :)))
Забыл до этого объявить саму процедуру изменения параметра
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c