标题:VFP编程技巧,不断增加中(千万别灌水)
只看楼主
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

在软件中怎样实现屏幕抓图、窗口抓图的方法! 在软件中怎样实现屏幕抓图、窗口抓图? 在 FoxPro 中没有办法用 KEYBOARD 命令来用 PrintScrn 或 Alt+PrintScrn 填充键盘缓存以复制整个屏幕功活动窗口到剪切板中。 以下代码可以实现。 DECLARE INTEGER keybd_event IN Win32API INTEGER, INTEGER, INTEGER, INTEGER VK_SNAPSHOT = 44 VK_LMENU = 164 KEYEVENTF_KEYUP = 2 KEYEVENTF_EXTENDEDKEY = 1

*以下命令复制整个 windows 桌面到剪切板中 (等价于 PrintScrn): DoEvents keybd_event( VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0 ) && key down keybd_event( VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0 ) keybd_event( VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0 ) keybd_event( VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0 ) DoEvents

*以下命令复制活动的窗口到剪切板中 (等价于 ALT+PrintScrn): DOEVENTS keybd_event(VK_SNAPSHOT, 1, 0, 0 ) keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP, 0 ) DOEVENTS


2005-07-26 12:38
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

如果希望表单在调用时以最小化运行,可以向表单的 Init 事件传递一个参数:1

DO FORM formname WITH 1


2005-07-26 12:43
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

实现对注册表的修改

如有需要将软体资讯写入 REGISTRY 请依 REGISTRY 使用规则写入 HKEY_LOCAL_MACHINE,SOFTWARE 中(例版本序号,安装资讯....)

//WIN32API宣告 //开启机码 DECLARE INTEGER RegOpenKey IN Win32API INTEGER nHKey,; STRING cSubKey, INTEGER @nHandle

//建立机码 DECLARE Integer RegCreateKey IN Win32API INTEGER nHKey,; STRING cSubKey, INTEGER @nHandle

//关闭开启的机码 DECLARE Integer RegCloseKey IN Win32API INTEGER nHKey

//删除机码 DECLARE INTEGER RegDeleteKey IN Win32API INTEGER nHKEY,; STRING cSubkey

//删除某一机码下的值 DECLARE INTEGER RegDeletevalue IN Win32API INTEGER nHKEY,; STRING cEntry

#DEFINE HKEY_CLASSES_ROOT -2147483648 #DEFINE HKEY_CURRENT_USER -2147483647 #DEFINE HKEY_LOCAL_MACHINE -2147483646 #DEFINE HKEY_USERS -2147483645 #DEFINE ERROR_SUCCESS 0

************************************************** *** 删除机码 DeleteRegistryKey *** 注意:删除机码将导致机码下的值全数被删除 *** 传回值:.T.表成功,.NULL.表无此机码 ************************************************** LPARAMETERS HKEY,SubKey LOCAL nResult, nHandle nHandle=0 nResult=RegOpenKey(HKey,SubKey,@nHandle) IF nResult#ERROR_SUCCESS //机码不存在或无法开启 RETURN .NULL. ENDIF

nResult=RegDeleteKey(HKey,SubKey) =RegCloseKey(nHandle)

IF nResult#ERROR_SUCCESS RETURN .NULL. ENDIF

RETURN .T.

************************************************** *** 读取字串值 ReadRegistryString *** 传回值:字串或.NULL.表无此机码 ************************************************** LPARAMETERS HKey, Subkey, Entry LOCAL nHandle, nResult, nSize, cDataBuffer, nType nHandle=0

//开启机码 nResult=RegOpenKey(HKey,SubKey,@nHandle) IF nResult#ERROR_SUCCESS RETURN .NULL. ENDIF

// 使用RegQueryvalueEx决定资料型态 DECLARE INTEGER RegQueryvalueEx IN Win32API INTEGER nHKey,; STRING lpszvalueName,INTEGER dwReserved,; INTEGER @lpdwType, STRING @lpbData, INTEGER @lpcbData

//将值传回 buffer cDataBuffer=space(256) nSize=LEN(cDataBuffer) nType=0 nResult= RegQueryvalueEx(nHandle,Entry,0,@nType,@cDataBuffer,@nSize) =RegCloseKey(nHandle)

IF nResult#ERROR_SUCCESS RETURN .NULL. ENDIF

IF nSize <2 RETURN "" //空字串 ENDIF

//去除空白字元及字串後的 NULL

RETURN SUBSTR(CHRTRAN(cDataBuffer,CHR(0),""),1,nSize-1)

************************************************** *** 写入字串值 WriteRegistryString *** 传回值:.T.成功,.NULL.失败 ************************************************** LPARAMETERS HKey, Subkey, Entry, value LOCAL nHandle, nResult, nSize, cDataBuffer, nType nHandle="0" nResult="RegOpenKey(HKey,SubKey,@nHandle)"

IF nResult#ERROR_SUCCESS RETURN .NULL. ENDIF

DECLARE INTEGER RegSetvalueEx IN Win32API INTEGER nHKey,; STRING lpszEntry,INTEGER dwReserved,; INTEGER fdwType, STRING lpbData, INTEGER cbData nSize="LEN(cvalue)" nResult=" RegSetvalueEx(nHandle,Entry,0,0," value,nSize)="RegCloseKey(nHandle)"

IF nResult#nERROR_SUCCESS RETURN .NULL. ENDIF RETURN .T.

************************************************** 使用方式: CurrentVersion="1.0"


2005-07-26 12:45
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 
CTOD函数

aaa='20040908'
? CTOD(tran(aa,'@R 9999-99-99'))

&amp;&amp;将一字符型变成日期型

2005-07-26 12:49
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

如何避免在应用程序中出现VFP的窗口标题

在CONFIG.FPW文件中,加"TITLE = 你的标题"行。

另外, 也可以在主程序中加入:

_SCREEN.Caption="你的标题"


2005-07-26 12:56
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

为什么运行表单时不显示其中的任何对象

试着把表单的LockScreen属性设置为.F.。


2005-07-26 12:57
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

模式表单和非模式表单的区别是什么

模式表单一般地被用来处理错误报告,或者请求用户确认操作等。

在模式表单中,菜单不能使用。如果需要,模式表单也提供应用“等待状态”。

非模式表单提供更多的灵活性,它允许用户通过菜单操作,在表单中移动。


2005-07-26 12:57
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

如何实现移动字幕

1、首先用画图软件做一幅字幕图画。

2、建立一个表单(FORM1),单击工具栏中的计时器按钮,在表单中添加一个计时器控件(Timer1);单击工具栏中的图象按钮,在表单中加入字幕图画(Image1)。

3、双击表单中的计时器控件,编写计时器的Timer过程:

IF Thisform.image1.Top<0-Thisform.image1.Height

Thisform.image1.TOP=Thisform.height

ENDIF

Thisform.image1.Top=Thisform.image1.Top-1

指定计时器事件的间隔,以毫秒为单位:Interval=50


2005-07-26 12:57
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

为什么编译后的程序运行时屏幕一闪就不见了

你需要在你的程序中建立“等待状态”。可以用READ EVENTS命令来建立等待状态。要清除等待状态,可使用CLEAR EVENTS命令。如果你只有一个屏幕,把表单的WindowState属性设置为Modal。这也提供等待状态,但是不允许你使用菜单。当模式表单被释放时,等待状态结束并返回至操作系统。


2005-07-29 11:29
乱编
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-7-28
得分:0 
晕,完了,没信心了

2005-07-30 08:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-22767-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093065 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved