AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi AV bei Verwendung eines TPictures in meiner Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

AV bei Verwendung eines TPictures in meiner Komponente

Ein Thema von Andreas L. · begonnen am 7. Aug 2007 · letzter Beitrag vom 7. Aug 2007
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

AV bei Verwendung eines TPictures in meiner Komponente

  Alt 7. Aug 2007, 11: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
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: AV bei Verwendung eines TPictures in meiner Komponente

  Alt 7. Aug 2007, 11:11
Zitat:
property BackgroundImage: TPicture read fBackgroundImage write fBackgroundImage;
Der Zugriff auf Pbjekteigenschaften sollte nicht per Überschreiben, sondern per assign erfolgen. Deklariere also eine Settermethode (Getter ist nicht notwendig). Sonst gibt es auch Speicherlecks.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: AV bei Verwendung eines TPictures in meiner Komponente

  Alt 7. Aug 2007, 11:42
Da hätte ich selbst draufkommen müssen

Danke

Warum sieht eigentlich die Eigenschaft der Klasse im Objektinspektor so komisch aus (siehe Anhang)?
Miniaturansicht angehängter Grafiken
oi_divlayer_243.png  
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: AV bei Verwendung eines TPictures in meiner Komponente

  Alt 7. Aug 2007, 13:13
Die Eigenschaft Background von TDivLayer sollte nicht schreibbar sein. Dann sollte es richtig aussehen. Und ich glaube es sollte reichen THTMLBackground von TPersistent abzuleiten und nicht von TComponent.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz