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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 17:23   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Сохранить форму в jpg

Как сохранить форму в jpg? Если я пользуюсь кодом
Код:
var
JpegIm: TJpegImage;
  bm: TBitMap;
  d1:string;
begin
 //ðèñóíîê
      bm := TBitMap.Create;
//  bm.Width := Screen.Width;
// bm.Height := Screen.Height;
  bm.Width := form2.Width;
 bm.Height := form2.Height;
  BitBlt(bm.Canvas.Handle, 0, 0,
  bm.Width, bm.Height,
  GetDC(0), 0, 0, SRCCOPY);
  JpegIm := TJpegImage.Create;
  JpegIm.Assign(bm);
  JpegIm.CompressionQuality := 20;
  JpegIm.Compress;
  d1:= DateToStr(now)+TimeToStr(now);
  d1:=StringReplace(d1, '.','' , [rfReplaceAll]);
  d1:=StringReplace(d1, ':','' , [rfReplaceAll]);
  JpegIm.SaveToFile('d:\data\'+d1+'.jpg');
  bm.Destroy;
  JpegIm.Destroy;
то сохраняет рабочий стол с размерами формы.
Aleksandr вне форума Ответить с цитированием
Старый 23.04.2013, 17:36   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
var
  JpegIm: TJpegImage;
  bm: TBitMap;
  d1: string;
begin
  bm := TBitMap.Create;
  bm.Width := Form1.ClientWidth;
  bm.Height := Form1.ClientHeight;
  BitBlt(bm.Canvas.Handle, 0, 0, bm.Width, bm.Height, GetDC(Form1.Handle), 0,
    0, SRCCOPY);
  JpegIm := TJpegImage.Create;
  JpegIm.Assign(bm);
  JpegIm.CompressionQuality := 20;
  JpegIm.Compress;
  d1 := DateToStr(now) + TimeToStr(now);
  d1 := StringReplace(d1, '.', '', [rfReplaceAll]);
  d1 := StringReplace(d1, ':', '', [rfReplaceAll]);
  JpegIm.SaveToFile(extractfilepath(paramstr(0)) + 'data\' + d1 + '.jpg');
  bm.Destroy;
  JpegIm.Destroy;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.04.2013, 17:51   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Сохраняет черный квадрат
Aleksandr вне форума Ответить с цитированием
Старый 23.04.2013, 19:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не подтверждаю. Код целиком правильный.
Ты где его вставил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.04.2013, 21:39   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...может у формы прозрачность выставлена?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.04.2013, 22:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Или скины с неким мегакрутым менеджером...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2013, 08:55   #7
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

У меня в проекте 2 формы. Код вызываю на первой форме, а скрин нужно сделать второй формы. Если я делаю скрин первой формы то все нормально.

Последний раз редактировалось Aleksandr; 24.04.2013 в 08:58.
Aleksandr вне форума Ответить с цитированием
Старый 24.04.2013, 09:35   #8
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Вот черновой вариант.
На первой форме лежит Button1, по щелчку на ней происходит следующее:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  JpegIm: TJpegImage;
  bm: TBitMap;
begin
  Form2.show;
  bm := TBitMap.Create;
  bm.Width := Form2.ClientWidth;
  bm.Height := Form2.ClientHeight;
  BitBlt(bm.Canvas.Handle, 0, 0, bm.Width, bm.Height, GetDC(Form2.Handle), 0,
    0, SRCCOPY);
  JpegIm := TJpegImage.Create;
  JpegIm.Assign(bm);
  JpegIm.CompressionQuality := 20;
  JpegIm.Compress;
  JpegIm.SaveToFile(changefileext(paramstr(0),'.jpg'));
  bm.Destroy;
  JpegIm.Destroy;
  Form2.Hide;
end;
Программирую по необходимости

Последний раз редактировалось tsar_; 24.04.2013 в 09:38.
tsar_ вне форума Ответить с цитированием
Старый 24.04.2013, 09:41   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
скрин нужно сделать второй формы.
Она хоть на экране видна?
Как и где вызываешь?
Цитата:
GetDC(Form2.Handle)
Не надежнее ли FormXXX.Canvas.Handle?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2013, 11:43   #10
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Если устанавливаю Form2.Canvas.Handle тогда белый лист.
Если Form2.Handle тогда компоненты отображаются без надписей
Вложения
Тип файла: zip Новая папка (4).zip (293.3 Кб, 14 просмотров)
Aleksandr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещая папки с экзел файлом и jpg картинками, ссылки на jpg не работают?? Igorilla Microsoft Office Excel 0 16.03.2013 21:36
Закрыть форму без сохранения / сохранить изменения в текстовый файл. Randy.Mandy Microsoft Office Excel 2 04.03.2012 14:20
Полностью сохранить форму в файл как .dfm anton14 Общие вопросы Delphi 5 16.10.2010 18:42
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52
Как сохранить нарисованный график в JPG файл Ark Мультимедиа в Delphi 13 03.04.2009 15:41