Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Скриншот средствами API   Найти похожие ветки 

 
Hyboid   (2004-06-06 14:01) [0]

Собственно как сделать???
Читал в документации следующее:

 dwScreenWidth := GetSystemMetrics(SM_CXSCREEN);
 dwScreenHeight := GetSystemMetrics(SM_CYSCREEN);

 hDesktop := GetDesktopWindow;
 hDesktopDC := GetDC(hDesktop);
 hBitmapDC := CreateCompatibleDC(hDesktopDC);

 hBitmap := CreateCompatibleBitmap(hBitmapDC, dwScreenWidth, dwScreenHeight);
 if SelectObject(hBitmapDC, hBitmap) <> 0 then begin
   BitBlt(hBitmapDC, 0, 0, dwScreenWidth, dwScreenHeight, hDesktopDC, 0, 0, SRCCOPY);
   GetObject(hBitmap, SizeOf(Bitmap), @bmp);
 end;
{Вывожу на форму}
 BitBlt(Form1.Canvas.Handle, 0, 0, 400, 300, hBitmapDC, 0, 0, SRCCOPY);


При этом показывается двухцветная картинка, хотя CreateCompatible* должен создавать аналогичный девайс.


 
parovoZZ ©   (2004-06-06 20:55) [1]

В смысле двухцветная? Наверное форму на момент съёмки не убираешь?
Код можно немного упростить:
вместо
hDesktop := GetDesktopWindow;
hDesktopDC := GetDC(hDesktop);

поставить так: hDesktopDC := GetDC(0);
,
хотя это дело вкуса.

Вот когда-то баловался (полупрозрачная форма):
procedure TForm1.FormPaint(Sender: TObject);
var
Alpha_DC, Beta_DC, Screen_DC : HDC;
Alpha_BitMap, Beta_Bitmap : HBitmap;
begin
Alpha_DC := CreateCompatibleDC (GetDC (Form1.Handle));
Beta_DC := CreateCompatibleDC (GetDC (Form1.Handle));
Alpha_Bitmap := CreateCompatibleBitMap (GetDC (Form1.Handle), Form1.Width, Form1.Height);
Beta_BitMap := CreateCompatibleBitMap (GetDC (Form1.Handle), Form1.Width, Form1.Height);
SelectObject (Alpha_DC, Alpha_BitMap);
SelectObject (Beta_DC, Beta_BitMap);
Screen_DC := GetDC (0);
ShowWindow (Form1.Handle, SW_Hide);
// Form1.Visible := False;
BitBlt (Alpha_DC, 0, 0, Form1.Width, Form1.Height, Screen_DC, Form1.Left, Form1.Top, SrcCopy);
ShowWindow (Form1.Handle, SW_Show);
// Form1.Visible := True;
BitBlt (Beta_DC, 0, 0, Form1.Width, Form1.Height, GetDC (Form1.Handle), 0, 0, SrcCopy);

BitBlt (GetDC (Form1.Handle), 0, 0, Form1.Width, Form1.Height, Alpha_DC, 0, 0, SrcCopy);
DeleteObject (Alpha_BitMap);
DeleteObject (Beta_BitMap);
DeleteDC (Alpha_DC);
DeleteDC (Beta_DC);
ReleaseDC (0, Screen_DC);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
FormPaint (Sender);
end;

end.


 
Dimaxx   (2004-06-06 22:22) [2]

Я делал проще:

DC:=GetDC(0);
Img.Picture.Bitmap:=TBitmap.Create;
Img.Picture.Bitmap.Width:=520;
Img.Picture.Bitmap.Height:=330;
BitBlt(Img.Picture.Bitmap.Canvas.Handle,0,0,Img.Width,Img.Height,DC,Left,Top,SRCCOPY);
ReleaseDC(0,DC);
Img.Repaint;


И в компоненте TImage появлялась скопированная часть экрана.



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.039 c
3-1087551984
SergBlack
2004-06-18 13:46
2004.07.18
Как создать автоинкрементное поле в таблице FireBird


1-1089096014
Аноним
2004-07-06 10:40
2004.07.18
TListView


1-1088744450
ilnarab
2004-07-02 09:00
2004.07.18
Копирование папки


6-1085391771
TriX
2004-05-24 13:42
2004.07.18
Как вадать звук в тел линию или записать его , через tapi


1-1088691426
Adil
2004-07-01 18:17
2004.07.18
Алгоритм SpellCheker-а