AV i tworzenie komponentu

0

Cześć, mam problem. Tworzę sobie nowy komponent dziedziczący po TWinControl.

Deklaracja konstruktora wygląda tak:

constructor Create(AOwner: TComponent); override;

a konstrulktor wygląda tak:

  inherited Create(AOwner);

  FParentWidth:=Parent.Width;
  FPosition:=0;
  FMove:=0;

  FActive:=false;
  FText:=Name;
  FTransparent:=true;

  FTimerInterval:=1000;
  FTimer.Create(nil);
  FTimer.Interval:=FTimerInterval;
  FTimer.Enabled:=false;
  FTimer.OnTimer:=TimerExecution;

  FFont:=TFont.Create;
  FFont.Color:=clBlack;
  FFont.Name:='Arial';
  FFont.Size:=10;

  FBitmap:=TBitmap.Create;
  FBitmap.Canvas.Font.Assign(FFont);
  FBitmap.Canvas.Brush.Style:=bsClear;
  FBitmap.Canvas.TextOut(0, 0, FText);

  FCanvas:=TCanvas.Create;
  FCanvas.Handle:=GetDC(Handle);
  FCanvas.Draw(Left, Top, FBitmap);
<delphi>

Podczas kładzenia komponentu na formę dostaję AccessViolation... Co może być nie tak?
</delphi>
0

1 to to że nie FTimer.Create(nil) tylko FTimer := klasa.Create(nil);
2 to to że po co tworzysz ten canvas skoro go przypisujesz do canvasa tego komponentu, nie wystarczy ci inherited Canvas ?

0
Adamo napisał(a)

1 to to że nie FTimer.Create(nil) tylko FTimer := klasa.Create(nil);

O fuck, nie zauważyłem :|

2 to to że po co tworzysz ten canvas skoro go przypisujesz do canvasa tego komponentu, nie wystarczy ci inherited Canvas ?

Ale TWinControl nie ma Canvasa...

[dopisanie]
Nadal jest AV :/

0

Bo wywolanie 'Handle' powinno miec komponent rodzica
(to tak aby dzialalo! Parent := TWinControl(AOwner);)
albo wlasnosc WindowHandle

i tez lepiej

FTimer := TTimer.Create(self); //self

oraz ustalic rozmiary bitmapy.

0

mi się wydaje że chodzi o ten canvas, skoro potrzebujesz canvasa to czemu nie dziedziczysz z czegoś co ma, np TGraphicControl

poza tym masz w published jakieś property ? np typu TBitmap / TPicture ?

a i oczywiście ustaw jakieś rozmiary FBitmap bo rysujesz poza obszarem

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