Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.11.2006, 23:53
Vlastelin Delphi Vlastelin Delphi вне форума
Прохожий
 
Регистрация: 08.11.2006
Сообщения: 42
Репутация: 10
Вопрос Снятие скриншота

Как сделать снятие скриншота?Народ подскажите плиззз!!!
Ответить с цитированием
  #2  
Старый 09.11.2006, 00:15
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Код:
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  
Старый 09.11.2006, 19:32
Vlastelin Delphi Vlastelin Delphi вне форума
Прохожий
 
Регистрация: 08.11.2006
Сообщения: 42
Репутация: 10
Хорошо Спасибо!

Пасибо огромное Decoding!!!
Ответить с цитированием
  #4  
Старый 13.11.2006, 17:23
A-VIP A-VIP вне форума
Прохожий
 
Регистрация: 13.11.2006
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от Decoding
Код:
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;

А у меня не работает!
Выдает такую ошибку: Incompatible types: "HDC" and "QPainterH"
В чем дело?
Ответить с цитированием
  #5  
Старый 13.11.2006, 18:06
Vlastelin Delphi Vlastelin Delphi вне форума
Прохожий
 
Регистрация: 08.11.2006
Сообщения: 42
Репутация: 10
Вопрос Форма не должна быть видна на снимке

Decoding, мне всё в коде понятно, всё заработало. Но можно ли сделать так чтобы когда снимался скриншот форма не была видна(чтобы её не было на снимке) или всё это сделать через Hot Key и как???
Ответить с цитированием
  #6  
Старый 13.11.2006, 18:56
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

to A-VIP: я конечно могу ошибаться, но у меня такое впечатление, что ты пытался вставить этод код в прогу, которая использует библиотеку CLX. Если это так, то естественно, что код не работает... Используй VCL.

to Vlastelin Delphi: все можно. Перед снятием скриншота прячь окна (ShowWindow), которых не должно быть видно. Ище окна при помощи FindWindow. Возможно, тебе поможет эта статья - http://decoding.narod.ru/practic/wndinfo/wndinfo.html
Ответить с цитированием
  #7  
Старый 13.11.2006, 20:11
A-VIP A-VIP вне форума
Прохожий
 
Регистрация: 13.11.2006
Сообщения: 2
Репутация: 10
По умолчанию

Кароче типа того и было! СПС! Все терь гут.
Ответить с цитированием
  #8  
Старый 06.09.2008, 12:27
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
Вопрос

Не стал создавать новую тему - спрошу здесь:
Я написал программу для снятия скринов. Теперь народ требует с делать видеозахват. - Делать скрины проигрываемого видео. Обычный способ даёт квадрат малевича
Кто нибудь сталкивался или видел такую инфу?

lllllllllllllllll
lllllllllllllllll
lllllllllllllllll
__________________
<><><> www.mak-ms.com <><><>
Ответить с цитированием
  #9  
Старый 10.09.2008, 12:52
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Подмигивание

Цитата:
Сообщение от Decoding
to A-VIP: я конечно могу ошибаться, но у меня такое впечатление, что ты пытался вставить этод код в прогу, которая использует библиотеку CLX. Если это так, то естественно, что код не работает... Используй VCL.

to Vlastelin Delphi: все можно. Перед снятием скриншота прячь окна (ShowWindow), которых не должно быть видно. Ище окна при помощи FindWindow. Возможно, тебе поможет эта статья - http://decoding.narod.ru/practic/wndinfo/wndinfo.html

Лучше будет открыть главный файл проекта(Project>View Source) и после строки
Код:
 Application.CreateForm(TForm1, Form1);
написать
Код:
   Form1.BorderStyle := bsNone; 
так куда лучше!

Последний раз редактировалось DungeonLords, 10.09.2008 в 12:54.
Ответить с цитированием
  #10  
Старый 11.09.2008, 11:17
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

По поводу чёрного квадрата. (предположение). Обычно экран (основная часть) - это область памяти, так называемая видеопамять. Рисование на канве с помощью GDI означает изменение цвета пикселов именно этой памяти.
В приложениях же Direct3D (графика) и DirectShow (видео) рисование происходит на заднем буфере (это может быть память видеплаты), затем драйверу видеопроцессора передаётся адрес этого прямоугольника для отображения. Из-за этого и накладки.
Ответить с цитированием
  #11  
Старый 22.10.2008, 19:55
walear walear вне форума
Прохожий
 
Регистрация: 22.10.2008
Сообщения: 4
Репутация: 10
По умолчанию

процедура мне чучуть не понятна GetWindowsScreen( PathToSave: string )
как мне сделать чтоб была функция возвращающия картинку типа:TBitmap
100X100 пикселов
чтоб выглидела
function GetWindowsScreen(const: x,y : integer):TBitmap
я не как немогу разобратся с BitBlt
например мне нужен кусочек экрана по x 200-300 ну и y 200-300
GetWindowsScreen(200,200);

помогите пожалуйста
Ответить с цитированием
  #12  
Старый 22.10.2008, 20:15
walear walear вне форума
Прохожий
 
Регистрация: 22.10.2008
Сообщения: 4
Репутация: 10
По умолчанию

Код:
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  
Старый 22.10.2008, 20:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну да, не работает.
как минимум должно быть:
Код:
begin
  bitmap := TBitmap.Create;
  with bitmap do
  ...
Ответить с цитированием
  #14  
Старый 22.10.2008, 20:52
walear walear вне форума
Прохожий
 
Регистрация: 22.10.2008
Сообщения: 4
Репутация: 10
По умолчанию

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  
Старый 22.10.2008, 21:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не assign, а Canvas.Draw
Ну и размеры jpeg'у кто будет ставить???
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter