Było w google - http://haker.com.pl/threads/14420-b%C5%82%C4%85d-przy-screenie - ale niestety bez rozwiązania...
Ten sam problem, w innej aplikacji działa bez problemu, funkcja i deklaracje identycznie
function ZrobScr(gdziezapisac : ShortString; jakoscscreena : Integer; Szybkosc : Boolean = TRUE; Blokuj : Boolean = FALSE) : Boolean;
var
JPG : TJPEGImage;
X, Y, XS, YS : Integer;
Locked : Boolean;
Canvas : TCanvas;
Bmp1 : TBitmap;
R : TRect;
const
cTileSize = 50;
begin
try
try
ZrobScr := TRUE;
Canvas := TCanvas.Create;
Canvas.Handle := GetWindowDC(GetDesktopWindow);
BMP1 := TBitmap.Create;
BMP1.Width := Screen.Width; // wywala błąd "Record, object or class type required"
BMP1.Height := Screen.Height; // to samo. W innej aplikacji identyczna funkcja - bez błędu...
If Blokuj then Locked := Canvas.TryLock else Locked := FALSE;
try
XS := Pred(Screen.Width div cTileSize);
if Screen.Width mod cTileSize > 0 then
Inc(XS);
YS := Pred(Screen.Height div cTileSize);
if Screen.Height mod cTileSize > 0 then
Inc(YS);
for X := 0 to XS do
for Y := 0 to YS do
begin
R := Rect(
X * cTileSize, Y * cTileSize, Succ(X) * cTileSize,
Succ(Y) * cTileSize);
BMP.Canvas.CopyRect(R, Canvas, R);
end;
finally
if Locked then Canvas.Unlock;
ReleaseDC(0, Canvas.Handle);
Canvas.Free;
end;
JPG := TJPEGImage.Create;
JPG.Assign(BMP1);
If szybkosc then JPG.Performance := jpBestSpeed else JPG.Performance := jpBestQuality;
If jakoscscreena > 100 then jakoscscreena := 100;
If jakoscscreena < 1 then jakoscscreena := 1;
JPG.CompressionQuality := jakoscscreena;
JPG.Compress;
JPG.SaveToFile(gdziezapisac);
except
ZrobScr := FALSE;
end;
finally
JPG.Free;
BMP1.Free;
end;
end;
Ewentualnie mogę przenieść całą aplikację do nowej, ale wolałbym wiedzieć, czemu to nie działa...
Screen
znajduje się w module Forms... A widzisz chociaż klasę TScreen?