Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

сделать скриншот области формы.

9.0K
08 ноября 2006 года
nur87
50 / / 19.10.2006
всем привет.
как сделать скришот области на форме и сохранить в файл с форматом гиф, но можно и в другую. область например 10-10, отступ слева и сверху равен 5. при сохранении картинки должны иметь разные имена. например первый скрин с названием 1, второй 2 и т.д.
заранее всем благоарен
3.0K
08 ноября 2006 года
Мerlin
267 / / 25.07.2006
В jpg. Отступ 20х20. Размер 100х100
Код:
#include <jpeg.hpp>
void __fastcall TForm1::Button11Click(TObject *Sender)
{
  Graphics::TBitmap *FormImage = GetFormImage();
  TJPEGImage *jp = new TJPEGImage();
  try
  {
    FormImage->Width = 120;
    FormImage->Height = 120;
    FormImage->Canvas->CopyRect(TRect(0,0,100,100),FormImage->Canvas, TRect(20,20,120,120));
    FormImage->Width = 100;
    FormImage->Height = 100;
    jp->Assign(FormImage);
    Form1->Tag++;
    jp->SaveToFile("c:\\" + IntToStr(Form1->Tag) + ".jpg");
  }
  __finally
  {
    delete FormImage;
    delete jp;
  }
}
9.0K
08 ноября 2006 года
nur87
50 / / 19.10.2006
Мerlinспасибо. но если заново запустить программу, то если имеется скриншот 1, то она его заменяет.
3.0K
08 ноября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=nur87]Мerlinспасибо. но если заново запустить программу, то если имеется скриншот 1, то она его заменяет.[/QUOTE]Можно написать
Код:
Graphics::TBitmap *FormImage = GetFormImage();
  TJPEGImage *jp = new TJPEGImage();
  try
  {
    FormImage->Width = 120;
    FormImage->Height = 120;
    FormImage->Canvas->CopyRect(TRect(0,0,100,100),FormImage->Canvas, TRect(20,20,120,120));
    FormImage->Width = 100;
    FormImage->Height = 100;
    jp->Assign(FormImage);
    int tag = Form1->Tag;
    AnsiString fname = "c:\\" + IntToStr(tag) + ".jpg";
    while(FileExists(fname))
    {
      tag++;
      fname = "c:\\" + IntToStr(tag) + ".jpg";
    }
    Form1->Tag = tag++;
    jp->SaveToFile(fname);
  }
  __finally
  {
    delete FormImage;
    delete jp;
  }
9.0K
08 ноября 2006 года
nur87
50 / / 19.10.2006
Мerlin
что то твой вариант не работает.
сделал так, и всё работает

 
Код:
int tag = 1;
    AnsiString fname = "c:\\" + IntToStr(tag) + ".jpg";
    while(FileExists(fname))
    {
      tag++;
      fname = "c:\\" + IntToStr(tag) + ".jpg";
    }
    jp->SaveToFile("c:\\" + IntToStr(tag) + ".jpg");

вопрос решен.
3.0K
08 ноября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=nur87]Мerlin
что то твой вариант не работает.
сделал так, и всё работает.[/QUOTE]Если имеешь в виду, что сохранение начинается с 0.jpg, то я
предполагал, что ты додумаешься или установить вручную в
Object Inspectore Tag == 1, или в OnCreate событии формы
напишешь Tag = 1;

В твоем решении есть один минус. Допустим есть уже 200
screenshots, тогда перед записью 201-го перебираются имена 200
файлов, при записи 202-го, перебираются имена 202 файлов,
итд. Т.е. tag нужно бы сделать переменной формы и инициализировать
один раз.

Кроме этого, imho лучше было бы сохранять в виде 00001.jpg, 00002.jpg,
и так дальше. Так как в данном случае, если есть напр. 20 файлов, то
они в альфавитном порядке будут идти 1.jpg, 10.jpg...19.jpg, 2.jpg.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог