Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Вниз

Как захватить часть экрана?   Найти похожие ветки 

 
Жорик   (2007-05-03 22:30) [0]

Здравствуйте, ув. господа программисты. Помогите начинающему.
Мне нужно скопировать часть экрана и загрузить это всё из памяти в компонент TImage, потом это всё распечатать на принтере.
Как скопировать весь экран я знаю, а вот как скопировать выделенную часть и загрузить из памяти в компонент TImage не знаю.
Если кто в курсе как это сделать, будьте добры, подскажите и если возможно с примерами. Может быть есть какие-то компоненты для таких целей.
Заранее благодарю всех откликнувшихся.

Жорик.


 
DVM ©   (2007-05-04 15:23) [1]

Покажи, как ты захватываешь весь экран, я тебе поправлю для части экрана.


 
Жорик   (2007-05-05 07:50) [2]

>DVM ©   (04.05.07 15:23) [1]
>Покажи, как ты захватываешь весь экран, я тебе поправлю для части экрана.

Нашёл в инете вот такую процедурку для захвата экрана

//Данная функция делает копию изображения экрана и сохраняет её в
//буфере обмена (Clipboard).

procedure SendScreenImageToClipboard;
var
 bmp: TBitmap;
begin
 bmp := TBitmap.Create;
 try
   bmp.Width := Screen.Width;
   bmp.Height := Screen.Height;
   BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
     GetDC(GetDesktopWindow), 0, 0, SRCCopy);
   Clipboard.Assign(bmp);
 finally
   bmp.Free;
 end;
end;

procedure TForm1.btn_SnapClick(Sender: TObject);
begin
 SendScreenImageToClipboard;
end;

Это всё работает, проверял.
Теперь мне нужно сделать три вещи:
1) Скопировать произвольную часть экрана (как это делают программки типа HyperSnap,Capture 1.1 и др.).
2) Вытащить из буфера обмена изображение в TImage на форме.
3) Распечатать на принтере.

На счёт пункта 1: на крайний случай я нашёл в инете программку, которая делает снимок произвольной части экрана и сохраняет в буфер обмена. Но проблема вытаскивания из буфера так и остаётся.
Лучше конечно сделать всё в одной программе чем городить огород из нескольких, но если не получится, то придётся.
Поэтому сейчас для меня важнее пункт 2 (как это сделать я пока не знаю), но и решение задачи в п.1 не отменяется.

P.S. У меня сейчас нет постоянного доступа к инету, поэтому могу ненадолго(несколько дней) потеряться.


 
Vasiliy   (2007-05-05 11:42) [3]

1)
  BitBlt(bmp.Canvas.Handle, Left, Top, Right, Bottom, GetDC(GetDesktopWindow), 0, 0, SRCCopy);

Вместо Left, Top, Right, Bottom подставляй свои экранные координаты, естественно при этом размеры bmp.Width и bmp.Height нужно задавать соответствующие.

2)
  Clipboard.Assign(bmp);
  TImage.Picture.Assign(Clipboard)

а еще лучше сразу TImage.Picture.Assign(bmp)

3)
  TPrinter.BeginDoc;
  TPrinter.Canvas.Draw(0, 0, TImage.Picture.Bitmap);
  TPrinter.EndDoc;


 
DVM ©   (2007-05-05 15:49) [4]

Небольшое добавление. Если получаете контекст с помощью GetDC(), то после положено все таки вызывать ReleaseDC() для него;


 
Жорик   (2007-05-05 21:14) [5]

Спасибо Всем, буду пробовать.



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

Форум: "Media";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
2-1205054806
dmitry_12_08_73
2008-03-09 12:26
2008.04.06
Как загрузить курсор из файла *.res


15-1203497699
md10
2008-02-20 11:54
2008.04.06
SQL and C Sharp


15-1203601105
Petr V. Abramov
2008-02-21 16:38
2008.04.06
Windows за рулем :)


2-1205432829
nstur
2008-03-13 21:27
2008.04.06
XPMan


15-1203522813
ProgRAMmer Dimonych
2008-02-20 18:53
2008.04.06
Вопрос по цифровым фотоаппаратам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский