Rozumiem, że chcesz zapisać także to co nie jest widoczne na ScrollBoxie, więc może pomoże tutaj
Tobie komponent, który stworzyłem na bazie TScrollBoxa, który dodatkowo posiada Canvas, możesz
po nim rysować jak i ustawić we własności Bitmap - obraz Birmapę po niej rysujesz i dzięki temu, po
na przykład zminimalizowaniu programu i przywróceniu go - ten ScrollBox zawiera to co narysowałeś.
Używałem go w pewnym programie do wzbogacenia wykresów w postaci pionowych AlProgressBar
o dodatkowy tekst pod różnym kątem i sprawdziło się to dobrze. Ale nie wiem czy Tobie będzie grało :)
unit canvasedscrollbox;
interface
uses
Windows, Messages, Classes, Controls, Forms, Graphics;
type
TCanvasedScrollBox = class(TScrollBox)
private
FBmp: TBitmap;
FCanvas: TCanvas;
procedure SetBitmap(Value: TBitmap);
protected
procedure WMPaint(var Message: TMessage); message WM_PAINT;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Bitmap: TBitmap read FBmp write SetBitmap;
property Canvas: TCanvas read FCanvas;
end;
implementation
constructor TCanvasedScrollBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csSetCaption, csDoubleClicks];
Width := 185;
Height := 41;
BorderStyle := bsSingle;
FBmp := TBitmap.Create;
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;
end;
destructor TCanvasedScrollBox.Destroy;
begin
FBmp.Free;
FCanvas.Free;
inherited Destroy;
end;
procedure TCanvasedScrollBox.SetBitmap(Value: TBitmap);
begin
FBmp.Assign(Value);
SendMessage(Handle, WM_PAINT, 0, 0);
end;
procedure TCanvasedScrollBox.WMPaint(var Message: TMessage);
begin
if Assigned(FBmp) then
Canvas.Draw(0, 0, FBmp);
inherited;
end;
end.