Главная страница
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.02 c
7-54935
Dmitriy_R
2003-02-21 10:06
2003.04.17
Определить режим работы LPT порта.


1-54619
Alexxxxx
2003-04-07 22:46
2003.04.17
Парсинг *.rtf файла.


1-54711
DmTsaplin
2003-04-04 17:19
2003.04.17
DBGrid не получает фокус ввода


3-54439
Sectey
2003-04-01 10:56
2003.04.17
ClientDataSet & Index


9-54393
АндрейП
2002-04-09 14:04
2003.04.17
Расспознавание текста ....