Форум: "Основная";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизСоздание свойств в компаненте Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c