Главная страница
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.018 c
1-97640
FOX
2003-06-19 16:48
2003.06.30
Редактор свойств


6-97779
Beglec
2003-04-25 02:50
2003.06.30
Что есть пинг


14-97837
Dr. Death
2003-06-11 00:32
2003.06.30
RUS-OFFICE .ORG Project


4-97916
tytus
2003-04-27 13:33
2003.06.30
Координаты


1-97652
VIB
2003-06-19 09:55
2003.06.30
Масивы в Delphi