![]() |
Probleme mit TBitmap und Größenänderung
Delphi-Quellcode:
Warum kann ich das Bitmap beim Create verändern, im Resize-Ereigniss nicht? Da stegt er jedesmal mit einer "Zugriffsverletzung bei Adresse..." aus. :(
unit TestBox;
interface uses Classes, ExtCtrls, Graphics; type TTestBox = class(TPaintBox) private { Private-Deklarationen } protected Background: TBitMap; first: boolean; { Protected-Deklarationen } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure paint; override; procedure Resize; override; published { Published-Deklarationen } end; procedure Register; implementation procedure TTestBox.Resize; begin Background.Width:=Width; Background.Height:=Height; background.Canvas.Ellipse(0,0,Width,Height); inherited Resize; end; constructor TTestBox.Create(AOwner: TComponent); begin inherited Create(AOwner); Background:= tbitmap.Create; Background.Width:=Width; Background.Height:=Height; background.Canvas.Ellipse(0,0,Width,112); end; procedure TTestBox.Paint; begin inherited paint; canvas.Draw(0,0,background); end; destructor TTestBox.Destroy; begin background.Free; inherited Destroy; end; procedure Register; begin RegisterComponents('Beispiele', [TTestBox]); end; end. |
Mal ehrlich, dass es überhaupt jemals gut geht ist schon verwunderlich, sorry. :) Folgender Abschnitt:
Delphi-Quellcode:
Als erstes rufst Du bereits inherited... auf, was eigentlich okay ist, aber intern wird auch sofort Resize aufgerufen. Dein Resize nutzt dann background, was noch nicht initialisiert ist (also nil) -> Zugriffsverletzung,
constructor TTestBox.Create(AOwner: TComponent);
begin inherited Create(AOwner); Background:= tbitmap.Create; Background.Width:=Width; Background.Height:=Height; background.Canvas.Ellipse(0,0,Width,112); end;
Delphi-Quellcode:
Ändere Dein Create wie folgt, und alles sollte laufen
procedure TTestBox.Resize;
begin Background.Width:=Width; Background.Height:=Height; background.Canvas.Ellipse(0,0,Width,Height); inherited Resize; end;
Delphi-Quellcode:
...:cat:...
constructor TTestBox.Create(AOwner: TComponent);
begin Background:= tbitmap.Create; inherited Create(AOwner); end; |
thx, es klappt :) und dabei wollt ich mich doch nur an die hilfe halten:
Delphi-Quellcode:
constructor TWrapMemo.Create(AOwner: TComponent);*****{ Dies kommt nach der Implementierung }
begin **inherited Create(AOwner);***************************{ Diesen Schritt IMMER zuerst! } **WordWrap := False;**********************************{ Neuen Wert setzen } *end; |
Einige Sachen muss man halt etwas salzen, bevor diese genießbar sind :D
...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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