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.
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..