Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.17;
Скачать: CL | DM;

Вниз

Свойства в классах   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
14-54840
JibSkeart
2003-03-30 14:53
2003.04.17
Как кому нравятся ти мультики Happy Tree Friend ?


3-54521
baracuda
2003-03-31 18:26
2003.04.17
dbcombobox


14-54837
Сергей Чурсин
2003-04-01 01:42
2003.04.17
Религия - как много в этом слове...


8-54751
KA_
2003-01-11 11:54
2003.04.17
SVG


1-54626
Seb_Kost
2003-04-08 06:34
2003.04.17
Преобразование Byte to String