AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Eigene Komponte: Delphi stürzt bei der Verwendung ab...

Eigene Komponte: Delphi stürzt bei der Verwendung ab...

Ein Thema von Ares · begonnen am 6. Mär 2007 · letzter Beitrag vom 6. Mär 2007
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Eigene Komponte: Delphi stürzt bei der Verwendung ab...

  Alt 6. Mär 2007, 16:01
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...

  Alt 6. Mär 2007, 16:03
Delphi-Quellcode:
procedure TMyPanel.setHintergrund(newPicture: TPicture);
begin
// FHindergrundBild:= newPicture; // Falsch !!!
   FHindergrundBild.Assign(newPicture); // Richtig
end;
Andreas
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#3

Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...

  Alt 6. Mär 2007, 16:04
Achja:

Wenn man Delphi nach der Fehlermeldung beendet kommen noch zwei Meldungen

Zitat:
Ungültige Zeigeroperation
und

Zitat:
Zugriffsverletzung bei Adresse 51f265C4 in Modul 'rtl100.bpl'. Lesen von Adresse FFFFFFFF.
Und ich verwende Delphi 2006 Pro.
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...

  Alt 6. Mär 2007, 16:09
Hi,

Delphi-Quellcode:
procedure TMyPanel.setHintergrund(newPicture: TPicture);
begin
   FHindergrundBild:= newPicture;
end;
Hier übernimmst du den Zeiger auf newPicture in deine Komponenten-Variable. Da dabei dein im Constructor erzeugtes Objekt nicht mehr referenziert, kasst du es später nicht mehr freigeben. Das ist aber nicht der Grund für die AVs. Evtl. wird das als Parameter übergebene TPicture wieder freigegeben, dann kann die Referenz in deiner Komponente nicht damit zeichnen...

/edit: zu langsam
Gruß
Norman
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#5

Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...

  Alt 6. Mär 2007, 16:12
Wui, das geht ja blitz schnell hier!

Vielen Dank für eure Hilfe!
  Mit Zitat antworten Zitat
6. Mär 2007, 18:19
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Eigene Komponente -> Komponenten
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:46 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