Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
1-54722
asdqwer
2003-04-05 07:42
2003.04.17
Символы шрифта


3-54506
Гость
2003-03-30 23:18
2003.04.17
QReport - кто хорошо разбирается?


3-54398
me2
2003-04-01 10:29
2003.04.17
Создание, удаление и просмотр пользователей


3-54508
Sectey
2003-03-31 15:42
2003.04.17
Создание и удаление индексов


1-54569
spark81
2003-04-06 12:19
2003.04.17
курсор




   Наверх