Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-97718
Bagroff
2003-06-18 13:25
2003.06.30
scrollbar.


3-97547
Sliften
2003-06-06 01:08
2003.06.30
как зделать вставку из одной таблици в другую при помощи SQL


11-97575
Sacred
2002-10-14 12:04
2003.06.30
ActiveX


1-97663
MakNik
2003-06-17 11:57
2003.06.30
Инсталяция


6-97772
Zhenya
2003-04-24 20:55
2003.06.30
ClientSocket???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский