分享
 
 
 

VFP打造屏幕取色器的苦难历程

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

经过自己努力,这个屏幕取色器终于成功了(等过一段时间,小弟会把这个小工具放到自己网站上去,大家有兴趣可以下载来试试),不过此间的苦难历程恐怕只有我自己才了解。在这里把自己的过程做为开发笔记记下来,以作为前车之鉴。

前面一直比较顺利,声明函数,然后调用,虽然是第一次做,但思路还是比较清楚的。

调出API的帮助文档,我用的是网上流行的江南红雨API档案,还不错,挺全,以前用这些声明,基本上是照猫画虎。用VFP的语法套用过来应该没问题,却不呈想,因此给自己埋下了深深的祸根,自己以后因为这几句声明,走上了自己的苦难历程。

自己的声明是这样:

DECLARE integer GetCursorPos IN user32 as "GetCursorPos" string @lpPoint

DECLARE integer ClientToScreen IN user32 as "ClientToScreen" integer hWnd,string @lpPoint

DECLARE integer GetPixel IN gdi32 as "GetPixel" integer hDc,integer xPos,integer yPos

DECLARE integer GetDC IN user32 as "GetDC" integer hWnd

自己自认是没问题,不过内行相信已经看到了,但等自己悟出这个问题以后,自己已经是经历了N多的苦难以后了。先不说这些,先说调用。

遇到的第一个问题,坐标的转换。即在文本框里显示两个坐标,这是重要的一部分,也是进行取色的重要部分。

很显然,VFP不支持结构,改用字符串,类型已然做了改动,而且调用API也很成功,具体代码在前一篇文章里,在此不再详术,现在的问题,是如何把字符串的类型转换成整数类型,从VB的声明里,这个字符串应该是64位,即有8个字节的,分别是两个32位的变量,即X,Y两个LONG类型(VB的声明),于是把这两个分别分离出来,再进一步,横、纵坐标的最大值是1024或者是1600(当然有可能会更大,不过在一段时间内相信不会超过65536^_^),于是取低十六位应该是够了。便还是一愁莫展,现在还要有同时转换两个字节,网上的流行的作法好像是用的chartobin()函数转换,但这不是VFP自带的函数,需要从网上找相应的文件,自己运气不是很好,没有找到。

到了山穷水尽了,自己忽然想到了ASC()虽然只能处理单字符,不过自己可以让处理两次,做为一个2位的256进制数来处理,于是这个问题解决了。

如法炮制,取颜色也这样或得了解决,不过中间出现了一个小插曲,因为API返回的是一个4字字的integer类型,显然有效的是三个字节,分别是红、绿、蓝,可是具体的字节分部,不是很清楚,于是自己按习惯,从高到低开始做,可是做出来以后,在取色的时候才发现,红色、蓝色被取值颠倒了,哈,调来,一切OK。

于是,做了一个十进制转十六进制表示的小程序,然后可以同时显示两种类型,并且,再做一个热键,把颜色值复制到剪切板,一切OK。

可以发布了,编译,也很顺利,测试也没发现问题。

自己怎么也感觉应该不会有问题,于是打安装包,把VFP9的运行库考过来,又没有控件需要注册,所以开始编译,等到别的机器上一试,弹出一个错误:

“Microsfot Viral FoxPro Can not load resouce”

自己真是很意外,该 有的都有了呀,API函数是系统自代的,应该不用再另外打进去吧,可是拿到另外几台机器上,问题照旧。于是自己只好把user32.dll和gdi32.dll两个文件,打进包再编译一下。这个问题是解决了,可是自己苦难真的来临了。

开始弹出窗体,但虽之出错

use32 Caused an exeception

API调用发生异常,怎么会这样,自己明明试了很正常啊,可是从哪试都是同一个结果,于是打开工程项目,重新调试。意外出现了。

没编译的也是出错了,同样的错误!!我晕,不知所措,真的要我从头再来吗?

更让我难过的是,自己以前运行正常的东西也开始出错了。

自己冷静想了一下,应该都正常啊,该打包的都打包了,该声明的也都声明了,自己不得不从新把目光放到这几个API函数声明的上面。可是出错的函数是getpixel() 并不是第一个啊,自己百思不得过且过 其解,在自己上网的时候,看到了一篇VFP的调用示例,是一全取硬盘卷序列号的,自己把目光看到win32api上,自己想到了,可能是这里出错了,于是回去,编辑,把声明改过来,全部改成win32api试试,问题依旧。自己想到可能是自己打包打错了,不该把两个DLL放进去,于是从别的机器上找到文件拷过来,还是一样。自己真的是无计可施了。

正好,自己机器因为病毒,不得不重做了一套系统,这时候再重新运行的时候,奇迹出现了,一切正常了,编译打包以后一切OK了。

原来是自己函数声明惹的祸,看着自己做的东西,真的感觉来得不容易,呵呵。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有