Hallo!
Ich habe bis jetzt nur mit Delphi "rumprogrammier" und will mich jetzt mal etwas tiefer damit beschäfitgen. Daher will ich mal eine eigene Komponent schreiben. Für den Anfang habe ich mir überlegt, dass eine Panel mit einer Hintergrundgrafik ganz praktisch sein könnte.
Ich habe also folgendes geschrieben;
Delphi-Quellcode:
unit MyPanelUnit;
interface
uses ExtCtrls, Graphics, Classes;
type
TMyPanel =
class(TPanel)
private
{ private-Deklarationen }
FHindergrundBild: TPicture;
// Setter
procedure setHintergrund(newPicture: TPicture);
protected
{ protected-Deklarationen }
procedure Paint;
override;
public
{ public-Deklarationen }
Canvas;
constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
published
{ published-Deklarationen }
property HintergrundBild: TPicture
read FHindergrundBild
write setHintergrund;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Eigene', [TMyPanel]);
end;
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHindergrundBild:= TPicture.Create;
end;
destructor TMyPanel.Destroy;
begin
FHindergrundBild.Free;
inherited;
end;
procedure TMyPanel.Paint;
begin
inherited;
if FHindergrundBild<>
nil then Canvas.Draw(0,0,FHindergrundBild.Graphic);
//Canvas.TextOut(10,10, 'test');
Canvas.Refresh;
end;
procedure TMyPanel.setHintergrund(newPicture: TPicture);
begin
FHindergrundBild:= newPicture;
end;
end.
Das Ganze lässt sich kompilieren und als Komponente in Delphi insatllieren. Ich kann auch ein TMyPanel auf eine Form setzten. Wenn ich dann aber weiter arbeite und dem Panel ein Hintergrundbild zuweise stürzt Delphi ab:
Zitat:
Zugriffsverletzung bei Adresse 4728FFCC. Lesen von Adresse 4728FFCC.
Was Stimmt an der Komponente nicht? Wo liegt mein Fehler?
Wenn ich kein Bild auf das Panel male sondern nur Text ausgebe (Canvas.TextOut(10,10, 'test')
funktioniert das fehlerfrei. Wenn ich mit Form1.Canvas.Draw(0,0,Image1.Graphic); auf ein Form zeiche klappt das ebenfalls wunderbar.
Wie gesagt, das wäre meine erste eigene Komponente... Für einen Hinweis was nicht stimmt wäre ich sehr dankbar.
Gruß
Ares