[Delphi] FillRect problem z metoda Paint z rysowaniem

0

Mam problem z napisaniem poprawnie procedury Paint we własnym komponencie. Procedurą Paint chciałem się posłużyć do namalowania wyglądu mojego komponentu przy pomocy funkcji FillRect oraz FrameRect lecz coś jest nie tak ponieważ w momencie kiedy od komentuje obojętnie którą funkcję i skompiluje komponent a następnie spróbuje go umieścić na formatce wyskakuje błąd o treści: "Control '' has no parent" mimo że zmienna FCanvas w konstruktorze klasy jest powołana do "życia" a wygląda to tak:

constructor TXXX.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCanvas:=TControlCanvas.Create;
  TControlCanvas(FCanvas).Control:=Self; 
  Color:=clBlue;
  Width:=150;
  Height:=20;
end;
destructor TXXX.Destroy;
begin
  FCanvas.Free;
  inherited Destroy;
end;
procedure TXXX.Paint;
var plotno,ramka:TRect;
begin
  with Canvas do
  begin
    plotno:=Rect(0-1,0,Width,Height);
    Brush.Color:=clBtnFace;
    FillRect(plotno);
    ramka:=Rect(0,0,Width,Height);
    Brush.Color:=clBlack;
    FrameRect(Rect(0,0,Width,Height));
  end;
end;
procedure TXXX.SetColor(Val: TColor);
begin
  if Val <> FColor then
  FColor:=Val; Paint;
end;

Przy czym pole Canvas zadeklarowane jest w sekcji Public jako property.
I moje pytanie brzmi: Dlaczego przy wstawianiu komponentu na formatke otrzymuje w.w. komunikat błędu oraz gdzie mam źle. Proszę o pomoc.

0

Najpierw tworzysz FCanvas, a potem używasz Canvas. Zdecyduj się.
Poza tym, popatrz, jak to jest zrobione w innych komponentach. Np. TCustomLabel. Możliwe, że będziesz musiał iść niżej w hierarchii.

0

Zapomniałem dodać że komponent dziedziczy po TWinControl oraz że potrzebuje Canvas-a do namalowania wyglądu komponentu wiec musze sobie go stworzyć bo klasa TWinControl tego nie udostępnia ;(

0

mam problemy z zalogowaniem sie wiec bede pisal jako gosc ok.

0

Nie sprawdzałem, czy TWinControl nie ma, ale dlaczegoby nie użyć TCustomControl jako rodzica? Z tego co wiem, to właśnie tego powinno się używać jako rodzica dla nowych komponentów wizualnych.

Poza tym po raz kolejny: Tworzysz FCanvas, a używasz Canvas (nazewnictwo!).

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