Jak zrobić zrzut ekranu do komponentu TImage

TeWuX

Jak zrobić zrzut ekranu do komponentu TImage ?

procedure TForm1.SnapShot(var Img : TImage; L,G,P,D : integer);
var ScreenDC : HDC;
    ImageDC  : HDC;
begin
  Form1.Hide;
  sleep(200);
  ScreenDC := GetWindowDC(0);
  Img.Picture.Bitmap.Height := D-G;
  Img.Picture.Bitmap.Width  := P-L;
  ImageDC  := Img.Picture.Bitmap.Canvas.Handle;
  BitBlt(ImageDC, 0, 0,P-L, D-G , ScreenDC, 0, 0, SrcCopy);
  Image1.Refresh;
  Form1.Show;
end;

1 linia: ukrywamy formę aby nie było jej widać na zrzucie
2 linia: dajemy czas na ukrycie formy (można dać mniej)
3 linia: pobieramy uchwyt pulpitu
4 linia: ustawiamy wysokość Bitmapy
5 linia: ustawiamy szerokość Bitmapy
6 linia: pobieramy uchwyt płótna (canvas) od Image
7 linia: kopiujemy zawartość pulpitu na płótno
8 linia: odświeżamy Image
9 linia: pokazujemy formę

opis funkcji:
BitBlt(docelowy uchwyt : HDC,
docelowy lewy-górny punkt, oś X : integer,
docelowy lewy-górny punkt, oś Y : integer,
szerokość : integer,
wysokość : integer,
źródłowy uchwyt : HDC,
źródłowy lewy-górny punkt, oś X : integer,
źródłowy lewy-górny punkt, oś Y : integer,
rodzaj operacji : cardinal);

11 komentarzy

Jak zapisać rysunek, rysunki po formie do bitmapy, pliku ? Jak zrobić zrzut formy do bitmapy, pliku ?
można użyć bitmapy pamięciowej

var
Bitmap : TBitmap;
II,XX,YY,WW,HH : Integer;
Czerwony, Zielony, Niebieski : Integer;

Self.ClientWidth:=500;
Self.ClientHeight:=500;

Bitmap:=TBitmap.Create;
Bitmap.Width:=500;
Bitmap.Height:=500;
for II:=0 to 19 do begin
XX:= Random(400);
YY:= Random(400);
WW:= Random(100) + 50;
HH:= Random(100) + 50;
Czerwony := Random(255);
Zielony := Random(255);
Niebieski := Random(255);
Bitmap.Canvas.Brush.Color:= RGB(Czerwony,Zielony,Niebieski);
Bitmap.Canvas.Rectangle(XX,YY,WW,HH);
end;
Canvas.Draw(0,0, Bitmap);
Bitmap.SaveToFile('c:\test.bmp');
Bitmap.Free;

po zakończeniu tego zobacz co masz na dysku c

robak dopisz tą procedure to class(TForm)

Jak to później odpalić?

Nie działa :/ klikam i nic :/

TeWuX >> nawet nie chcę myśleć ile czasu zaoszczędziłem dzięki temu artowi :) Dzięki wielkie :)

a jak tego SnapShot' dodac?

Witam :) A mi pokazuje takie cos:

[Error] ekran.pas(25): Undeclared identifier: 'SnapShot'

Nie dodalem czegos do 'uses' ?? :(

brawo... tak powinien być wytłumaczony każdy tema na FAQ

Mi sie podoba:)

Kto to w ogóle ocenia??? Jak ktoś daje 1 to niech chociaż napisze DLACZEGO!!!!! Albo sam napisze lepszego Faqa o robieniu zrzutu ekranu!

gdzie ten kod wkleić ?