Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 341

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Как в Delphi 6 отпечатать изображение с экрана монитора?
В DOS была функция Grabpcx.

Заранее благодарен. Рубин Я. И.

Рубин Я.И. Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Рубин Я.И. (статус: Посетитель)
Вопрос отправлен: 16 февраля 2008, 11:25
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Рубин Я.И.!
Ну вообще то тут можно и без делфи обойтись:) Нажимаем PrintScreen (Это для всего экрана) или Alt+PrintScreen (это для активного окна) и копия в виде картинки в буфере обмена. Дальше можно вставить в любимый графический редактор и отпечатать. Можно и в Word вставить:)
Теперь ближе к делфи. Если хочеться отпечатать форму - у неё есть специальный метод, который так и называется - print.
Теперь о всём экране. тут прийдётся действовать в два прихода. Вначале "грабим экран", потом печатаем.
Первое делаем так

var
  bmp: TBitmap;
  DC: HDC;
begin
  bmp:=TBitmap.Create;
  bmp.Height:=Screen.Height;
  bmp.Width:=Screen.Width;
  DC:=GetDC(0);  //Дескpиптоp экpана
  bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    DC, 0, 0, SRCCOPY);
  //bmp.SaveToFile('Screen.bmp');// Эта строка нам наверное и не надо
PrintBitmap(bmp);//это процедура печати, она ниже
  ReleaseDC(0, DC);
bmp.free;
Теперь надо распечатать
{ Печатаем изображение, растягивая его до целого листа }
 
procedure PrintBitmap(ABitmap: TBitmap);
var
  relheight, relwidth: integer;
begin
  screen.cursor := crHourglass;
  Printer.BeginDoc;
  if ((ABitmap.width / ABitmap.height) > l(printer.pagewidth /
    printer.pageheight)) then
  begin
    { Растягиваем ширину изображения до ширины бумаги }
    relwidth := printer.pagewidth;
    relheight := MulDiv(ABitmap.height, printer.pagewidth, ABitmap.width);
  end
  else
  begin
    { Растягиваем высоту изображения до высоты бумаги }
    relwidth := MulDiv(ABitmap.width, printer.pageheight, ABitmap.height);
    relheight := printer.pageheight;
  end;
  DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), ABitmap);
  Printer.EndDoc;
  screen.cursor := crDefault;
end;
Печать будет производиться на текущем принтере. Если добавить диалог выбора принтера (в делфи есть такой компонент), то он может изменять текущий принтер

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 16 февраля 2008, 16:39

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Рубин Я.И.!
В вопрос #1133 рассматривались примеры по сохранению скриншотов в файл. Можете все способы опробовть и комбинировать.
Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 18 февраля 2008, 10:26


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.04 сек.