![]() |
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:
Problem:
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; 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 10:15 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 by Thomas Breitkreuz