Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

Refresh собственного компонента при изменении свойства   Найти похожие ветки 

 
Jimmy   (2007-09-09 12:35) [0]

Добрый день! Делаю свой компонент - цветную кнопку. Что нужно сделать, чтобы при изменении какого-нибудь свойства (например, округлость углов) кнопка автоматически перерисовывалась бы? Чтобы каждый раз потом не писать:
ColorButton1.RoundCorner:=True;
ColorButton1.Refresh;{!!!}
Заранее спасибо.


 
engine ©   (2007-09-09 12:38) [1]

Рэй Конопка "Создание оригинальных компонент в среде DELPHI"


 
Jimmy   (2007-09-09 12:44) [2]

А поконкретней нельзя?


 
engine ©   (2007-09-09 12:49) [3]

Так, а в чем собственно проблема-то?
Реализуй это в методах доступа к свойствам класса.


 
{RASkov} ©   (2007-09-09 12:52) [4]

> [0] Jimmy   (09.09.07 12:35)
> Чтобы каждый раз потом не писать:
> ColorButton1.RoundCorner:=True;
> ColorButton1.Refresh;{!!!}

А ты как хотел?
При изменении какого либо свойства, которое влияет на визуальную часть компонента, необходимо сообщить что бы его перерисовали.
Только не Refresh, а Invalidate.

> [2] Jimmy   (09.09.07 12:44)
> А поконкретней нельзя?

Вот там [1] все и поконкретнее :)


 
Jimmy   (2007-09-09 12:52) [5]

Как?


 
Jimmy   (2007-09-09 12:57) [6]

То есть как реализовать это в методах доступа к свойствам класса?


 
{RASkov} ©   (2007-09-09 12:59) [7]

> [5] Jimmy   (09.09.07 12:52)

Что значит как?

procedure TMyComponent.SetRoundCorner(Value: Boolean);
begin
 if FRoundCorner=Value then Exit;
 FRoundCorner:=Value;
 Invalidate;
end;

FRoundCorner - поле в твоем компоненте - FRoundCorner: Boolean;
и должно быть свойство:
property RoundCorner: Boolean; read FRoundCorner write SetRoundCorner;


 
engine ©   (2007-09-09 13:02) [8]

TMyClass = class
private
 FColor : TColor;
protected
 function  GetColor : TColor;
 procedure SetColor ( Value : TColor);
public
 property Color : TColor read GetColor write SetColor;
end;

function TMyClass.GetColor : TColor;
begin
 Result := FColor;
end;

procedure TMyClass.SetColor ( value : TColor );
begin
 if value <> FColor then
 FColor := value;

 ... // Тут можешь добавить функциональность к методу
end;


 
Jimmy   (2007-09-09 13:22) [9]

Все сделал. Но при изменении свойства
RoundCorner:=True;
перерисовки все равно не происходит.


 
engine ©   (2007-09-09 13:23) [10]

> [9] Jimmy   (09.09.07 13:22)

Ошибка в 17-й строке.


 
Jimmy   (2007-09-09 13:23) [11]

А кто будет вызывать процедуру SetRoundCorner?


 
{RASkov} ©   (2007-09-09 18:50) [12]

> [11] Jimmy   (09.09.07 13:23)

Пушкин?


 
{RASkov} ©   (2007-09-09 18:51) [13]

Покажи как сделал...



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

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
3-1180274821
Nic
2007-05-27 18:07
2007.10.07
Импортировать базу даненых в SQL Server 2000


1-1185116122
Al_delta
2007-07-22 18:55
2007.10.07
TreeView: неправильно создаются дочерние узлы. Помогите!


4-1176088521
Alex_AA
2007-04-09 07:15
2007.10.07
Как определить размер монитора?


2-1189587255
RomanH
2007-09-12 12:54
2007.10.07
Замена TEdit->TDBEditEh


9-1161197262
Nic
2006-10-18 22:47
2007.10.07
Самые лучшие заголовки к OpenGL