Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 20:43   #1
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию Скриншот объекта

Мне нужно сделать скриншот объекта(DBGRID) в Timage (чтобы распечатать).

Вот так почему-то не получается снять объект
Код:
MyJpeg := TBitmap.Create;
    BitBlt(MyJpeg.Canvas.Handle, DBGrid1.Left,DBGrid1.Top, DBGrid1.Width, DBGrid1.Height,
           GetDC(0), 0,0,SRCCOPY);
    Image1.Width := Screen.Width;
    Image1.Height := Screen.Height;
    Image1.Picture.Assign(MyJpeg);
И если напечатать целый экран, он на бумаге почему-то маленький(7*5см). Это зависит от функции снятия скриншота или от печати?
Код:
if PrintDialog1.Execute then
  begin
    Printer.BeginDoc;
    BltTBitmapAsDib(Printer.Canvas.Handle,
      0,
      0,
      Image1.Picture.Bitmap.Width,
      Image1.Picture.Bitmap.Height,
      Image1.Picture.Bitmap);
    Printer.EndDoc;
  end;
end;
Вот функция печати:
http://www.cyberguru.ru/delphi-sourc...-kartinku.html
Maxs вне форума Ответить с цитированием
Старый 06.05.2009, 20:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сначало задавай размеры а потом уже делай скриншот
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.05.2009, 21:01   #3
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
сначало задавай размеры а потом уже делай скриншот
Не подскажешь как делать размеры?
Maxs вне форума Ответить с цитированием
Старый 06.05.2009, 21:06   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
MyJpeg := TBitmap.Create;
    MyJpeg.Width := Screen.Width;
    MyJpeg.Height := Screen.Height;
    Image1.Width := Screen.Width;
    Image1.Height := Screen.Height;
    BitBlt(MyJpeg.Canvas.Handle, DBGrid1.Left,DBGrid1.Top, DBGrid1.Width, DBGrid1.Height,
           GetDC(0), 0,0,SRCCOPY);
    Image1.Picture.Assign(MyJpeg);
примерно так(это если ошибка в функции скриншота)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.05.2009, 14:58   #5
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
MyJpeg := TBitmap.Create;
    MyJpeg.Width := Screen.Width;
    MyJpeg.Height := Screen.Height;
    Image1.Width := Screen.Width;
    Image1.Height := Screen.Height;
    BitBlt(MyJpeg.Canvas.Handle, DBGrid1.Left,DBGrid1.Top, DBGrid1.Width, DBGrid1.Height,
           GetDC(0), 0,0,SRCCOPY);
    Image1.Picture.Assign(MyJpeg);
примерно так(это если ошибка в функции скриншота)
Не помогает
Maxs вне форума Ответить с цитированием
Старый 07.05.2009, 15:39   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проверь через отладку размер Printer.Canvas
значит дело в печати
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.05.2009, 16:59   #7
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Все, разобрался. Я просто умножил длину и ширину картинки:
Код:
if PrintDialog1.Execute then
  begin
    Printer.BeginDoc;
    BltTBitmapAsDib(Printer.Canvas.Handle,
      0,
      0,
      Image1.Picture.Bitmap.Width*5,
      Image1.Picture.Bitmap.Height*5,
      Image1.Picture.Bitmap);
    Printer.EndDoc;
  end;
end;
И при захвате изображения была ошибка в координатах, потому что ДБГрид находился на панеле и координаты считались от её начала.
Maxs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37
Как поменять одну из текстур объекта не меняя все остальные и без повторной загрузки объекта в GLScene DomKr@t Мультимедиа в Delphi 0 14.12.2008 01:52
Скриншот ForzaJuve Win Api 13 05.10.2008 21:27
Скриншот экрана ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 5 08.07.2008 12:35
Скриншот экрана Terran Общие вопросы Delphi 2 16.12.2007 15:13