Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Refresh собственного компонента при изменении свойства [D6, XP]


Jimmy ©   (2007-09-09 12:35:00) 

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


{RASkov}   (2007-09-09 18:51:00) [1]

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


{RASkov}   (2007-09-09 18:50:00) [2]

> [11] Jimmy   (09.09.07 13:23)

Пушкин?


engine   (2007-09-09 13:23:00) [3]

> [9] Jimmy   (09.09.07 13:22)

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


Jimmy   (2007-09-09 13:23:00) [4]

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


Jimmy   (2007-09-09 13:22:00) [5]

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


engine   (2007-09-09 13:02:00) [6]

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;


{RASkov}   (2007-09-09 12:59:00) [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;


Jimmy   (2007-09-09 12:57:00) [8]

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


{RASkov}   (2007-09-09 12:52:00) [9]

> [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:00) [10]

Как?


engine   (2007-09-09 12:49:00) [11]

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


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

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


engine   (2007-09-09 12:38:00) [13]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо