Einzelnen Beitrag anzeigen

Andreas L.
(Gast)

n/a Beiträge
 
#1

AV bei Verwendung eines TPictures in meiner Komponente

  Alt 7. Aug 2007, 12:07
Hi,
ich habe mir eine neue Komponente erstellt. Diese enthält im Objektinspektor wiederum eine Klasse die ein TPicture als property enthält. Noch läuft alles ohne Probleme, lade ich aber ein Bild in diese Eigenschaft und klicke auf eine andere Eigenschaften oder irgendwo anders aus die Form, bekomme ich folgende AV:

Zitat:
---------------------------
Fehler
---------------------------
Zugriffsverletzung bei Adresse 6946540C. Lesen von Adresse 6946540C.
---------------------------
OK Details >>
---------------------------
Danach die hier:
Zitat:
---------------------------
Fehler
---------------------------
Zugriffsverletzung bei Adresse 20F29C20 in Modul 'designide100.bpl'. Lesen von Adresse 4F444E49.
---------------------------
OK Details >>
---------------------------
Und die wiederholen sich solange bis ich die IDE abschieße...

Hier mein Code:

HTMLUtils.pas (enthält Klasse und Definitionen die auch in anderen Komponenten verwendet werden sollen):
Delphi-Quellcode:
...
type
  THTMLBackground = class(TComponent)
  private
   fBackgroundImage: TPicture; //Variable für das Bild
   fBackgroundColor: TColor;
   fBackgroundPosition: THTMLBackgroundPosition;
   fBackgroundPositionInPixels: Integer;
   fBackgroundRepeat: THTMLBackgroundRepeat;
  published
   property BackgroundImage: TPicture read fBackgroundImage write fBackgroundImage; //und die Eigenschaft für den OI
   property BackgroundColor: TColor read fBackgroundColor write fBackgroundColor;
   property BackgroundPosition: THTMLBackgroundPosition read fBackgroundPosition write fBackgroundPosition;
   property BackgroundPositionInPixels: Integer read fBackgroundPositionInPixels write fBackgroundPositionInPixels;
   property BackgroundRepeat: THTMLBackgroundRepeat read fBackgroundRepeat write fBackgroundRepeat;
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
  end;
...
...
{ THTMLBackground implementation }

constructor THTMLBackground.Create(AOwner: TComponent);
begin

 inherited Create(AOwner);

 fBackgroundImage := TPicture.Create; //Bild wird erstellt
 fBackgroundColor := clNone;
 fBackgroundPosition := [hbpLeft];
 fBackgroundPositionInPixels := 0;
 fBackgroundRepeat := hbrRepeat;

end;

destructor THTMLBackground.Destroy;
begin

 fBackgroundImage.Free; //Bild wird freigegeben

 inherited Destroy;

end;
DivLayer.pas (Die eigentliche Komponente):
Delphi-Quellcode:
type
  TDivLayer = class(TCustomPanel)
  private
    fBorders: THTMLBorder;
    fBackground: THTMLBackground;
    procedure SetBorders(Value: THTMLBorder);
    procedure SetBackground(Value: THTMLBackground);
  published
    property Borders: THTMLBorder read fBorders write SetBorders;
    property Background: THTMLBackground read fBackground write SetBackground; //Klasse wird als Eigenschaft deklariert
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

...
{ TDivLayer implementation }

constructor TDivLayer.Create(AOwner: TComponent);
begin

 inherited Create(AOwner);

 fBorders := THTMLBorder.Create(Self);
 fBackground := THTMLBackground.Create(Self); //Klasse wird erstellt

end;

destructor TDivLayer.Destroy;
begin

 fBorders.Free;
 fbackground.Free; // und freigegeben...

 inherited Destroy;

end;
Hat jemand eine Idee?
  Mit Zitat antworten Zitat