Moin moin!
Ich versuche gerade, mir eine Art Balkenkomponente zu schreiben. Dieser Balken soll diagonal schraffiert sein und was Delphi da an hauseigenen BrushStyles mitbringt sieht mir persönlich einfach zu dämlich aus!
Deshalb muss ein eigener BrushStyle her, schön und gut, mit der TBrush.Bitmap property sollte das ja auch kein Problem sein...
Allerdings scheitere ich an der Umsetzung und die Delphi
IDE stürzt mehr oder weniger ständig ab wenn ich versuche meine Komponente zu testen.
Hier die essentiellen Code-Teile:
Klassendeklaration
Delphi-Quellcode:
TVBBrushedLine = class(TCustomControl)
private
fBrushStyle: TBrushStyle;
fLineStyle: TPenStyle;
fBrushColor, fLineColor: TColor;
fBrushBitmap: TPicture;
procedure SetBrushStyle(const ABrushStyle: TBrushStyle);
procedure SetBrushColor(const AColor: TColor);
procedure SetLineStyle(const APenStyle: TPenStyle);
procedure SetLineColor(const AColor: TColor);
procedure SetBrushBitmap(const ABitmap: TPicture);
procedure DrawBrushedLine;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
published
property BrushStyle: TBrushStyle read fBrushStyle write SetBrushStyle;
property BrushColor: TColor read fBrushColor write SetBrushColor;
property LineStyle: TPenStyle read fLineStyle write SetLineStyle;
property LineColor: TColor read fLineColor write SetLineColor;
property BrushBitmap: TPicture read fBrushBitmap write SetBrushBitmap;
end;
Konstruktor
Delphi-Quellcode:
constructor TVBBrushedLine.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fBrushBitmap := TPicture.Create;
end;
Setter
Delphi-Quellcode:
procedure TVBBrushedLine.SetBrushBitmap(const ABitmap: TPicture);
begin
fBrushBitmap.Assign(ABitmap.Bitmap);
Paint;
end;
Zeichen-Methode
Delphi-Quellcode:
procedure TVBBrushedLine.DrawBrushedLine;
begin
if Parent = nil then
Exit;
Canvas.Brush.Style := BrushStyle;
Canvas.Brush.Color := BrushColor;
Canvas.Pen.Style := LineStyle;
//if fBrushBitmap.Bitmap.Empty = false then Canvas.Brush.Bitmap.Assign(fBrushBitmap.Bitmap);
Canvas.Rectangle(0, 0, Width, Height);
Canvas.Brush.Bitmap.Free;
end;
Ohne die kommentierte Zeile funktioniert alles wie es soll, nur eben ohne den individuellen BrushStyle. Kommentiere ich die Zeile aus, hagelt es bei der Verwendung Fehler ala "Lesen von Adresse 000000" oder auch "Listenindex überschreitet das Maximum" (WTF???). Manchmal schmiert dann auch noch die DelphiSpeeUpErweiterung ab und ich muss Delphi via TaskManager killen
So macht Komponentenentwicklugn keinen Spaß
Was habe ich übersehen, vergessen, oder was mache ich falsch?