Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизСкриншот средствами 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.027 c