如何将vfp中的表单以图片的格式插入word文档?

myh2514 2007-03-28 03:05:44
如题
...全文
785 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
都市流浪者 2007-04-02
  • 打赏
  • 举报
回复
手工截取屏幕图象比较好理解一点:)
jackeyabc 2007-03-29
  • 打赏
  • 举报
回复
先收藏
myh2514 2007-03-28
  • 打赏
  • 举报
回复
apple_8180(十豆三) ( ) 信誉:443 Blog
-------------
太牛了吧!
你真我偶像!!!!!!!!!
十月鹰飞 2007-03-28
  • 打赏
  • 举报
回复
够强,学习了。。
十豆三 2007-03-28
  • 打赏
  • 举报
回复
保存当前一个窗口到一个bmp文件后再调用Word,将图片插入即可。
十豆三 2007-03-28
  • 打赏
  • 举报
回复
PROCEDURE Ptr2File (hFile, lnPointer, lnBt2Write)
* appends memory block to a file
DECLARE INTEGER WriteFile IN kernel32;
INTEGER hFile, INTEGER lpBuffer, INTEGER nBt2Write,;
INTEGER @lpBtWritten, INTEGER lpOverlapped

= WriteFile (hFile, lnPointer, lnBt2Write, 0, 0)
RETURN

PROCEDURE MakeSnapshot()
#DEFINE SRCCOPY 13369376
LOCAL hwnd, hdc, hSavedBitmap

hwnd = GetFocus()
hdc = GetWindowDC(hwnd)
= GetWinRect(hwnd, @lnWidth, @lnHeight)

hMemDC = CreateCompatibleDC (hdc)
hMemBmp = CreateCompatibleBitmap (hdc, lnWidth, lnHeight)

hSavedBitmap = SelectObject (hMemDC, hMemBmp)
= BitBlt (hMemDC, 0,0, lnWidth,lnHeight, hdc, 0,0, SRCCOPY)
= SelectObject (hMemDC, hSavedBitmap)
= ReleaseDC (hwnd, hdc)
RETURN

PROCEDURE GetWinRect(hwnd, lnWidth, lnHeight)
#DEFINE MAX_DWORD 4294967295 && 0xffffffff
LOCAL lpRect, lnLeft, lnTop, lnRight, lnBottom
lpRect = Repli(Chr(0), 16)
= GetWindowRect (hwnd, @lpRect)

lnLeft = buf2dword(SUBSTR(lpRect, 1,4))
lnTop = buf2dword(SUBSTR(lpRect, 5,4))
lnRight = buf2dword(SUBSTR(lpRect, 9,4))
lnBottom = buf2dword(SUBSTR(lpRect, 13,4))

IF lnLeft > lnRight
lnLeft = lnLeft - MAX_DWORD
ENDIF
IF lnTop > lnBottom
lnTop = lnTop - MAX_DWORD
ENDIF

lnWidth = lnRight - lnLeft
lnHeight = lnBottom - lnTop
RETURN

FUNCTION num2dword (lnvalue)
#DEFINE m0 256
#DEFINE m1 65536
#DEFINE m2 16777216
LOCAL b0, b1, b2, b3
b3 = Int(lnvalue/m2)
b2 = Int((lnvalue - b3*m2)/m1)
b1 = Int((lnvalue - b3*m2 - b2*m1)/m0)
b0 = Mod(lnvalue, m0)
RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)

FUNCTION num2word (lnvalue)
RETURN Chr(MOD(m.lnvalue,256)) + CHR(INT(m.lnvalue/256))

FUNCTION buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
Asc(SUBSTR(lcBuffer, 4,1)) * 16777216

FUNCTION buf2word (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256

PROCEDURE decl
DECLARE INTEGER GetDIBits IN gdi32;
INTEGER hdc, INTEGER hbmp, INTEGER uStartScan,;
INTEGER cScanLines, INTEGER lpvBits, STRING @lpbi,;
INTEGER uUsage

DECLARE INTEGER GlobalAlloc IN kernel32 INTEGER wFlags, INTEGER dwBytes
DECLARE INTEGER GetWindowRect IN user32 INTEGER hwnd, STRING @lpRect
DECLARE INTEGER SelectObject IN gdi32 INTEGER hdc, INTEGER hObject
DECLARE INTEGER ReleaseDC IN user32 INTEGER hwnd, INTEGER hdc
DECLARE INTEGER DeleteDC IN gdi32 INTEGER hdc
DECLARE INTEGER GetFocus IN user32
DECLARE INTEGER GetWindowDC IN user32 INTEGER hwnd
DECLARE INTEGER GlobalFree IN kernel32 INTEGER hMem
DECLARE INTEGER DeleteObject IN gdi32 INTEGER hObject
DECLARE INTEGER CreateCompatibleDC IN gdi32 INTEGER hdc
DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject

DECLARE RtlZeroMemory IN kernel32 As ZeroMemory;
INTEGER dest, INTEGER numBytes

DECLARE INTEGER CreateCompatibleBitmap IN gdi32;
INTEGER hdc, INTEGER nWidth, INTEGER nHeight

DECLARE INTEGER BitBlt IN gdi32;
INTEGER hDestDC, INTEGER x, INTEGER y,;
INTEGER nWidth, INTEGER nHeight, INTEGER hSrcDC,;
INTEGER xSrc, INTEGER ySrc, INTEGER dwRop

DECLARE INTEGER CreateFile IN kernel32;
STRING lpFileName, INTEGER dwDesiredAccess,;
INTEGER dwShareMode, INTEGER lpSecurityAttr,;
INTEGER dwCreationDisp, INTEGER dwFlagsAndAttrs,;
INTEGER hTemplateFile

*** The structures used in this code:
*| typedef struct tagBITMAPINFOHEADER{
*| DWORD biSize; 0:4
*| LONG biWidth; 4:4
*| LONG biHeight; 8:4
*| WORD biPlanes; 12:2
*| WORD biBitCount; 14:2
*| DWORD biCompression; 16:4
*| DWORD biSizeImage; 20:4
*| LONG biXPelsPerMeter; 24:4
*| LONG biYPelsPerMeter; 28:4
*| DWORD biClrUsed; 32:4
*| DWORD biClrImportant; 36:4 = 40 bytes
*| } BITMAPINFOHEADER, *PBITMAPINFOHEADER

*| typedef struct tagRGBQUAD {
*| BYTE rgbBlue;
*| BYTE rgbGreen;
*| BYTE rgbRed;
*| BYTE rgbReserved;
*| } RGBQUAD; total 4 bytes

*| typedef struct tagBITMAPINFO {
*| BITMAPINFOHEADER bmiHeader;
*| RGBQUAD bmiColors[1];
*|} BITMAPINFO, *PBITMAPINFO;

*| typedef struct tagBITMAPFILEHEADER {
*| WORD bfType; 0:2
*| DWORD bfSize; 2:4
*| WORD bfReserved1; 6:2
*| WORD bfReserved2; 8:2
*| DWORD bfOffBits; 10:4 = 14 bytes
*| } BITMAPFILEHEADER, *PBITMAPFILEHEADER;
十豆三 2007-03-28
  • 打赏
  • 举报
回复
*WIN API-保存当前一个窗口到一个bmp文件

*----------------------------------------------------

*你可以在command 窗口执行 bmpform.prg,不过最好在要保存的form调用这个子程序.
*bmpform.prg

********
DO decl

PRIVATE hMemDC, hMemBmp, lnWidth, lnHeight, lnBitsPerPixel,;
lnBytesPerScan, lcBFileHdr, lcBIHdr, lpBitsArray, lnBitsSize,;
lcRgbQuad, lnRgbQuadSize, lcBInfo, lnFileSize

STORE "" TO lcBIHdr, lcBInfo, lcRgbQuad
STORE 0 TO hMemDC, hMemBmp, lnWidth, lnHeight, lnFileSize,;
lnBitsPerPixel, lnBytesPerScan, lnRgbQuadSize, lpBitsArray, lnBitsSize

= MakeSnapshot()
= InitBitmapInfo()
= InitBitsArray()

#DEFINE DIB_RGB_COLORS 0
= GetDIBits (hMemDC, hMemBmp, 0, lnHeight, lpBitsArray,;
@lcBInfo, DIB_RGB_COLORS)

LOCAL lcFilename
**保存的文件名
lcFilename = "c:\myfile.bmp"

IF bmp2file (lcFilename)
ACTI SCREEN
? "file: ", lcFilename
? "Size: ", LTRIM(TRANS(lnFileSize, "999,999,999,999"))
? "Width: ", LTRIM(STR(lnWidth)) + " pixels"
? "Height: ", LTRIM(STR(lnHeight)) + " pixels"
? "Bits per pixel:", LTRIM(STR(lnBitsPerPixel))
ENDIF

= GlobalFree (lpBitsArray)
= DeleteObject (hMemBmp)
= DeleteDC (hMemDC)
RETURN && main

PROCEDURE InitBitmapInfo()
#DEFINE BI_RGB 0
#DEFINE RGBQUAD_SIZE 4 && RGBQUAD
#DEFINE BHDR_SIZE 40 && BITMAPINFOHEADER

* forcing 24-bit format
lnBitsPerPixel = 24
lnBytesPerScan = lnWidth * 3

* line width should be DWORD-aligned (4 bytes)
* important for 16- and 24-bit color palettes
IF Mod(lnBytesPerScan, 4) <> 0
lnBytesPerScan = lnBytesPerScan + 4 - Mod(lnBytesPerScan, 4)
ENDIF

* initializing BitmapInfoHeader structure
lcBIHdr = num2dword(BHDR_SIZE) + num2dword(lnWidth) +;
num2dword(lnHeight) + num2word(1) + num2word(lnBitsPerPixel) +;
num2dword(BI_RGB) + num2dword(0) + num2dword(0) + num2dword(0) +;
num2dword(0) + num2dword(0)

* creating a buffer for the color table
IF lnBitsPerPixel <= 8
lnRgbQuadSize = (2^lnBitsPerPixel) * RGBQUAD_SIZE
lcRgbQuad = Repli(Chr(0), lnRgbQuadSize)
ELSE
lnRgbQuadSize = 0
lcRgbQuad = ""
ENDIF

* merging two pieces together
lcBInfo = lcBIHdr + lcRgbQuad
RETURN

PROCEDURE InitBitsArray()
#DEFINE GMEM_FIXED 0
lnBitsSize = lnHeight * lnBytesPerScan
lpBitsArray = GlobalAlloc (GMEM_FIXED, lnBitsSize)
= ZeroMemory (lpBitsArray, lnBitsSize)

FUNCTION bmp2file (lcTargetFile)
* store all gathered pieces to a disk file
#DEFINE GENERIC_WRITE 1073741824 && 0x40000000
#DEFINE FILE_SHARE_WRITE 2
#DEFINE CREATE_ALWAYS 2
#DEFINE FILE_ATTRIBUTE_NORMAL 128
#DEFINE INVALID_HANDLE_value -1
#DEFINE BFHDR_SIZE 14 && BITMAPFILEHEADER

LOCAL hFile, lnOffBits

* resulting BMP file size
lnFileSize = BFHDR_SIZE + BHDR_SIZE + lnRgbQuadSize + lnBitsSize

* offset to the bitmap bits
lnOffBits = BFHDR_SIZE + BHDR_SIZE + lnRgbQuadSize

* BMP file header
lcBFileHdr = "BM" + num2dword(lnFileSize) +;
num2dword(0) + num2dword(lnOffBits)

* target file handle
hFile = CreateFile (lcTargetFile,;
GENERIC_WRITE,;
FILE_SHARE_WRITE, 0,;
CREATE_ALWAYS,;
FILE_ATTRIBUTE_NORMAL, 0)

IF hFile <> INVALID_HANDLE_value
* a straightforward process of storing block after block:
= String2File (hFile, @lcBFileHdr) && BitmapFileHeader
= String2File (hFile, @lcBInfo) && BitmapInfo
= Ptr2File (hFile, lpBitsArray, lnBitsSize) && bitmap data
= CloseHandle (hFile)
RETURN .T.
ELSE
= MessageB ("Unable to create file: " + lcTargetFile)
RETURN .F.
ENDIF

PROCEDURE String2File (hFile, lcBuffer)
* appends string buffer to a file
DECLARE INTEGER WriteFile IN kernel32;
INTEGER hFile, STRING @lpBuffer, INTEGER nBt2Write,;
INTEGER @lpBtWritten, INTEGER lpOverlapped

= WriteFile (hFile, @lcBuffer, Len(lcBuffer), 0, 0)
RETURN
青草根儿 2007-03-28
  • 打赏
  • 举报
回复
用ole试试
内容概要:本文围绕基于三电平ANPC(有源点箝位)拓扑的虚拟同步发电机(VSG)构网型逆变器展开,提出一种融合双闭环控制、点电位平衡控制与DPWMA调制的高性能并网控制策略。通过深入分析ANPC三电平逆变器的拓扑结构,阐明其在开关损耗均衡、点电位稳定性和输出谐波抑制方面的显著优势,为高性能并网奠定硬件基础。针对电网不平衡与动态扰动挑战,系统性地引入正负序分离锁相技术,实现电网相位的高精度同步,有效隔离负序分量干扰;同时,采用电网电压前馈控制策略,构建前馈-反馈复合控制体系,显著提升系统动态响应速度与抗扰能力,克服传统闭环控制的滞后性。此外,通过DPWMA(双极性倍频脉宽调制)技术优化开关调制,进一步降低输出谐波,提升稳态电能质量,并结合点电位平衡控制策略,确保直流侧电压稳定。通过多工况仿真模型对稳态、电网不平衡及动态切换等场景进行全面验证,结果表明该复合控制策略能有效保障并网电流的高质量、三相对称性与功率稳定性,显著增强了逆变器在复杂电网环境下的适应性与运行可靠性。; 适合人群:具备电力电子与电力系统基础知识,从事新能源并网、逆变器控制、微电网技术及VSG应用等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究高电能质量、高可靠性的三电平并网逆变器先进控制方案;②解决电网电压不平衡、谐波畸变、动态扰动等复杂工况下的并网稳定性与电流质量难题;③优化VSG构网型逆变器的动态响应特性、点电位控制精度与谐波抑制能力;④为新能源发电系统的大功率、高性能并网提供理论依据与仿真验证支持; 阅读建议:此资源以Simulink仿真为核心,紧密结合理论分析与控制策略设计,建议读者在学习过程,重点理解DPWMA调制、正负序分离锁相、电网电压前馈与点电位平衡控制之间的协同作用机制,结合所提供的仿真模型,通过设置不同工况(如稳态、不平衡跌落、电压骤变)进行仿真实验,深入掌握各控制环节对系统性能的影响,从而全面把握构网型逆变器在复杂电网条件下的运行特性和控制精髓。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧