FAQ » Grafika

Jak zrobić zrzut ekranu do komponentu TImage

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

InsertFn 2011-04-12 04:37

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

kazik70 2008-08-05 11:15

robak dopisz tą procedure to class(TForm)

Defozo 2008-02-11 16:16

Jak to później odpalić?

-=JaCkObS=- 2006-04-02 11:28

Nie działa :/ klikam i nic :/

Gharlon 2006-02-15 04:02

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

niunio 2005-01-14 14:25

a jak tego SnapShot'  dodac?

RoBaK 2005-01-07 00:02

Witam :) A mi pokazuje takie cos:

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

Nie dodalem czegos do 'uses' ?? :(

KIT 2004-12-29 13:06

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

a_s_f 2004-09-13 14:12

Mi sie podoba:)

TeWuX 2004-09-11 13:48

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

Turboasm 2005-06-17 07:24

gdzie ten kod   wkleić ?