Форум: "Основная";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
ВнизСохранить форму как файл графики Найти похожие ветки
← →
Surprising (2002-01-06 17:36) [0]Мастера, имеется форма с несколькими графиками как мне её сохранить в графическом формате(jpg или bmp) для последующего редактирования изображения или печати.
← →
Z (2002-01-06 18:24) [1]unit ScrnCopy;
interface
uses WinTypes, WinProcs, Forms, Classes, Graphics, Controls;
{ Копирует прямоугольную область экрана }
function CaptureScreenRect(ARect : TRect) : TBitmap;
{ Копирование всего экрана }
function CaptureScreen : TBitmap;
{ Копирование клиентской области формы или элемента }
function CaptureClientImage(Control : TControl) : TBitmap;
{ Копирование всей формы элемента }
function CaptureControlImage(Control : TControl) : TBitmap;
{===============================================================}
implementation
function GetSystemPalette : HPalette;
var
PaletteSize:integer;
LogSize:integer;
LogPalette:PLogPalette;
DC:HDC;
Focus:HWND;
begin
result:=0;
Focus:=GetFocus;
DC:=GetDC(Focus);
try
PaletteSize:=GetDeviceCaps(DC, SIZEPALETTE);
LogSize:=SizeOf(TLogPalette)+(PaletteSize-1)*SizeOf(TPaletteEntry);
GetMem(LogPalette, LogSize);
try
with LogPalette^ do
begin
palVersion:=$0300;
palNumEntries:=PaletteSize;
GetSystemPaletteEntries(DC, 0, PaletteSize, palPalEntry);
end;
result:=CreatePalette(LogPalette^);
finally
FreeMem(LogPalette, LogSize);
end;
finally
ReleaseDC(Focus, DC);
end;
end;
function CaptureScreenRect(ARect : TRect) : TBitmap;
var
ScreenDC : HDC;
begin
Result:=TBitmap.Create;
with result, ARect do begin
Width:=Right-Left;
Height:=Bottom-Top;
ScreenDC:=GetDC(0);
try
BitBlt(Canvas.Handle, 0,0,Width,Height,ScreenDC, Left, Top, SRCCOPY );
finally
ReleaseDC(0, ScreenDC);
end;
Palette:=GetSystemPalette;
end;
end;
function CaptureScreen : TBitmap;
begin
with Screen do
Result:=CaptureScreenRect(Rect(0,0,Width,Height));
end;
function CaptureClientImage(Control : TControl) : TBitmap;
begin
with Control, Control.ClientOrigin do
result:=CaptureScreenRect(Bounds(X,Y,ClientWidth,ClientHeight));
end;
function CaptureControlImage(Control : TControl) : TBitmap;
begin
with Control do
if Parent=Nil then
result:=CaptureScreenRect(Bounds(Left,Top,Width,Height))
else
with Parent.ClientToScreen(Point(Left, Top)) do
result:=CaptureScreenRect(Bounds(X,Y,Width,Height));
end;
end.
← →
Surprising (2002-01-06 18:53) [2]Эти все функции работают отдельно друг от друга?
В какой файл сохраниться эта картинка или она будет в буфере?
← →
Pat (2002-01-06 21:12) [3]>Surprising
Если тебе надо просто сохранить окно в графическом режиме, то
сделай форму активной, нажми Alt+PrintScreen и вставляй из буфера в любой графический редактор...
← →
Z (2002-01-06 21:54) [4]Сохраняй эти все функции в отдельный юнит, типа ScrnCopy.pas
Дальше в uses вставляешь ScrnCopy.
Дальше делаешь:
var
bmp: TBitmap;
begin
bmp:=TBitMap.Create //подготавливаем буфер для рисунка
bmp:=CaptureScreen;
bmp.savetofile("c:\screen.bmp");
end;
← →
DK (2002-01-07 03:39) [5]2Z - Зачем такая куча кода???
var
FBitmap: TBitmap;
DC: HDC;
H: hWnd;
P: TPoint;
R: TRect;
begin
FBitmap := TBitmap.Create;
H := Form1.Handle;
DC := GetWindowDC(H);
GetWindowRect(H, R);
FBitmap.Width := R.Right - R.Left;
FBitmap.Height := R.Bottom - R.Top;
BitBlt(FBitmap.Canvas.Handle, 0, 0, FBitmap.Width, FBitmap.Height, DC, 0, 0, SRCCOPY);
FBitmap.SaveToFile("MyForm.bmp");
FBitmap.Destroy;
end;
← →
Surprising (2002-01-10 08:58) [6]А если форма больше чем размер экрана и функция принт скрин уже не помогает.
← →
aus (2002-01-10 12:42) [7]Form1.GetFormImage.SaveToFile(FileName) - это не то что нужно?
← →
Surprising (2002-01-10 13:22) [8]2aus: Нет эта функция тоже использует принт скрин, то есть сохраняет только то что видно на экране, а это где-то половина формы остальное исчезает.
← →
Юрий Зотов (2002-01-10 14:19) [9]Сам не пробовал, но есть шанс, что сработает PaintTo. То есть, создаем временный битмап, рисуем на нем форму (вызовом Form1.PainTo), а затем сохраняем битмап в файл.
← →
Surprising (2002-01-10 14:39) [10]2Юрий Зотов: а в коде это как будет выглядеть, а то я только начинающий.
← →
Bizon (2002-01-10 14:45) [11]А графики нарисованы непосредственно на форме, или компонент какой-нибудь используется?
← →
Surprising (2002-01-10 15:08) [12]2Bizon: графики нарисованы непосредственно на форме.
Я вот о чём подумал, а если их нарисовать на Image и сохранить только Image в графическом формате, а не всю форму.
Можно ли это как нибудь реализовать.
← →
Mbo (2002-01-10 15:11) [13]это намного проще
Image1.Picture.SaveToFile("c:\pic.bmp");
← →
Юрий Зотов (2002-01-10 15:11) [14]Проверил - PaintTo работает, но копирует только клиентскую область и плохо копирует дочерние контролы. А вот этот код создает точную копию всей формы.
procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
begin
with TBitmap.Create do
try
Height := Self.Height;
Width := Self.Width;
DC := GetWindowDC(Self.Handle);
try
BitBlt(Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY)
finally
ReleaseDC(Self.Handle, DC)
end;
SaveToFile("C:\Form1.bmp")
finally
Free
end
end;
← →
Bizon (2002-01-10 15:12) [15]Их можно нарисовать используя Chart и сохранить в bmp
← →
Surprising (2002-01-10 15:52) [16]2Юрий Зотов: нет к сожалению не работает опять копирует только видимую область.
← →
Surprising (2002-01-10 17:15) [17]2Mbo: не работает или я что-то не так делаю.
2Bizon: я их рисую TChart_ом только их у меня несколько на форме и форма получается больше размера экрана.
← →
aus (2002-01-10 19:02) [18]Если нужно сохранять графики, а не форму, то и рисовать их нужно в битмапе, этот же битмап сохранять в файл. А для вывода на экран этот же битмап выводить на форму.
← →
Surprising (2002-01-10 19:05) [19]А как рисовать в битмапе?
← →
aus (2002-01-10 19:54) [20]Ты же рисуешь на TForm.canvas, и TBitmap имеет свой canvas. Создай TBitmap, задай ему Width и height и рисуй также.
← →
Mbo (2002-01-11 07:43) [21]>2Mbo: не работает или я что-то не так делаю.
у меня работает.
image1.Canvas.Ellipse(10,10,30,30);
image1.Picture.SaveToFile("e:\q.bmp");
но если уж Chart-ом рисуешь, то им и сохраняй, и неважно, выходит ли он за край формы. Кстати, не подойдет ли тебе pagecontrol для экономии места на экране?
chart1.saveto...
там несколько есть, в Bitmap,наверно, тебе надо
← →
Bizon (2002-01-11 09:42) [22]Если рисуешь chart_ом то не важно, что куда выходит.
chart1.savetobitmapfile("name.bmp");
Все.
← →
nikkie (2002-01-11 09:59) [23]>Surprising
в принципе, тебе правильно говорят про то, что сохранять логичнее только график, а не всю форму. но чисто ради любопытства - что будет а если прямо перед методом Юрия Зотова вызвать Form.Repaint?
← →
Surprising (2002-01-11 20:23) [24]2nikkie: у меня просто 16 графиков на одной форме и сохранить их нужно в один файл графики.
А что делает Form.Repaint.
← →
Surprising (2002-01-11 20:29) [25]?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c