Это просто очень простой пример конкретного случая, но, тем не менее, это очень распространенный случай.
Если у вас есть визуальный элемент управления, вам может потребоваться перекрасить элемент управления при изменении переменной/имущество.Например, предположим, что у вашего элемента управления есть BackgroundColor
переменная / свойство.
Самый простой способ добавить такую переменную / свойство - позволить ей быть публичной переменной:
TMyControl = class(TCustomControl)
public
BackgroundColor: TColor;
...
end;
А в процедуре TMyControl.Paint
вы рисуете фон, используя значение BackgroundColor
.Но это не делает этого.Потому что, если вы изменяете переменную BackgroundColor
экземпляра элемента управления, элемент управления не перерисовывается сам.Вместо этого новый цвет фона не будет использоваться до следующего перерисовывания элемента управления по какой-либо другой причине.
Таким образом, вы должны сделать это следующим образом:
TMyControl = class(TCustomControl)
private
FBackgroundColor: TColor;
public
function GetBackgroundColor: TColor;
procedure SetBackgroundColor(NewColor: TColor);
...
end;
где
function TMyControl.GetBackgroundColor: TColor;
begin
result := FBackgroundColor;
end;
procedure TMyControl.SetBackgroundColor(NewColor: TColor);
begin
if FBackgroundColor <> NewColor then
begin
FBackgroundColor := NewColor;
Invalidate;
end;
end;
и затем программист, использующий элемент управления, должен использовать MyControl1.GetBackgroundColor
для получения цвета и MyControl1.SetBackgroundColor
для его установки.Это неловко.
Используя свойства, вы можете получить лучшее из обоих миров.Действительно, если вы сделаете
TMyControl = class(TCustomControl)
private
FBackgroundColor: TColor;
procedure SetBackgroundColor(NewColor: TColor);
published
property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor;
end;
...
procedure TMyControl.SetBackgroundColor(NewColor: TColor);
begin
if FBackgroundColor <> NewColor then
begin
FBackgroundColor := NewColor;
Invalidate;
end;
end;
, то
- с точки зрения программиста, он может как прочитать, так и установить цвет фона, используя один идентификатор, свойство
MyControl1.BackgroundColor
и - элемент управления перекрашивается при его установке!