![]() |
|
|
#1
|
|||
|
|||
|
Как сделать снятие скриншота?Народ подскажите плиззз!!!
![]() |
|
#2
|
||||
|
||||
|
Код:
procedure GetWindowsScreen( PathToSave: string );
begin
with TBitmap.Create do
begin
Width := Screen.Width;
Height := Screen.Height;
BitBlt( Canvas.Handle, 0, 0, Width, Height, GetDC( GetDesktopWindow ), 0, 0, SRCCOPY );
SaveToFile( PathToSave );
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetWindowsScreen( 'C:\Screen.bmp' );
end; |
|
#3
|
|||
|
|||
|
Пасибо огромное Decoding!!!
![]() |
|
#4
|
|||
|
|||
|
Цитата:
А у меня не работает! ![]() Выдает такую ошибку: Incompatible types: "HDC" and "QPainterH" В чем дело? |
|
#5
|
|||
|
|||
|
Decoding, мне всё в коде понятно, всё заработало. Но можно ли сделать так чтобы когда снимался скриншот форма не была видна(чтобы её не было на снимке) или всё это сделать через Hot Key и как???
![]() |
|
#6
|
||||
|
||||
|
to A-VIP: я конечно могу ошибаться, но у меня такое впечатление, что ты пытался вставить этод код в прогу, которая использует библиотеку CLX. Если это так, то естественно, что код не работает... Используй VCL.
to Vlastelin Delphi: все можно. Перед снятием скриншота прячь окна (ShowWindow), которых не должно быть видно. Ище окна при помощи FindWindow. Возможно, тебе поможет эта статья - http://decoding.narod.ru/practic/wndinfo/wndinfo.html |
|
#7
|
|||
|
|||
|
Кароче типа того и было! СПС! Все терь гут.
|
|
#8
|
||||
|
||||
|
Не стал создавать новую тему - спрошу здесь:
Я написал программу для снятия скринов. Теперь народ требует с делать видеозахват. - Делать скрины проигрываемого видео. Обычный способ даёт квадрат малевича Кто нибудь сталкивался или видел такую инфу? lllllllllllllllll lllllllllllllllll lllllllllllllllll |
|
#9
|
|||
|
|||
|
Цитата:
Лучше будет открыть главный файл проекта(Project>View Source) и после строки Код:
Application.CreateForm(TForm1, Form1); Код:
Form1.BorderStyle := bsNone; Последний раз редактировалось DungeonLords, 10.09.2008 в 12:54. |
|
#10
|
|||
|
|||
|
По поводу чёрного квадрата. (предположение). Обычно экран (основная часть) - это область памяти, так называемая видеопамять. Рисование на канве с помощью GDI означает изменение цвета пикселов именно этой памяти.
В приложениях же Direct3D (графика) и DirectShow (видео) рисование происходит на заднем буфере (это может быть память видеплаты), затем драйверу видеопроцессора передаётся адрес этого прямоугольника для отображения. Из-за этого и накладки. |
|
#11
|
|||
|
|||
|
процедура мне чучуть не понятна GetWindowsScreen( PathToSave: string )
как мне сделать чтоб была функция возвращающия картинку типа:TBitmap 100X100 пикселов чтоб выглидела function GetWindowsScreen(const: x,y : integer):TBitmap я не как немогу разобратся с BitBlt например мне нужен кусочек экрана по x 200-300 ну и y 200-300 GetWindowsScreen(200,200); помогите пожалуйста |
|
#12
|
|||
|
|||
|
Код:
function getscreen(const x,y:integer ):tbitmap;
var bitmap:tbitmap;
begin
with bitmap.Create do
begin
bitmap.Width := 100;
bitmap.Height := 100;
BitBlt(bitmap.Canvas.Handle, x, y, bitmap.Width, bitmap.Height, GetDC( GetDesktopWindow ), 0, 0, SRCCOPY );
result:=bitmap;
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var J: TJPEGImage;
begin
j.Create;
j.Assign(getscreen(200,200));
end;
![]() Последний раз редактировалось walear, 22.10.2008 в 20:21. |
|
#13
|
|||
|
|||
|
Ну да, не работает.
как минимум должно быть: Код:
begin bitmap := TBitmap.Create; with bitmap do ... |
|
#14
|
|||
|
|||
|
lmikle спасибо помогло
теперь правда новая проблема нехочет сохранят потом в джепег просто сохраняться пустой файл Код:
function getscreen(const x,y:integer ):tbitmap;
var bitmap:tbitmap;
begin
bitmap:=tbitmap.Create;
with bitmap do
begin
bitmap.Width := 100;
bitmap.Height := 100;
BitBlt(bitmap.Canvas.Handle, 0, 0, bitmap.Width, bitmap.Height, GetDC( GetDesktopWindow ), x, y, SRCCOPY );
bitmap.SaveToFile('temp.bmp');
result:=bitmap;
bitmap.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var J: TJPEGImage;
begin
j:=TJPEGImage.Create;
j.Assign(getscreen(500,500));
j.CompressionQuality:=100;
j.Compress;
j.SaveToFile('temp.jpg');
j.Free;
end;Последний раз редактировалось walear, 22.10.2008 в 21:01. |
|
#15
|
|||
|
|||
|
Не assign, а Canvas.Draw
Ну и размеры jpeg'у кто будет ставить??? |