Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TScrollBox: in den Hintergrund zeichnen (Canvas) (https://www.delphipraxis.net/74512-tscrollbox-den-hintergrund-zeichnen-canvas.html)

sieppl 4. Aug 2006 10:53


TScrollBox: in den Hintergrund zeichnen (Canvas)
 
Hi!

Ich versuche eine Scrollbox-Komponente zu bekommen, die einen Canvas besitzt.
Folgendes Beispiel ist aus einer Newsgroup:
Delphi-Quellcode:
  TCanvasScrollBox = class(TScrollBox)
  private
    FCanvas: TCanvas;
  protected
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_EraseBkgnd;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure PaintWindow(DC: HDC); override;
    procedure Paint; virtual;
    property Canvas: TCanvas read FCanvas;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

constructor TCanvasScrollBox.Create(AOwner: TComponent);
begin
  inherited;
  FCanvas := TControlCanvas.Create;
  TControlCanvas(FCanvas).Control := Self;
end;

destructor TCanvasScrollBox.Destroy;
begin
  FCanvas.Free;
  inherited;
end;

procedure TCanvasScrollBox.Paint;
begin
  Canvas.TextOut(0,0, 'TEST TEST TEST');
end;

procedure TCanvasScrollBox.PaintWindow(DC: HDC);
begin
  inherited;
  FCanvas.Lock;
  try
    FCanvas.Handle := DC;
    try
      Paint;
    finally
      FCanvas.Handle := 0;
    end;
  finally
    FCanvas.Unlock;
  end;
end;

procedure TCanvasScrollBox.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
  Message.Result := 1;
end;

procedure TCanvasScrollBox.WMPaint(var Message: TWMPaint);
begin
  PaintHandler(Message);
end;
Problem:
Der Text (hier als Beispiel) erscheint nicht. Desweiteren wird der Hintergrund nicht gelöscht.
Letzeres ist ja gewollt, da man diesen durch ein eigenes Bild ersetzen möchte, aber es klappt ja nicht.
Ich habe eine Weile herumprobiert, aber bekomme es nicht hin. :twisted:
Vielleicht interessiert es ja noch jemanden..

Grüße

Sebastian

PS: Klar könnte man auch eine Paintbox oder sonst was hineinlegen, aber umschiffen wollen wir es nicht.. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 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