|
Tempo fa avevo trovato in un forum del codice che consentiva di salvare in una
Bitmap (file bmp) l'intero contenuto di un controllo di tipo TScrollBox. Non mi
ricordo la fonte comunque ho sistemato un pò il codice (poche cose, ... proprio
poche) ottenendo una funzione che consente l'esportazione in una bitmap di
qualsiasi controllo di tipo TScrollingWinControl e derivati (quindi ad esempio
tutte le Form e le ScrollBox)
function ScrollControl2Bmp(
ScrollControl: TScrollingWinControl;
BmpFileName: string
): Boolean;
var
Bmp: TBitmap;
R: TRect;
Dc: HDC;
AC: TCanvas;
BmpW: TRect;
P: Integer;
begin
Result := False;
Bmp := TBitmap.Create;
Bmp.Width := ScrollControl.HorzScrollbar.Range + 8;
Bmp.Height := ScrollControl.VertScrollbar.Range + 8;
DC := GetWindowDc(ScrollControl.Handle);
AC := TCanvas.Create;
AC.handle := DC;
ScrollControl.HorzScrollBar.Position := 0;
ScrollControl.VertScrollBar.Position := 0;
Application.ProcessMessages;
R := ScrollControl.ClientRect;
R.Top := 2;
R.Left := 2;
BmpW := R;
repeat
repeat
Application.ProcessMessages;
Bmp.Canvas.CopyRect(BmpW, ac, r);
P := ScrollControl.HorzScrollBar.Position;
ScrollControl.HorzScrollBar.Position := P + 20;
if P <> ScrollControl.HorzScrollBar.Position then
begin
BmpW.Left := Bmpw.Left+20;
BmpW.Right := Bmpw.Right+20;
Application.ProcessMessages;
end;
until P = ScrollControl.HorzScrollBar.Position;
P := ScrollControl.VertScrollBar.Position;
ScrollControl.VertScrollBar.Position := P + 20;
Application.ProcessMessages;
if P <> ScrollControl.VertScrollBar.Position then
begin
BmpW.Top := Bmpw.Top+20;
Bmpw.Bottom := BmpW.Bottom+20;
Bmpw.Left := R.Left;
Bmpw.Right := R.Right;
Application.ProcessMessages;
end;
ScrollControl.HorzScrollBar.Position := 0;
Application.ProcessMessages;
until P = ScrollControl.VertScrollBar.Position;
Bmp.SaveToFile(BmpFileName);
Bmp.Free;
Result := True;
end;
Scroll2Bmp.7z
| |
| |
|