NO.1[300] 再次请教程序界面如何保存成图片?(300)

  • 主题发起人 主题发起人 liugaohui
  • 开始时间 开始时间
L

liugaohui

Unregistered / Unconfirmed
GUEST, unregistred user!
请教程序界面如何保存成图片?不管程序在最前面还是被其它程序挡住/隐藏/最小化等各种状态,要求一切控件及数据均在图片上正常显示,谢谢
 
最前面还是被其它程序挡住self.paint
 
hfghfghfg:请问如何保存成图片?谢谢
 
是用自己的程序取别人的程序界面吗???
 
自己的程序,运行出结果时间较长,因此想将程序的界面保存下来,谢谢
 
取得要保存的窗口的Canvas.Handle;然后用bitblt函数,参见抓屏源代码
 
谢谢wisenow,不会,谁有源码,谢谢
 
procedure TForm1.Button1Click(Sender: TObject);Var Tmp:TBitmap;begin Try Tmp := TBitmap.Create; Tmp.Width := Self.Width; Tmp.Height:= Self.Height; Tmp.Canvas.FillRect(Tmp.Canvas.ClipRect); Tmp.Canvas.CopyRect(Tmp.Canvas.ClipRect, Self.Canvas, Self.Canvas.ClipRect); Tmp.SaveToFile(ExtractFilePath(Paramstr(0))+ FormatDatetime('YYYY.MM.DD HH.NN.SS.ZZZ',Now) + '.Bmp'); finally Tmp.Free; End;end;
 
图片就保存在程序运行目录了!测试了 好使 呵呵!
 
谢谢睢志强,我看看
 
to睢志强,最小化或被别的程序挡住界面时不行
 
诶!还真不行 那我么办法了!不过最小化时候程序是没窗体的 所以不行!
 
可以在最小化前把图片存下来么.
 
我考虑最小化是因为软件计算比较慢,所以后台计算,又因为是批处理,所以每个结果都要保存,所以要实现最小化或隐藏时的界面保存功能.
 
来自:liugaohui, 时间:2009-1-2 14:08:25, ID:3937879我考虑最小化是因为软件计算比较慢,所以后台计算,又因为是批处理,所以每个结果都要保存,所以要实现最小化或隐藏时的界面保存功能. 还是自己保存数据到文件吧!!!
 
//XP以上系统function PrintWindow(hwnd: Thandle; hdcBlt: HDC; Flags:word):boolean;stdcall; external 'user32.dll';
 
bb1111,能否举个简单的例子,谢谢
 
2007-08-15 19:14首先要说的是,你的抓的这个窗口不在所有窗体的最上面,而且是不用把这个窗口置于最上,截图!要用到的API,需要声明;function PrintWindow(hwnd:HWND;hdcBlt:HWND;nFlags:word ):boolean;stdcall;external 'user32.dll';具体方法过程;procedure PrintBakWnd(H:THandle); //H为要抓拍的窗口的句柄var DC:HDC; H1:HBITMAP; DC1:HDC; ScreenMap:TBitmap; R:TRect;begin DC:=GetWindowDC(H); GetWindowRect(H,R); H1:=CreateCompatibleBitmap(DC,r.Right-r.Left,r.Bottom-r.Top); DC1:=CreateCompatibleDC(DC); SelectObject(DC1,H1); PrintWindow(H,DC1,0); ScreenMap:=TBitmap.Create; ScreenMap.Handle:=H1; ScreenMap.SaveToFile('c:/'+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.bmp'); ScreenMap.Free; DeleteDC(DC); DeleteDC(DC1); CopyFile()end; http://hi.baidu.com/rockzhang/blog/item/e307ebf83358980dd9f9fd3e.html
 
Windows GDIPrintWindowThe PrintWindow function copies a visual window into the specified device context (DC), typically a printer DC.BOOL PrintWindow( HWND hwnd, // Window to copy HDC hdcBlt, // HDC to print into UINT nFlags // Optional flags);Parametershwnd Handle to the window that will be copied. hdcBlt Handle to the device context. nFlags Specifies the drawing options. It can be one of the following values. Value Meaning PW_CLIENTONLY Only the client area of the window is copied to hdcBlt. By default, the entire window is copied. Return ValuesIf the function succeeds, it returns a nonzero value.If the function fails, it returns zero.RemarksThis function is similar to WM_PRINT. Before calling PrintWindow, first select a bitmap into hdcBlt. Requirements Windows NT/2000/XP/Vista: Included in Windows XP and Windows Server 2003. Windows 95/98/Me: Unsupported.value=" Header: Declared in Winuser.h; include Windows.h. Library: Use User32.lib.
 
GetFormImage.SaveToFile('c:/dd.bmp');但最小化时没有数据。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
796
DelphiTeacher的专栏
D
D
回复
0
查看
654
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部