Einzelnen Beitrag anzeigen

Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

Verwendung von TBrush.Bitmap

  Alt 3. Jun 2007, 14:00
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?

  Mit Zitat antworten Zitat