Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по VCL   Найти похожие ветки 

 
Uriy   (2006-04-21 20:44) [0]

Изучаю тут сейчас исходники VCL, и у меня возникло 2 вопроса по поводу них:
1: Почему в Image перерисовка идугие там разные действия сделаны в процедуре PictureChanged а не в SetPicture? Можно было бы обойтись без PictureChanged и реализовать все это в SetPicture? Вот так там:

TImage = class(TGraphicControl)
 private
 FPicture: TPicture;
 procedure PictureChanged(Sender: TObject);
 procedure SetPicture(Value: TPicture);

...

constructor TImage.Create(AOwner: TComponent);
begin
...
 FPicture.OnChange := PictureChanged;
...
end;

procedure TImage.SetPicture(Value: TPicture);
begin
 FPicture.Assign(Value);
end;

procedure TImage.PictureChanged(Sender: TObject);
begin
....
Invalidate;
end;


2: Почему в свойствах которые имеют типы такие как Integer или Boolean и т.д. всегда пишут процедуру "Set..." в которой идет простое присваивание переменной "F..." значения Value и все... почему нельзя сделать так:
property Size: Integer read FSize write FSize;
а делают так:
property Size: Integer read FSize write SetSize;


 
Джо ©   (2006-04-21 20:52) [1]

> 2: Почему в свойствах которые имеют типы такие как Integer
> или Boolean и т.д. всегда пишут процедуру "Set..." в

Отчего же всегда? Вовсе не всегда.


 
Uriy   (2006-04-21 20:57) [2]

Мне пока попадалось во всех случаях... может где-то и не увидел правда... А в чем разница использования и неиспользование "Set..." присваиваться не будет или что?


 
Рамиль ©   (2006-04-21 21:41) [3]


> неиспользование "Set..." присваиваться не будет или что?

Будет. Процедура делается для проверки значения и выполнения каких либо действий. Например, при присвоение Color компонент сразу мняет цвет, а без процедуры это не сделаешь.


 
Desdechado ©   (2006-04-21 21:48) [4]

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


 
Uriy   (2006-04-21 21:53) [5]

вроде как понятно... если нужно выполнить какое-то действие, не только присвоить какое-то значение, но и по ходу с этим изменением сделать еще что-то... вот для это Set используется, а изменение этого свойства ниначно не влияет, то можно и без Set обойтись...
А что вы скажете по первому вопросу? Можно при изменении изображения Invalidate; написать в "SetPicture"?  ведь в этом случае событие OnChange и SetPicture почти одновременно сработают...


 
Uriy   (2006-04-21 21:54) [6]

если быть точнее OnChange сработает после присвоения в SetPicture =))


 
Uriy   (2006-04-21 22:02) [7]

а еще в догонку вопрос когда в Set объявлять пемеменную как const а когда нет? вот например тип TRect?


 
Джо ©   (2006-04-21 23:05) [8]

> [7] Uriy   (21.04.06 22:02)
> а еще в догонку вопрос когда в Set объявлять пемеменную
> как const а когда нет? вот например тип TRect?

Объявляй как const, в нек. случаях приведет к более оптимизированному коду. Хотя именно на счет TRect не уверен, что приведет, но и не помешает точно, хотя бы для ясности.


 
Uriy   (2006-04-22 01:09) [9]

Спасибо


 
Мефисто   (2006-04-22 15:17) [10]

Uriy   (22.04.06 01:09) [9]

Можно было бы обойтись без PictureChanged и реализовать все это в SetPicture?

constructor TImage.Create(AOwner: TComponent);
begin
...
FPicture.OnChange := PictureChanged;
...
end;

Моно, но не нужно т.к. кроме метода SetPicture бывают и другие. Например LoadFromFile. И на вызов подобного метода компонент должен адекватно отреагировать.



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

Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
4-1140538543
Grol
2006-02-21 19:15
2006.05.14
Получить количество и хэндлы потоков у любого процесса


2-1145854596
Task
2006-04-24 08:56
2006.05.14
Чем лучше вывести сложный текст.


1-1144088229
Новочеркасский Волк
2006-04-03 22:17
2006.05.14
Озвучка кнопок.


2-1145709298
Ку Ку
2006-04-22 16:34
2006.05.14
Дополнительная кнопка


3-1142684878
xayam
2006-03-18 15:27
2006.05.14
Проблема с SQL





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