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

Ваш аккаунт

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

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

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

Cохранить форму

343
11 ноября 2008 года
lena_ki
282 / / 14.04.2005
Как сохранить форму с ее содержимым как картинку в формат jpeg?
if (SavePictureDialog1->Execute())
{
//сохранить с именем заданным в SavePictureDialog1
}
288
11 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: lena_ki
Как сохранить форму с ее содержимым как картинку в формат jpeg?
if (SavePictureDialog1->Execute())
{
//сохранить с именем заданным в SavePictureDialog1
}



Первое, что приходит в голову

 
Код:
TImage *pImage = NULL;

    pImage = new TImage(this);

    pImage->Width = Form1->Canvas->ClipRect.Width();
    pImage->Height = Form1->Canvas->ClipRect.Height();
    pImage->Canvas->CopyRect(Form1->Canvas->ClipRect, Form1->Canvas, Form1->Canvas->ClipRect);
    pImage->Picture->SaveToFile("C:\\file.bmp");

    delete pImage;

Но при этом не сохранится рамка формы, заголовок и меню, если они есть (вообщем только клиентская часть). Если же они нужны, тогда можно похимичить со скриншотом всего экрана.
288
11 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: nikitozz

Но при этом не сохранится рамка формы и меню, если они есть (вообщем только клиентская часть). Если же они нужны, тогда можно похимичить со скриншотом всего экрана.



Если интересно, "похимичил".

Код:
TImage *pImage = NULL;
    TCanvas *pCanvas = NULL;

    pImage = new TImage(this);
    pCanvas = new TCanvas();

    pCanvas->Handle = GetWindowDC( GetDesktopWindow() );

    pImage->Width = Form1->Width;
    pImage->Height = Form1->Height;
    TRect formOrigin(Form1->Left, Form1->Top, Form1->Left + Form1->Width, Form1->Top + Form1->Height);
    pImage->Canvas->CopyRect(pImage->ClientRect, pCanvas, formOrigin);
    pImage->Picture->SaveToFile("C:\\Desktop.bmp");

    delete pImage;
    delete pCanvas;
343
11 ноября 2008 года
lena_ki
282 / / 14.04.2005
Cпасибо. Но есть проблема
При использовании вашего кода:
Код:
if (SavePictureDialog2->Execute())
  {
 TImage *pImage = NULL;
 pImage = new TImage(this);
 pImage->Width = FormClient->Canvas->ClipRect.Width();
 pImage->Height = FormClient->Canvas->ClipRect.Height();
 pImage->Canvas->CopyRect(FormClient->Canvas->ClipRect, FormClient->Canvas, FormClient->Canvas->ClipRect);
 pImage->Picture->SaveToFile(SavePictureDialog2->FileName);
 //pImage->Picture->SaveToFile("C:\\Desktop.bmp");
 delete pImage;
  }


Я получаю файл нулевого размера, который не открывается.
У меня на форме находиться компонет ActiveX который отображает карту. Не знаю почему но сохранить таким кодом не получается...:(
288
11 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: lena_ki
Cпасибо. Но есть проблема
При использовании вашего кода:
Код:
if (SavePictureDialog2->Execute())
  {
 TImage *pImage = NULL;
 pImage = new TImage(this);
 pImage->Width = FormClient->Canvas->ClipRect.Width();
 pImage->Height = FormClient->Canvas->ClipRect.Height();
 pImage->Canvas->CopyRect(FormClient->Canvas->ClipRect, FormClient->Canvas, FormClient->Canvas->ClipRect);
 pImage->Picture->SaveToFile(SavePictureDialog2->FileName);
 //pImage->Picture->SaveToFile("C:\\Desktop.bmp");
 delete pImage;
  }


Я получаю файл нулевого размера, который не открывается.
У меня на форме находиться компонет ActiveX который отображает карту. Не знаю почему но сохранить таким кодом не получается...:(



А если убрать компонент, сохранение проходит нормально?

343
11 ноября 2008 года
lena_ki
282 / / 14.04.2005
Вот так заработало как надо:
Код:
void GetWindowScreenShot(HANDLE hWin, Graphics::TBitmap * BMP)
{
  HDC DC = GetDC(hWin);
  RECT r;
  //GetWindowRect(hWin, &r);
  GetClientRect(hWin, &r);
  BMP->Width=r.right - r.left;
  BMP->Height=r.bottom - r.top;
  BitBlt(BMP->Canvas->Handle, 0, 0, BMP->Width, BMP->Height, DC, 0, 0, SRCCOPY);
  ReleaseDC(hWin, DC);
}
//--------------------------------------------------------------------

void __fastcall TFormClient::SpeedButtonSaveTabClick(TObject *Sender)
{
  Graphics::TBitmap * BMP=new Graphics::TBitmap();
  TJPEGImage * JPG = new TJPEGImage();
  AnsiString data = StatusBar1->Panels->Items[0]->Text;
  StatusBar1->Panels->Items[0]->Text = "Файл сохранен: "  + Now();
  try
    {
   Application->ProcessMessages();
   GetWindowScreenShot(Handle, BMP);
   if(SavePictureDialog2->Execute())
   {
    JPG->Assign(BMP);
    JPG->SaveToFile(SavePictureDialog2->FileName);
   }
    }
     __finally
     {
    delete BMP;
    delete JPG;
    StatusBar1->Panels->Items[0]->Text = data;
     }

}
246
11 ноября 2008 года
GIZMO
1.8K / / 30.07.2004
а есть еще метод PaintTo
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог