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;
Cохранить форму
if (SavePictureDialog1->Execute())
{
//сохранить с именем заданным в SavePictureDialog1
}
Цитата: lena_ki
Как сохранить форму с ее содержимым как картинку в формат jpeg?
if (SavePictureDialog1->Execute())
{
//сохранить с именем заданным в SavePictureDialog1
}
if (SavePictureDialog1->Execute())
{
//сохранить с именем заданным в SavePictureDialog1
}
Первое, что приходит в голову
Код:
Но при этом не сохранится рамка формы, заголовок и меню, если они есть (вообщем только клиентская часть). Если же они нужны, тогда можно похимичить со скриншотом всего экрана.
Цитата: 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;
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;
При использовании вашего кода:
Код:
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;
}
{
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 который отображает карту. Не знаю почему но сохранить таким кодом не получается...:(
Цитата: lena_ki
Cпасибо. Но есть проблема
При использовании вашего кода:
Я получаю файл нулевого размера, который не открывается.
У меня на форме находиться компонет ActiveX который отображает карту. Не знаю почему но сохранить таким кодом не получается...:(
При использовании вашего кода:
Код:
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;
}
{
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 который отображает карту. Не знаю почему но сохранить таким кодом не получается...:(
А если убрать компонент, сохранение проходит нормально?
Код:
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;
}
}
{
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;
}
}
а есть еще метод PaintTo