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

Вниз

Создание свойств в компаненте   Найти похожие ветки 

 
R   (2003-06-20 06:42) [0]

Мастера подскажите я не силен в написании компанентов в той части- структура да и вообще подход к этому делу. Вопрос такой:
Является ли нормальным задание свойства компаненту по такой схеме

private
FS:String;//переменная используемая в компаненте для
смены определенного свойства

public
property TextLabel:String read FS write FS;
//интересует вот эта часть правильный ли это подход или нет?


 
MBo ©   (2003-06-20 07:02) [1]

правильность подхода зависит от тонкостей использования свойства.
Если, к примеру, при изменении свойства извне компонента должны производиться какие-то действия (обновление связанных полей), то write нужно не поле FS непосредственно, а сделать процедуру SetFS (как и делается в среде по умолчанию, если написать просто
property TextLabel:String; и Ctrl-Shift-C нажать)


 
R   (2003-06-20 07:57) [2]

т.е. если я правильно понял SetFS проверяет изменилось ли свойство если да то меняет и переменную
.......write SetFS(Val:String);
procedure SetFS(Val:String);
begin
If Val<>FS Then FS:=Val;
end;
Для этого нужна процедура смены?


 
Forester ©   (2003-06-20 08:14) [3]

Методы доступа к свойствам предназначены для выполнения набора операций которые необходимо произвести при изменении свойства (проверка на допустимость присваимого значения, вызов процедуры отображения, изменение значений других свойств и т. д.).


 
Юрий Зотов ©   (2003-06-20 08:21) [4]

> R (20.06.03 07:57)
> Для этого нужна процедура смены?

Нет, не для этого. В таком виде метод SetFS никому не нужен и можно оставить прямой доступ к полю, как было у Вас первоначально: ... write FS.

Но представьте, что при изменении значения свойства требуется выполнить какие-то дополнительные действия. Ну, например, надо перерисовать компонент. Вот тогда уже нужен метод установки свойства, а в нем мы напишем:

procedure SetFS(const Value: string);
begin
if Value <> FS then // Чтобы не делать лишнюю работу
begin
FS := Value; // Меняем поле
Invalidate // Перерисовываем
end
end;

Откройте исходники VCL, посмотрите - там же целая куча примеров.


 
R   (2003-06-20 09:14) [5]

Всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
14-97790
Hermit
2003-06-14 15:31
2003.06.30
Что за компонент ?


14-97833
DDDD
2003-06-12 09:34
2003.06.30
Microsoft DDK


1-97645
picaroon
2003-06-20 01:10
2003.06.30
Почему минимальный размер шрифта 8???


14-97864
Soft
2003-06-12 12:53
2003.06.30
Думают ли электроны?


1-97638
NeVa
2003-06-19 21:25
2003.06.30
StringGrid