Главная страница
    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.006 c
4-1186406447
Yurikon
2007-08-06 17:20
2008.04.06
Как определить заголовок приложения


2-1205471914
Vinum
2008-03-14 08:18
2008.04.06
Про ScrollBar


15-1203608629
Новости кино
2008-02-21 18:43
2008.04.06
Булгаковского Воланда сыграет Аль Пачино


8-1178217036
Жорик
2007-05-03 22:30
2008.04.06
Как захватить часть экрана?


15-1203811272
Германн
2008-02-24 03:01
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский