![]() |
Eigene Komponte: Delphi stürzt bei der Verwendung ab...
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:
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 |
Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...
Delphi-Quellcode:
procedure TMyPanel.setHintergrund(newPicture: TPicture);
begin // FHindergrundBild:= newPicture; // Falsch !!! FHindergrundBild.Assign(newPicture); // Richtig end; |
Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...
Achja:
Wenn man Delphi nach der Fehlermeldung beendet kommen noch zwei Meldungen Zitat:
Zitat:
|
Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...
Hi,
Delphi-Quellcode:
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...
procedure TMyPanel.setHintergrund(newPicture: TPicture);
begin FHindergrundBild:= newPicture; end; /edit: zu langsam;-) |
Re: Eigene Komponte: Delphi stürzt bei der Verwendung ab...
Wui, das geht ja blitz schnell hier!
Vielen Dank für eure Hilfe! |
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Eigene Komponente -> Komponenten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz