Jak zmienić właściwość

0

Mam pytanie czy ktoś pisał komponent w którym właściwość width dziedziczona z TCustomPanel zmieniał inną właściwością oraz ta właściwość zmieniała width, mianowicie dziedziczę po TCustomPanel i do property dorzuciłem PageWidth i chcę zmieniając PageWidth by zmieniał się Width i odwrotnie.

0

No dobrze, a gdzie jest problem?

0

TCustomPiotruoCad = class(TCustomPanel)
private
...
FPageHeight: Cardinal;
FPageWidth: Cardinal;
FZoom: Double;
procedure SetPageHeight(Value: Cardinal);
procedure SetPageWidth(Value: Cardinal);
procedure SetZoom(Value: Double);
public
...
constructor Create(Aowner:Tcomponent); override;
destructor Destroy; override;
property PageWidth: Cardinal read FPageWidth write SetPageWidth;
property PageHeight: Cardinal read FPageHeight write SetPageHeight;
property Zoom: Double read FZoom write SetZoom;
end;

procedure TGridObject.SetGridWidth(Value: Double);
begin
FGridWidth:= Value;
width:= 2*FGridWidth;
end;

i jak teraz stworzyć metode która wraz ze zmianą "width" i "height" szerokosc i długość panela bedzie zmieniała FPageHeight lub FPageWidth odwrotnie to w metodach SetPageHeight i SetPageWidth ustalam width i height a do metod width i height z klasy TControl nie mam dostępu i nie mogę ich nadpisać swoimi metodami bo wtedy jest błąd i komponent nie działa

0
piotruo0 napisał(a)

TCustomPiotruoCad = class(TCustomPanel)
private
...
FPageHeight: Cardinal;
FPageWidth: Cardinal;
FZoom: Double;
procedure SetPageHeight(Value: Cardinal);
procedure SetPageWidth(Value: Cardinal);
procedure SetZoom(Value: Double);
public
...
constructor Create(Aowner:Tcomponent); override;
destructor Destroy; override;
property PageWidth: Cardinal read FPageWidth write SetPageWidth;
property PageHeight: Cardinal read FPageHeight write SetPageHeight;
property Zoom: Double read FZoom write SetZoom;
end;

procedure TCustomPiotruoCad.SetPageWidth(Value: Double);
begin
FGridWidth:= Value;
width:= 2*FGridWidth;
end;

i jak teraz stworzyć metode która wraz ze zmianą "width" i "height" szerokosc i długość panela bedzie zmieniała FPageHeight lub FPageWidth odwrotnie to w metodach SetPageHeight i SetPageWidth ustalam width i height a do metod width i height z klasy TControl nie mam dostępu i nie mogę ich nadpisać swoimi metodami bo wtedy jest błąd i komponent nie działa

0

A próbowałeś stworzyć swoje właściwości o nazwie Width i Height? Nie daję gwarancji, że to przejdzie, bo całe wieki już komponentów nie tworzyłem, ale spróbować nie zaszkodzi. Ew. jeśli to nie przejdzie, to może przeładowanie metod dostępowych do tych właściwości klasy bazowej? Wiem, że niekonkretnie, ale nie bardzo zrozumiałem, czego dokładnie nie możesz nadpisać :)

0

Dzięki poradziłem sobie uwierzyłem w to co pisałeś by nadpisać właściwość i się udało co prawda trzeba pamiętać by po nadpisaniu właściwości do rodzica odwoływać się za pomocą "inherited Width"

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0