Главная страница
    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
14-97890
gn
2003-06-06 06:58
2003.06.30
сумерки богов


3-97526
eLVik
2003-06-06 11:38
2003.06.30
Помогите разобраться SQL


7-97897
max2057
2003-04-14 17:41
2003.06.30
инструкция 0х0000000 обратилась по адресу 0х0000000


3-97497
prorok2
2003-06-03 20:42
2003.06.30
SQL Server и Delphi


3-97545
AlexBig1
2003-06-06 17:57
2003.06.30
передать в TIBQuery NULL значение параметра





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский