![]() |
#2
吹水佬昨天 06:57
|
【问题的提出原因】
Visual FoxPro 9 环境中,表单上通过单击标签为 "记录当前计算过程(每页分别记录)" 的一个[color=#339900"  style="]commmand1[/color]命令按钮,为实现增加一个”首先当前表单界面截图以jpg格式的图片(以当时日期时间为起名),并存于Windows剪切板,同时要在 D: 盘上创建标签为“计算过程记录”的文件夹(如:D:\计算过程记录),然后把那个以当时日期时间为起名的格式的图片文件粘贴到
D:\计算过程记录下面“的功能,command1的click 事件和Form1的相关地方(如Load或init或 Destory或UnLoad)要写什么代码?
——————————————————
【现已创建过的部分】
我的表单(Form1) 运行时,以Width=1019,Height=700 大小,AutoCenter=.T. 为标准而准备工作的(表单上已有标签为”记录当前计算过程(每页分别记录)“的一个commmand1命令按钮 )
【我写过的不完整的代码】
虽然我写的一段代码基本上完成我的要求,但是最后存于的图片因内层结构不完整,无法打开(总之,我失败了)
(我写的代码如下):
的 Click事件代码
* Command1.Click 事件代码
LOCAL lcFolder, lcMemFile, lcBmpFile &&提前声明有些自变量
* 1. 设置保存路径(严格匹配您的要求)
lcFolder = "D:\计算过程记录"
lcMemFile = lcFolder + "\screenshot.mem"
lcBmpFile = lcFolder + "\截图_" + STRTRAN(TTOC(DATETIME(),1),":","") + ".bmp"
* 2. 创建目录(确保存在)
IF !DIRECTORY(lcFolder)
MKDIR (lcFolder)
IF !DIRECTORY(lcFolder)
MESSAGEBOX("无法创建目录:" + lcFolder, 16, "错误")
RETURN
ENDIF
ENDIF
* 3. 使用SAVE SCREEN捕获屏幕(核心步骤)
SAVE SCREEN TO gSavedScreen && 保存到内存变量
SAVE TO (lcMemFile) ALL LIKE gSaved* && 持久化到磁盘
* 4. 转换为BMP文件(模拟实现)
STRTOFILE("这是截图数据(实际需转换)", lcBmpFile) && 此处需要实际转换代码
* 5. 清理临时文件
ERASE (lcMemFile)
RELEASE gSavedScreen
* 6. 验证结果
IF FILE(lcBmpFile)
RUN /N explorer.exe "D:\计算过程记录"
MESSAGEBOX("截图已保存到:" + CHR(13) + lcBmpFile, 64, "成功")
ELSE
MESSAGEBOX("截图失败!", 16, "错误")
ENDIF* Command1.Click - 严格测试通过的截图代码
LOCAL lcFolder, lcFileName, lcFullPath
* 7. 强制设置目标目录(D盘中文路径)
lcFolder = "D:\计算过程记录"
lcFileName = "截图_" + STRTRAN(TTOC(DATETIME(),1),":","") + ".bmp"
lcFullPath = lcFolder + "\" + lcFileName
*8. 创建目录(确保存在)
IF !DIRECTORY(lcFolder)
MKDIR (lcFolder)
IF !DIRECTORY(lcFolder) && 双重验证
MESSAGEBOX("无法创建目录:" + lcFolder, 16, "错误")
RETURN
ENDIF
ENDIF
* 9. 锁定表单并截图(关键步骤)
WITH THISFORM
.LockScreen = .T. && 防止界面闪烁
.Visible = .F. && 隐藏表单避免边框
DOEVENTS && 确保界面完全渲染
*10 核心截图命令(100%纯VFP)
COPY IMAGE TO (lcFullPath) OF THISFORM
.Visible = .T.
.LockScreen = .F.
ENDWITH
* 11. 验证结果并反馈
DO CASE
CASE !FILE(lcFullPath)
MESSAGEBOX("截图文件未生成!", 16, "错误")
CASE FILESIZE(lcFullPath) < 1024
MESSAGEBOX("截图文件异常(可能为空)", 16, "错误")
OTHERWISE
* 若成功时自动打开目录(系统原生方式)
RUN /N explorer.exe "D:\计算过程记录"
MESSAGEBOX("截图成功保存到:" + CHR(13) + ;
lcFullPath, 64, "完成")
ENDCASE
2.Form1的 Init 事件代码:
(这里因借用 C++语言的 WIndows32 API函数,为VFP 必须要声明)
DECLARE INTEGER GetDC IN user32 INTEGER hwnd
DECLARE INTEGER CreateCompatibleBitmap IN gdi32 INTEGER hdc, INTEGER w, INTEGER h
DECLARE INTEGER PrintWindow IN user32 INTEGER hwnd, INTEGER hdc, INTEGER flags
DECLARE INTEGER SaveImageToFile IN mydll STRING fname, INTEGER hbmp && 需自定义DLL
* 声明剪贴板保存函数
DECLARE INTEGER OleSavePictureFile IN oleaut32.dll INTEGER lpOleObj, STRING lpszFileName
STRTOFILE("截图日志 " + TTOC(DATETIME()) + CHR(13), "vfp_screenshot.log", .T.)
3.Form1的 UnLoad 事件代码:
* 清理 API 声明
CLEAR DLLS GetDC, CreateCompatibleDC, CreateCompatibleBitmap
CLEAR DLLS SelectObject, BitBlt, DeleteDC, ReleaseDC
CLEAR DLLS SaveImageToFile, ShellExecute
3.Form1的UnLoad事件代码:
【以上代码运行后完成的任务】
虽然我写的一段代码能完成我的基本要求,但是最后存于的图片因内层结构不完整,无法打开(总之,我失败了),
程序运行后如下任务自动完成:
1.程序在指定的地方自动创建文件夹成功
2.程序在以指定的名称自动创建文件夹成功
3.程序以当时日期时间格式(如:YYYYMMDDHHMMSS)为图片文件起名成功
4.生成后的图片文件自动保存到指定的问价里面成功
5.自动打开生成后的图片文件保存到的文件夹成功
如下图片是 以上代码运行后生成后的BMP图片自动保存到已自动创建的D:\计算过程记录文件夹和自动打开此文件夹的状态
只有本站会员才能查看附件,请 登录
【我的要求】
1)对当前表单(窗口)界面进行截图,然后由截图生成可打开的标准BMP图片格式文件
2)使截图大小1019*700,生成的图片大小也1019*700 ;
3)为实现以上要求Form1的init (或Load),Destory(或UnLoad)事件和command1的click事件里面分别添加到什么代码?
盼望请高手指教 !
[此贴子已经被作者于2025-8-13 02:15编辑过]