Witam. Mam taki problem. Poniższy kod działa poprawnie i zapisuje wygląd kontrolki do pliku JPG,
ale robi to poprawnie tylko jeżeli formatka jest widoczna. A ja chciałbym też mieć te możliwośc
gdy formatka jest zminimalizowana, a zrzut uaktuwnia timer. Wtedy w zapisanym pliku jpg jest
tylko fragment ekranu o wymiarach takich jak komponent do zrzutu, ale zawiera jakiś wycinek
ekranu, a nie o to chodzi. Może ktoś z Was podpowie, jak zmodyfikować poniższy kod aby w
pliku jpg uzyskać komponent. Ewentualnie jak na chwile pokazać całą formatkę, zrobić zrzut i
ją schować. Próbowałem wątku, pokazywania w nim po czym wywołania tej procedury, no a
na końcu Close. Ale plik dalej zawierał wycinek ewentualnie niekompletny zrzut komponentu,
bez narysowanych na nim Canvas.TextOut tekstów. Zrzucany komponent jest pochodaną od
ScrollBoxa, wzbogaconą o Canvas, a do tego zawiera utworzone na nim dynamiczne - jako
Parent - ALProgressBary. Zależy mi aby całość odwzorowała się jak przy widocznej formatce.
procedure TWykresForm.SaveWinControlToJpg(SourceControl: TWinControl; FileName: string);
procedure WinControlToBitmap(SourceControl: TWinControl; DestBitmap: TBitmap);
var
Dest, Src : TRect;
begin
Src := Rect(SourceControl.Left, SourceControl.Top, SourceControl.Left + SourceControl.Width, SourceControl.Top + SourceControl.Height);
Dest := Rect(0, 0, SourceControl.Width, SourceControl.Height);
DestBitmap.Width := SourceControl.Width;;
DestBitmap.Height := SourceControl.Height;
DestBitmap.Canvas.CopyRect(Dest, WykresForm.Canvas, Src);
end;
var
Bmp : TBitmap;
Jpg : TJpegImage;
begin
if FileName = '' then
begin
Exit;
end;
Bmp := TBitmap.Create;
Jpg := TJPEGImage.Create;
WinControlToBitmap(SourceControl, Bmp);
Jpg.Assign(Bmp);
try
Jpg.SaveToFile(FileName);
finally
Bmp.Free;
Jpg.Free;
end;
end;