Форум: "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