Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
4-90426
csf
2001-11-29 13:49
2002.01.28
Handle wincontrol a


14-90368
fliz
2001-12-04 14:57
2002.01.28
мне вот тут приколы прислали ...


4-90431
Andrey Mihaylov
2001-11-30 01:38
2002.01.28
Несколько вопросов о сервисах..... (((


3-90199
RealyGrey
2001-12-22 14:15
2002.01.28
Как в IB с помощью SQL запроса получить метаданные определенной таблицы?


1-90326
Satrap
2002-01-06 11:56
2002.01.28
особенности WndProc





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский