亲们,谁来到底有谁能够告诉我我VB怎么办

正在初始化报价器亲们谁能告诉我如何开装饰装修公司请高手指教1、要先找到适合经营的场地,再到当地银行或者当地审计部门的资讯证明。 2、然后到当地工商部门去办理营业执照。办执照的时候工商部门要去看场地的。 具体需要什么资料,可以到当地的工商部门去问。 3、再到当地税务部门去办理税务登记。
查看更多更多回答rolandzoe营业执照什么的店面什么的我就不说了,说点主要的, 首先你要知道自己有没有能力支撑起一家装修公司,其次你手里有没有稳定固定的设计师和其他工人。最后就是你手里的钱流动资金丰富不。考虑这几个问题,缺一不可。祝您生活愉快!!!
小龙E30R1、首先是热爱这一行事业,要把这行事业看成是你奋斗的无穷的乐趣;
2、要有(建立)相应的制度,责任和职责分明,各负其责;
3、为达到合格的工程质量,要建立施工技术标准,使之成为施工企业的软实力;
4、建立独立的监察监督机构(非常重要),对一切施工中不安全、不文明、不遵守施工技术标准的行为予以审查,要想树立良好的企业形象,这点其实真的很重要;
5、建立相应的劳动生产承包责任制,推动积极生产的热情;其他的都是些一般要求了。望采纳。
燕富强1、公司名称(5个以上公司备选名称)
2、公司注册地址的房产证及房主身份证复印件(单位房产需在房产证复印件及房屋租赁合同上加盖产权单位的公章;高新区、经济开发区、新站区居民住宅房需要提供房产证原件给工商局进行核对)
3、全体股东身份证原件
4、全体股东出资比例(股东占公司股份的安排)
5、公司经营范围(公司主要经营什么,有的范围可能涉及到办理资质或许可证)
腐姐控骚年0639和其他行业一样,需要营业执照。
办理营业执照要出示你公司的注册资金,我朋友开的家装公司注册资金就要50万,他是在南宁开的。
看你是要在哪里开公司,各地要求不一样。
1、你要先找到适合经营的场地,再到当地银行或者当地审计部门的资讯证明,证明你的帐户上拥有这么多钱,不是要交出去。
2、然后到当地工商部门去办理营业执照。办执照的时候工商部门要去看场地的。
具体需要什么资料,可以到当地的工商部门去问。
3、再到当地税务部门去办理税务登记。
4、除了以上证件是必须的,其他例如建筑工程资质证、装饰协会会员证等其他证件,能办当然就越多越好。
5、资金方面,规模小的公司(例如我朋友开的)2万元左右,如果省着点花(例如:在门面租金、门面装修、办公家具等方面控制点)那还是够花的。但也要看当地的生活水平。
不过电脑配置是不能省的,那关系到设计图纸的质量。
6、门面装修好之后,购置所需办公用品(电脑、电脑桌、椅,办公桌、椅,接待区的茶几、椅子,饮水机、绿化植物等),就可以开张了。
希望有所帮助
为你推荐热门问答1234567891011121314151617181920查看更多21222324252627282930油皮长痘的亲们,你们选对方法了吗 | 美丽也是技术活小组 | 果壳网 科技有意思
1082632人加入此小组
妹子一枚,痘龄6年。不多说别的,尝试无数,且打不了持久战,因为本身对这些方法就没信心。几点认识,表述如有误欢迎指正。目前治疗方法口服外用的不外乎激素 抗雄激素 各种酸 消炎杀菌抗生素 甚至中药等等。现在让我们细数一下长痘的原因,各种经过证实未经证实的有 内分泌紊乱 作息不规律 皮肤免疫力差 油性皮肤 毛孔堵塞 个人卫生 饮食不规律 生活压力大 还有中医上说的什么体寒 湿热 阳虚等等等等。如果你觉得你是内分泌出现问题,想从调整内分泌入手,开始各种注意,恢复作息,加强锻炼,不吃辛辣油腻,健康素食。。。我个人提倡这种生活习惯,但这和你从此就不长痘不构成因果关系。可能坚持会有效果,但没人能保证你,但很佩服能坚持到底的人,如果你说你通过节制不再长痘痘啦,向你致敬。还有吃避孕药的亲吧,这个不好说没尝试过,但听说也因人而异。中药不建议,成分不明效果不确切,几乎都一个说辞,肺热,上火,湿热,高明点的可能还说阳虚,宫寒,上热下寒。。老祖宗的东西,玄乎其玄,不是什么大病的少去看中医吧。酸类产品嘛,基于个体差异,表现会有不同,可能效果很好,也可能白忙一场,当然这也不是一个短期就能见效的办法,如果愿意尝试,也请衡量利弊再做决定。有些亲说,我看XXX从不忌口还常熬夜,皮肤还水润Q弹的,我这么注意怎么还长痘痘呢。。看看这些亲友们是不是大油皮吧,要是不是你就别和人家比啦,你个大油皮,痘痘就找你呢。不是说非油皮就不长痘,但是如果你是油皮你还长痘,那么就是你啦,开始从解决油皮这点入手吧,这样会省去很多不必要的麻烦,另外,爱口腔溃疡也是油皮表现之一。那么油皮的各位,不论遗传因素还是后天因素,是否有改善的可能呢,答案是有。楼主目前试吃B26,能调节皮脂分泌,加速新陈代谢,改善皮肤状况。请自行百度VB2 VB6,曾在三石医生还是谁的日志里看到过类似的介绍,但国内这并不是治疗痘痘的主流,就没太在意,直到父亲在日本的朋友听说了我的事,说他有办法,我开始不相信,以为又是激素类药物,谁知寄回来一看,不就是维生素嘛,还神秘兮兮的,但至少让我打消了顾虑。总之刚吃五天,油痘的各位亲,无论你是否愿意相信都请等等我的反馈,真心希望这就是终结了!--------------------------3.19来报告啦,楼主小羞涩,图什么的就不传啦维生素这个东西大家应该是知道的,都要坚持吃一段时间才能见到一点效果对我呢,不知是心理作用还是什么,首先要讲一点,我在这期间没有乱吃乱用别的东西哈,除了吃点点辣,皮肤真的变得不那么油了其实楼主也不是那种大油皮,应该算是混合,就是一天下来额头和鼻子会油油的,现在早上起来不洗脸到傍晚都不怎么见油光痘痘情况也比较稳定,目前配合用狮王的祛痘膏还有点惊喜就是皮肤变白了,或者说均匀了,这个不是我自己说的,是我姐姐说的哈,可能和我敷了自制薏米面膜有点关系?但我是对这个不报太大希望哈暂时就这些,如果还有什么疑问我会尽量及时回复的哈刚看了组里一些文章,大都是刷酸和达芙文班瑟a酸之类,我的胸口隐隐作痛,因为我也经历过的类似阶段,但不幸的是都没坚持下去。。希望这些亲能收到好效果哈,但我真不想再尝试了,过程太过痛苦----------------------------3.28吃了快20天,每天早上不洗脸就照镜子,脸上油是少了,没吃之前脸上常驻5,6颗痘痘,现在就上唇有两颗,会红按下去疼的那种。美组去年有一帖也是类似维生素的咨询帖,请戳感觉和我吃的差不多,但看回复好像都不怎么相信的样子。这个也不是药,比较奇怪这么温和的东西不试,却非要试那些猛药,⊙﹏⊙b汗-----------------------------4.18来反馈,吃这个维生素快40天,对一个急切想摆脱痘痘的人来说也不算短哈,说效果不贴切,总之和没吃的之前比皮肤油脂分泌的确减少了,也没有泛油光的现象大约在10天前有一个短暂的爆豆期,突然长了5、6个红肿的大痘痘,那段时间还在质疑维生素的作用,不过好在熬过来了虽然现在还偶尔长几颗痘痘,不过都在冒出头之前就自己吸收掉了,粉刺和油脂粒都很容易洗脸时候随之洗掉了还有一个惊喜就是后背和前胸也几乎不长痘痘了,摸起来都没有突起,另外我经常口腔溃疡,不知道是不是吃这个的原因,有几次咬破嘴,在以前绝对会变成溃疡,但现在后来不知不觉就愈合了暂时就这些,缓慢更新
我在吃符合维生素 b我的脸之前是大油田,大!油!田!洗完脸30min开始毛孔冒油,中午必须要吸油,如果一天不处理的话晚上会成滴下流(夸张)。可以想见毛孔,黑头,痘痘,你能想到的问题我都有。达芙文把我额头和面颊的油田治好了,但是鼻头刷了很久效果有,但是不像额头那样彻底。目前刷宝拉2%已经一个星期。鼻子旁边的毛孔小多了,鼻子上也是。期待效果我也不知道我在瞎BB什么。。。由楼主吃vb6想到的。。。但愿大家都有好的结果
引用 的话:在吃符合维生素 b我的脸之前是大油田,大!油!田!洗完脸30min开始毛孔冒油,中午必须要吸油,如果一天不处理的话晚上会成滴下流(夸张)。可以想见毛孔,黑头,痘痘,你能想到的问题我都有。达芙文把...复合VB我以前也有吃,不过也没坚持太久,现在吃这个是日本的,除了VB2,VB6,还有其他的成分,懂日语的看下吧
缓和皮肤粗糙,痤疮,口腔炎症,皮炎,湿疹,斑疹等的症状。但是,使用了一个月还没有看到改善的话,请去向医生和药剂师咨询。期待效果!
引用 的话:缓和皮肤粗糙,痤疮,口腔炎症,皮炎,湿疹,斑疹等的症状。但是,使用了一个月还没有看到改善的话,请去向医生和药剂师咨询。期待效果!一定会回来报告~来自
楼主不要弃坑啊⊙_⊙
等着你的repo~来自
VB2 VB6有什么不同,那个好些?
VB6一次只能吃21天,不能连续的吃。我吃过一疗程,对付溢脂性皮炎的,感觉不那么痒了,然后也不会那么冒油了,这个不知道是刷酸刷的还是吃药吃的,反正油皮现在比以前没那么油了。来自
为什么是B2和B6?不是应该吃B3(烟酸)的嘛?
谢谢,会试一试的
吃B族最简单啦~VB6的软膏,环节换季皮肤敏感的脱皮也很有效果。无论是B族还是VB6,都是OTC,药店就有,几块钱~
引用 的话:VB2 VB6有什么不同,那个好些?B2是,B6是,都影响代谢,二者是不可替代的,协同作用效果最好这个你可以百度看看会更清楚些,我说的可能会比较片面
引用 的话:为什么是B2和B6?不是应该吃B3(烟酸)的嘛?我吃这个主要成分是B2和B6,烟酸也有的哈,看图,ニコチン酸就是烟酸啦,还有Vc等等
引用 的话:吃B族最简单啦~VB6的软膏,环节换季皮肤敏感的脱皮也很有效果。无论是B族还是VB6,都是OTC,药店就有,几块钱~B族我也吃过一段时间,不知道你吃的量是多少,之前吃过安利的B族,死贵不说对比了一下成分含量,和目前我吃的这个比要少很多不过没有买过药店那种,所以不太清楚
引用 的话:B族我也吃过一段时间,不知道你吃的量是多少,之前吃过安利的B族,死贵不说对比了一下成分含量,和目前我吃的这个比要少很多不过没有买过药店那种,所以不太清楚我当然吃过安利的,我妈总给我买各种安利。不过现在吃OTC的,1-3块好像,100片~
同样吃过安利的B族 除了撒尿黄之外没别的感觉倒是吃VC和VE 感觉自己晒黑之后恢复的特别快
引用 的话:同样吃过安利的B族 除了撒尿黄之外没别的感觉倒是吃VC和VE 感觉自己晒黑之后恢复的特别快不建议吃安利,没啥大用,B2和B6一片含量都是1.2mg,量太少,也不能一天吃几十片
我看得云里雾里。。。。。是不是吃维生素B2也能改善皮肤油脂分泌状况。。。???
我看得云里雾里。。。。。是不是吃维生素B2也能改善皮肤油脂分泌状况。。。???
引用 的话:我看得云里雾里。。。。。是不是吃维生素B2也能改善皮肤油脂分泌状况。。。???这个不一定,我吃的算是种复合维生素,只不过主要成分是B2和B6
引用 的话:这个不一定,我吃的算是种复合维生素,只不过主要成分是B2和B6额。。我最近直接在吃维生素B2。。。
来反馈,吃这个维生素快40天,对一个急切想摆脱痘痘的人来说也不算短哈,说效果不贴切,总之和没吃的之前比皮肤油脂分泌的确减少了,也没有泛油光的现象大约在10天前有一个短暂的爆豆期,突然长了5、6个红肿的大痘痘,那段时间还在质疑维生素的作用,不过好在熬过来了虽然现在还偶尔长几颗痘痘,不过都在冒出头之前就自己吸收掉了,粉刺和油脂粒都很容易洗脸时候随之洗掉了还有一个惊喜就是后背和前胸也几乎不长痘痘了,摸起来都没有突起,另外我经常口腔溃疡,不知道是不是吃这个的原因,有几次咬破嘴,在以前绝对会变成溃疡,但现在后来不知不觉就愈合了暂时就这些,缓慢更新
我也是豆龄很长的性别男。。 从高中开始出痘 当时是因为熬夜导致的内分泌出问题,因为之前皮肤一直很好,结果通宵了好多天,就开始了无尽的爆豆
现在N年过去了 至少6-7年了,我最近基本不长了,皮肤变得像以前的状态转变了,不过我没有吃维他命,我是之前尝试SK2后发现脸上出油变少。。痘痘几乎不长了。。。 纯粹外敷改变的,因为理论上我只要一上火或者熬夜什么的我自己的感觉是非常明显的,首先是头皮上会有痘痘出来,然后咬破嘴不会愈合会长成口腔溃疡之类的一直不愈合,然后就是洗脸时候就能发现痘痘出来了。。。 每次都是如此,但是用了SK2后真的。。即使口腔溃疡有,脸上就是不长痘,闭口也没了。。。 完全不用注意饮食和作息。。。不过皮肤似乎变得有点干了 需要涂很多东西才行,否则干的难受点。。。。
引用 的话:我也是豆龄很长的 性别男。。 从高中开始出痘 当时是因为熬夜导致的内分泌出问题,因为之前皮肤一直很好,结果通宵了好多天,就开始了无尽的爆豆 现在N年过去了 至少6-7年了,我最近基本不长了,皮肤变得...用的是神仙水?痘痘好了之后就没再用么?
引用 的话:用的是神仙水?痘痘好了之后就没再用么?用的是神仙水, 每天早晚用。。。 用了之后就没长痘了 但是有闭口 就是白头粉刺在脸侧 后来就用肌源修护霜 白头就没有了。。。。。 另外平时我还在用的是sk2的两种面膜,一个是焕白收毛孔的 ,另一个提拉紧致的 但是都才开始用 还不太知道效果。。不过出油少是绝对的最明显效果,然后是皮肤平滑,毛孔变化不是很大,不过似乎有变小吧。。。 平时会间隔着用anr,如果天气太热涂完神仙水我就不用肌源了,会用高丝的infinity,更水一些貌似你真的可以试试神仙水,当然搭配其他的效果会更好的
引用 的话:用的是神仙水?痘痘好了之后就没再用么?一直在用
因为确实有效。。。 而且不只是祛痘。。。 平滑皮肤等等都需要。。
引用 的话:用的是神仙水, 每天早晚用。。。 用了之后就没长痘了 但是有闭口 就是白头粉刺在脸侧 后来就用肌源修护霜 白头就没有了。。。。。 另外平时我还在用的是sk2的两种面膜,一个是焕白收毛孔的 ,另一个提拉...考虑买个试用装先试试,学生党伤不起啊..
引用 的话:VB6一次只能吃21天,不能连续的吃。我吃过一疗程,对付溢脂性皮炎的,感觉不那么痒了,然后也不会那么冒油了,这个不知道是刷酸刷的还是吃药吃的,反正油皮现在比以前没那么油了。我皮肤也敏感 脸常常会痒 我干脆直接吃抗生素。。。
引用 的话:考虑买个试用装先试试,学生党伤不起啊..嗯 先试用一下吧 注意别买到冒牌的伤了皮肤。
不过神仙水应该是有效的 如果你是油皮的话 效果立竿见影
引用 的话:考虑买个试用装先试试,学生党伤不起啊..我也学生党
东西都是用奖学金买的
引用 的话:求药名第一三共制药 EVERESH B26
搜这个应该就能找到,小贵,还有很多其他的牌子。直接去药店买非处方药应该也可以,还比较便宜,但这个是现成的配方,我比较懒哈
引用 的话:我也学生党 东西都是用奖学金买的谢啦~
谢咯~我症状跟你的差不多,我也去试试~
我吃过一段时间b族,感觉没有什么特别好的效果sk2神仙水油皮用了确实很好,一整天皮肤状态都调整的很好,我是离不开的
引用 的话:我吃过一段时间b族,感觉没有什么特别好的效果 sk2神仙水油皮用了确实很好,一整天皮肤状态都调整的很好,我是离不开的我是吃了一个多月了,再吃一段时间期待量变到质变哈,B族我也放弃了,里面含量太小。。近期准备入手sk2
引用 的话:谢咯~我症状跟你的差不多,我也去试试~吃这个东西不能心急哈,就当是额外的营养补充品吧,吃不坏的是一定的
混油适用吗来自
引用 的话:混油适用吗适用的来自
引用 的话:我在吃符合维生素 b我的脸之前是大油田,大!油!田!洗完脸30min开始毛孔冒油,中午必须要吸油,如果一天不处理的话晚上会成滴下流(夸张)。可以想见毛孔,黑头,痘痘,你能想到的问题我都有。达芙文把我额...请问吃维生素B族与刷酸没有什么冲突吧?内外同时进行控油没什么副作用吧?
我之前的痘痘就是很严重,还有很多痘印,后来朋友推荐一款柏妍芝祛痘套装,1月左右痘痘全没了,连痘印都变淡了很多,皮肤也白皙细腻了很多
楼主吃的复合VB2VB6叫什么啊?
引用 的话:在吃符合维生素 b我的脸之前是大油田,大!油!田!洗完脸30min开始毛孔冒油,中午必须要吸油,如果一天不处理的话晚上会成滴下流(夸张)。可以想见毛孔,黑头,痘痘,你能想到的问题我都有。达芙文把我额...达夫文可以治脸上大油田??来自
引用 的话:我当然吃过安利的,我妈总给我买各种安利。不过现在吃OTC的,1-3块好像,100片~有图吗层主(☆_☆)来自
(C)果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:&&&&&&&&您访问的页面不见了!亲们谁能告诉我痛怎么治疗啊!
关节疼痛属于风寒痹症慢性损伤等,一般用中药、针灸、按摩、理疗均可治疗
类似问题换一批
你好腰椎间盘突出症是以下肢疼痛、麻木、酸胀感为主要症状的疾病。这个情况...
病情分析:
塞来昔布是非甾体类解热镇痛抗炎药,治疗风湿性关节炎,骨关节...
颈背疼痛、上肢无力、手指发麻、下肢乏力、行走困难、头晕、恶心、呕吐,甚...
有问题 @ 爱问Powered by iask.com
举报原因(必选):
广告或垃圾信息
不雅词句或人身攻击
激进时政或意识形态话题
侵犯他人隐私
其它违法和不良信息VB实用代码,收藏!!
&不错VB代码,收藏!!! 收藏
实现毫秒精度的延时
'Module Code:
Option Explicit
Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
Declare Function QueryPerformanceCounter Lib "kernel32" _
&&&&&&& (lpPerformanceCount As LARGE_INTEGER) As Long
Type LARGE_INTEGER
&&& LowPart As Long
&&& HighPart As Long
'实现毫秒量级精确延时,(n 毫秒)
Public Sub Wait(ByVal n As Long)
&&& Dim PFrequency As LARGE_INTEGER
&&& Dim Interval As LARGE_INTEGER
&&& Dim Privious As LARGE_INTEGER
&&& Dim Current As LARGE_INTEGER
&&& '获得高精度计数器的频率
&&& QueryPerformanceFrequency PFrequency
&&& '获得高精度运行计数器的值
&&& QueryPerformanceCounter Privious
&&& Current = Privious
&&& Interval.LowPart = (PFrequency.LowPart / 1000) * n
&&& '下面这句可以精确到微秒,好像不太实用,也未必精确到如此地步
&&& 'Interval.LowPart = (PFrequency.LowPart / 1000000) * n
&&& Interval.HighPart = 0
&&& '通过比较两次计数器的值差实现高精度延时
&&& Do While (Abs(Current.HighPart * 2 ^ 16) + Current.LowPart) - _
&&&&&&&&&&&& (Abs(Privious.HighPart * 2 ^ 16) + Privious.LowPart) & _
&&&&&&&&&&&& (Abs(Interval.HighPart * 2 ^ 16) + Interval.LowPart)
&&&&&&& QueryPerformanceCounter Current
&&&&&&& '此句若省略,循环期间其它事就都不能做了
&&&&&&& DoEvents
'Form Code:
Option Explicit
Dim l As Long
Private Sub Command1_Click()
&&& '对照时钟计时(它并不很精确,这里仅对照而已)
&&& '间隔10毫秒已经很小了
&&& Timer1.Interval = 10
&&& Wait 5000
&&& '停止计时
&&& Timer1.Interval = 0
&&& MsgBox "你够狠,憋了我5000毫秒才放出来"
Private Sub Form_Load()
&&& '共三个控件:一个时钟,一个标签,一个按钮
&&& Command1.Caption = "等待5000毫秒"
&&& Label1.AutoSize = True
&&& Label1.Caption = "这里是时钟计时"
Private Sub Timer1_Timer()
&&& l = l + 10
&&& Label1.Caption = l
-------------------------------------------------------
VB未公开的三个函数ObjPtr,StrPtr,VarPtr
'Form Code:
'ObjPtr: 返回对象实例私有域的地址
'StrPtr: 返回字符串第一个字的地址
'VarPtr: 返回变量的地址
'使用对象浏览器(Object Browser),你可以发现更多其他对象未公开的细节。
'使用诸如金山游侠之类的游戏修改器可以跟踪到这个变量的地址(查数值)
'需生成EXE,这样容易操作,不会受到VB6干扰
Dim l As Long
Private Sub Command1_Click()
&&& Print "对象实例私有域:", ObjPtr(Command1)
&&& Dim str As String
&&& str = "字符串第一个字的地址:"
&&& Print str, StrPtr(str)
&&& Print "----------------------------------"
&&& Dim ramid As Double
&&& ramid = VarPtr(l)
&&& Print "变量的内存地址:", VarPtr(l)
&&& Print "转换成十六进制:", Hex(ramid)
&&& Print "变量 l 的值:", l
Private Sub Form_Load()
&&& '为了能持久显示,便于查看
&&& Me.AutoRedraw = True
'VarPtr用在包含字符串的变量时,可能返回的指针是临时地址(UNICODE转换的缘故)
'StrPtr还是唯一能直观地告诉你空字符串和null字符串的不同的方法。
'对于null字符串(vbNullString),StrPtr的返回值为0,而对于空字符串,函数的返回值为非零
'详细信息请查阅相关文档
------------------------------------------------------------
'返回阿拉伯数字的中文大写或者普通写法的一个函数
Public Function ChnNumber(Number As Double, _
&&&&&&&&&&&&&&&&&&&&&&&&& Optional Capital As Boolean = False, _
&&&&&&&&&&&&&&&&&&&&&&&&& Optional Simple As Boolean = False) As String
&&& '返回阿拉伯数字的中文大写或者普通写法
&&& '调用方法例如:Debug.Print ChnNumber(12300.43)&&&&&& '返回:壹萬贰仟叁佰点肆叁
&&& '&&&&&&&&&&&& Debug.Print ChnNumber()&&& '返回:一万二千三百点四三
&&& '&&&&&&&&&&&& Debug.Print ChnNumber(12300.43, , 1)& '返回:一二三○○点四三
&&& '作者:csdngoodnight
&&& 'E-mail:
&&& 'Number:阿拉伯数字(12300.43)
&&& 'Capital:True为中文大写(壹萬贰仟叁佰点肆叁),默认为False普通(一万二千三百点四三)
&&& 'Simple:True为简单排列(壹贰叁零零点肆叁/一二三○○点四三)
&&& If Abs(Number) & CDbl(9.99E+15) Then
&&&&&&& '万9990 or 9990 or 9.99E+15
&&&&&&& MsgBox "超出这个范围的数字,将会有四舍五入进位情况。" & Space(5) & vbCrLf & _
&&&&&&&&&&&&&& "难道你...要计算星星的数量?偶帮不了你啦 :(", vbInformation, "老兄:天文数字啊"
&&&&&&& 'Exit Function
&&& End If
&&& Dim varNumber As Variant
&&& Dim ChnString(1) As String, strClass(1) As String
&&& Dim iNumberLen As Integer, iCapital As Integer
&&& Dim boolZero As Boolean
&&& Dim strTemp As String
&&& Dim i As Integer, j As Integer
&&& strClass(0) = "十百千万亿兆"
&&& strClass(1) = "拾佰仟萬億兆"
&&& ChnString(0) = "○一二三四五六七八九"
&&& ChnString(1) = "零壹贰叁肆伍陆柒捌玖"
&&& varNumber = Split(Format(Number, "0.################"), ".")
&&& iNumberLen = Len(varNumber(0))
&&& If Number & 0 Then
&&&&&&& varNumber(0) = Right$((varNumber(0)), iNumberLen - 1)
&&&&&&& iNumberLen = iNumberLen - 1
&&& End If
&&& iCapital = Abs(CInt(Capital))
&&& If Simple Then
&&&&&&& For i = 1 To iNumberLen
&&&&&&&&&&& j = CInt(Mid$(varNumber(0), i, 1))
&&&&&&&&&&& ChnNumber = ChnNumber & Mid$(ChnString(iCapital), j + 1, 1)
&&&&&&& Next
&&&&&&& If UBound(varNumber) & 0 Then
&&&&&&&&&&& iNumberLen = Len(varNumber(1))
&&&&&&&&&&& For i = 1 To iNumberLen
&&&&&&&&&&&&&&& j = CInt(Mid$(varNumber(1), i, 1))
&&&&&&&&&&&&&&& strTemp = strTemp & Mid$(ChnString(iCapital), j + 1, 1)
&&&&&&&&&&& Next
&&&&&&& End If
&&&&&&& If Len(strTemp) & 0 Then ChnNumber = ChnNumber & "点" & strTemp
&&&&&&& If Number & 0 Then ChnNumber = "[负]" & ChnNumber
&&&&&&& Exit Function
&&& End If
&&& If iNumberLen & 2 Then
&&&&&&& If iNumberLen = 0 Then varNumber(0) = "0"
&&&&&&& ChnNumber = Mid$(ChnString(iCapital), CInt(varNumber(0)) + 1, 1)
&&&&&&& For i = 0 To iNumberLen - 1
&&&&&&&&&&& j = CInt(Mid$(varNumber(0), iNumberLen - i, 1))
&&&&&&&&&&& strTemp = Mid$(ChnString(iCapital), j + 1, 1)
&&&&&&&&&&&
&&&&&&&&&&& If j = 0 Then
&&&&&&&&&&&&&&& If boolZero = True Then strTemp = ""
&&&&&&&&&&&&&&& If i Mod 4 = 0 Then
&&&&&&&&&&&&&&&&&&& strTemp = ""
&&&&&&&&&&&&&&&&&&& boolZero = True
&&&&&&&&&&&&&&&&&&& If i & 0 Then
&&&&&&&&&&&&&&&&&&&&&&& strTemp = Mid$(strClass(iCapital), i / 4 + 3, 1)
&&&&&&&&&&&&&&&&&&&&&&& If iNumberLen - i & 4 Then
&&&&&&&&&&&&&&&&&&&&&&&&&&& If CInt(Right$(Left$(varNumber(0), iNumberLen - i), 4)) = 0 Then strTemp = ""
&&&&&&&&&&&&&&&&&&&&&&& End If
&&&&&&&&&&&&&&&&&&& End If
&&&&&&&&&&&&&&& End If
&&&&&&&&&&&&&&& If strTemp = "零" And Capital Then boolZero = True
&&&&&&&&&&&&&&& If strTemp = "○" And Not Capital Then boolZero = True
&&&&&&&&&&& Else
&&&&&&&&&&&&&&& boolZero = False
&&&&&&&&&&&&&&& If i Mod 4 = 0 Then&& '万亿兆
&&&&&&&&&&&&&&&&&&& j = i / 4 Mod 3
&&&&&&&&&&&&&&&&&&& If j = 0 Then j = 6 Else j = j + 3& '可能出现的天文数字
&&&&&&&&&&&&&&&&&&& If i & 0 Then strTemp = strTemp & Mid$(strClass(iCapital), j, 1)
&&&&&&&&&&&&&&& Else&&&&&&&&&&& '十百千位
&&&&&&&&&&&&&&&&&&& strTemp = strTemp & Mid$(strClass(iCapital), i Mod 4, 1)
&&&&&&&&&&&&&&& End If
&&&&&&&&&&& End If
&&&&&&&&&&& ChnNumber = strTemp & ChnNumber
&&&&&&&&&&& strTemp = ""
&&&&&&& Next
&&& End If
&&& '处理小数部分
&&& If UBound(varNumber) & 0 Then
&&&&&&& iNumberLen = Len(varNumber(1))
&&&&&&& For i = 1 To iNumberLen
&&&&&&&&&&& j = CInt(Mid$(varNumber(1), i, 1))
&&&&&&&&&&& strTemp = strTemp & Mid$(ChnString(iCapital), j + 1, 1)
&&&&&&& Next
&&& End If
&&& If Len(strTemp) & 0 Then ChnNumber = ChnNumber & "点" & strTemp
&&& If Number & 0 Then ChnNumber = "[负数]" & ChnNumber
End Function
系统托盘图标 例2
将下列文件恢复后:form1.picture1中载入一个图标,运行
【Project Code:将下面代码用记事本保存为 工程1.vbp(VB工程文件),此括弧及括弧内容除外】
Class=CT CTray.cls
Reference=*\G{0-}#2.0#0#C:\WINDOWS\system32\stdole2.tlb#OLE Automation
Form=Form1.frm
Startup="Form1"
HelpFile=""
Command32=""
Name="工程1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="xufeng"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
[MS Transaction Server]
AutoRefresh=1
【Form Code:将下面代码用记事本保存为 Form1.frm(窗体文件),此括弧及括弧内容除外】
VERSION 5.00
Begin VB.Form Form1
&& Caption&&&&&&&& =&& "本例演示托盘图标"
&& ClientHeight&&& =&& 3090
&& ClientLeft&&&&& =&& 165
&& ClientTop&&&&&& =&& 855
&& ClientWidth&&&& =&& 4680
&& Icon&&&&&&&&&&& =&& "Form1.frx":0000
&& LinkTopic&&&&&& =&& "Form1"
&& ScaleHeight&&&& =&& 3090
&& ScaleWidth&&&&& =&& 4680
&& StartUpPosition =&& 3& '窗口缺省
&& Begin VB.PictureBox Picture1
&&&&& Height&&&&&&&&& =&& 735
&&&&& Left&&&&&&&&&&& =&& 720
&&&&& Picture&&&&&&&& =&& "Form1.frx":000C
&&&&& ScaleHeight&&&& =&& 675
&&&&& ScaleWidth&&&&& =&& 915
&&&&& TabIndex&&&&&&& =&& 0
&&&&& Top&&&&&&&&&&&& =&& 600
&&&&& Width&&&&&&&&&& =&& 975
&& Begin VB.Menu tempmenu
&&&&& Caption&&&&&&&& =&& "托盘菜单"
&&&&& Begin VB.Menu m_open
&&&&&&&& Caption&&&&&&&& =&& "打开&&&&&&& "
&&&&&&&& Shortcut&&&&&&& =&& ^O
&&&&& Begin VB.Menu m_save
&&&&&&&& Caption&&&&&&&& =&& "保存"
&&&&&&&& Shortcut&&&&&&& =&& ^S
&&&&& Begin VB.Menu m_11
&&&&&&&& Caption&&&&&&&& =&& "-"
&&&&& Begin VB.Menu m_exit
&&&&&&&& Caption&&&&&&&& =&& "关闭"
&&&&&&&& Shortcut&&&&&&& =&& ^Q
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim WithEvents Tray As CTray
Attribute Tray.VB_VarHelpID = -1
Private Sub Form_Load()
&&& '托盘图标
&&& Set Tray = New CTray
&&& With Tray
&&&&&&& .TipText = Me.Caption&& '提示文本
&&&&&&& .PicBox = Picture1&& '一个用于托盘的图标(PictureBox)
&&& End With
&&& Tray.ShowIcon&& '添加图标在托盘
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
&&& '删除托盘图标
&&& Tray.DeleteIcon
&&& Set Tray = Nothing
Private Sub m_exit_Click()
&&& Unload Me
'以下为托盘图标事件
Private Sub Tray_LButtonDblClick()
&&& '左键双击
Private Sub Tray_LButtonDown()
&&& '左键按下
Private Sub Tray_LButtonUp()
&&& '左键放开
Private Sub Tray_RButtonDblClick()
&&& '右键双击
Private Sub Tray_RButtonDown()
&&& '右键按下
Private Sub Tray_RButtonUp()
&&& '右键放开
&&& PopupMenu tempmenu
【Class Code:将下面代码用记事本保存为 CTray.cls(类模块文件),此括弧及括弧内容除外】
VERSION 1.0 CLASS
& MultiUse = -1& 'True
& Persistable = 0& 'NotPersistable
& DataBindingBehavior = 0& 'vbNone
& DataSourceBehavior& = 0& 'vbNone
& MTSTransactionMode& = 0& 'NotAnMTSObject
Attribute VB_Name = "CTray"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
'-------------------------------------------------------------------
'类模块:托盘图标的添加
'-------------------------------------------------------------------
Option Explicit
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _
&&&&&&& (ByVal dwMessage As Long, pNid As NOTIFYICONDATA) As Boolean
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Type NOTIFYICONDATA
&&& lSize As Long
&&& hWnd As Long
&&& lId As Long
&&& lFlags As Long
&&& lCallBackMessage As Long
&&& hIcon As Long
&&& szTip As String * 64
Private mNID As NOTIFYICONDATA
Private WithEvents mPic As PictureBox
Attribute mPic.VB_VarHelpID = -1
Public Event RButtonDown()&&&&& '鼠标右键按下
Public Event RButtonUp()&&&&&&& '鼠标右键放开
Public Event RButtonDblClick()& '鼠标右键双击
Public Event LButtonDown()&&&&& '鼠标左键按下
Public Event LButtonUp()&&&&&&& '鼠标左键放开
Public Event LButtonDblClick()& '鼠标左键双击
Private Sub Class_Initialize()
&&& With mNID
&&&&&&& .lSize = Len(mNID)
&&&&&&& .lCallBackMessage = WM_MOUSEMOVE
&&&&&&& .lFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
&&&&&&& .lId = 1&
&&& End With
Private Sub Class_Terminate()
&&& DeleteIcon
&&& Set mPic = Nothing
Public Property Let PicBox(ByVal PicBox As PictureBox)
&&& Set mPic = PicBox
&&& With mNID
&&&&&&& .hWnd = mPic.hWnd
&&&&&&& .hIcon = mPic
&&& End With
End Property
Public Property Get TipText() As String
&&& TipText = mNID.szTip
End Property
Public Property Let TipText(ByVal TipText As String)
&&& mNID.szTip = TipText & Chr$(0)
&&& Shell_NotifyIcon NIM_MODIFY, mNID
End Property
Public Function ShowIcon() As Boolean
&&& If mPic Is Nothing Then
&&&&&&& ShowIcon = False
&&&&&&& Shell_NotifyIcon NIM_ADD, mNID
&&&&&&& ShowIcon = True
&&& End If
End Function
Public Sub DeleteIcon()
&&& Shell_NotifyIcon NIM_DELETE, mNID
Private Sub mPic_Change()
&&& mNID.hIcon = mPic
&&& Shell_NotifyIcon NIM_MODIFY, mNID
Private Sub mPic_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
&&& Static bRec As Boolean
&&& Dim lMsg As Long
&&& lMsg = X / Screen.TwipsPerPixelX
&&& If bRec = False Then
&&&&&&& bRec = True
&&&&&&& Select Case lMsg
&&&&&&&&&&& Case WM_LBUTTONDBLCLK:
&&&&&&&&&&&&&&& '左键双击
&&&&&&&&&&&&&&& RaiseEvent LButtonDblClick
&&&&&&&&&&& Case WM_LBUTTONDOWN:
&&&&&&&&&&&&&&& '左键按下
&&&&&&&&&&&&&&& RaiseEvent LButtonDown
&&&&&&&&&&& Case WM_LBUTTONUP:
&&&&&&&&&&&&&&& '左键放开
&&&&&&&&&&&&&&& RaiseEvent LButtonUp
&&&&&&&&&&& Case WM_RBUTTONDBLCLK:
&&&&&&&&&&&&&&& '右键双击
&&&&&&&&&&&&&&& RaiseEvent RButtonDblClick
&&&&&&&&&&& Case WM_RBUTTONDOWN:
&&&&&&&&&&&&&&& '右键按下
&&&&&&&&&&&&&&& RaiseEvent RButtonDown
&&&&&&&&&&& Case WM_RBUTTONUP:
&&&&&&&&&&&&&&& '右键放开
&&&&&&&&&&&&&&& RaiseEvent RButtonUp
&&&&&&& End Select
&&&&&&& bRec = False
&&& End If
Shell 函数的几个示例
'Form Code:
'执行一个可执行文件,返回一个 Variant (Double),
'如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
'Shell(pathname[,windowstyle])
'Shell 函数的语法含有下面这些命名参数:
'部分 描述
'pathname 必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量, _
&&&&&&&&&&&&&&&&&&& 可能还包括目录或文件夹,以及驱动器。
'Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。 _
&&&&&&&&&&&&&&&&&&&&&& 如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。
'windowstyle 命名参数有以下这些值:
'常数 值 描述
'vbHide 0 窗口是隐藏的,并且焦点被传递给隐藏窗口。
'vbNormalFocus 1 窗口拥有焦点,并且恢复到原来的大小与位置。
'vbMinimizedFocus 2 窗口缩小为图符并拥有焦点。
'vbMaximizedFocus 3 窗口最大化并拥有焦点。
'vbNormalNoFocus 4 窗口被恢复到最近一次的大小与位置。当前活动窗口仍为活动窗口。
'vbMinimizeNoFocus 6 窗口缩小为图符。当前活动窗口仍为活动窗口。
Private Sub Command1_Click()
&&& '如果指定文件夹不存在,则创建
&&& If Dir("c:\mydos", vbDirectory) = "" Then MkDir "c:\mydos" '在硬盘上新建一个c:\mydos的文件夹。
&&& '调用指令,复制一批文件到该文件夹下(需具备xcopy.exe)
&&& Shell "xcopy.exe C:\WINDOWS\Web\Wallpaper\*.* c:\mydos/s/e", vbHide
&&& '使用浏览器打开该目录
&&& Shell "explorer.exe " & "c:\mydos", vbNormalFocus
Private Sub Command2_Click()
&&& '把DOS应用程序的屏幕输出写到一个文件中去。
&&& '例如用下列代码可把DOS命令copy的帮助信息写到一个文件中去。
&&& Open "c:\test.bat" For Output As #1 '建立批处理文件
&&& Print #1, "copy/?&c:\copyhelp.txt"
&&& Print #1, "@exit"
&&& Close #1
&&& '执行这个批处理文件
&&& Shell "c:\test.bat", vbHide
&&& '最后一句必须是@exit,不然经Shell调用后的批处理文件无法从内存中退出
---------------------------------------
托盘图标 例1
将下列文件恢复后:form1.icon中载入一个图标,运行
【Project Code:将下面代码用记事本保存为 PROJECT1.vbp(VB工程文件),此括弧及括弧内容除外】
Form=Form1.frm
Reference=*\G{0-}#2.0#0#C:\WINDOWS\system32\stdole2.tlb#OLE Automation
Module=APIS Apistuff.bas
IconForm="Form1"
Startup="Form1"
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="Rocky Mountain Computer Consulting, Inc."
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
[MS Transaction Server]
AutoRefresh=1
【Form Code:将下面代码用记事本保存为 Form1.frm(窗体文件),此括弧及括弧内容除外】
VERSION 5.00
Begin VB.Form Form1
&& Caption&&&&&&&& =&& "Form1"
&& ClientHeight&&& =&& 4710
&& ClientLeft&&&&& =&& 1635
&& ClientTop&&&&&& =&& 1830
&& ClientWidth&&&& =&& 7665
&& Icon&&&&&&&&&&& =&& "Form1.frx":0000
&& LinkTopic&&&&&& =&& "Form1"
&& ScaleHeight&&&& =&& 4710
&& ScaleWidth&&&&& =&& 7665
&& ShowInTaskbar&& =&& 0&& 'False
&& Begin VB.Menu mnuFile
&&&&& Caption&&&&&&&& =&& "文件"
&&&&& Begin VB.Menu mnuFileExit
&&&&&&&& Caption&&&&&&&& =&& "退出"
&& Begin VB.Menu mnuTray
&&&&& Caption&&&&&&&& =&& "Popup"
&&&&& Visible&&&&&&&& =&& 0&& 'False
&&&&& Begin VB.Menu mnuTrayRestore
&&&&&&&& Caption&&&&&&&& =&& "恢复"
&&&&& Begin VB.Menu mnuTrayMove
&&&&&&&& Caption&&&&&&&& =&& "移动"
&&&&& Begin VB.Menu mnuTraySize
&&&&&&&& Caption&&&&&&&& =&& "大小"
&&&&& Begin VB.Menu mnuTrayMinimize
&&&&&&&& Caption&&&&&&&& =&& "最小化"
&&&&& Begin VB.Menu mnuTrayMaximize
&&&&&&&& Caption&&&&&&&& =&& "最大化"
&&&&& Begin VB.Menu mnuTraySep
&&&&&&&& Caption&&&&&&&& =&& "-"
&&&&& Begin VB.Menu mnuTrayClose
&&&&&&&& Caption&&&&&&&& =&& "关闭"
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Public LastState As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
&&&&&&& (ByVal hwnd As Long, ByVal wMsg As Long, _
&&&&&&& ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MOVE = &HF010&
Private Const SC_RESTORE = &HF120&
Private Const SC_SIZE = &HF000&
Private Sub Form_Load()
&&& If WindowState = vbMinimized Then
&&&&&&& LastState = vbNormal
&&&&&&& LastState = WindowState
&&& End If
&&& AddToTray Me, mnuTray
&&& SetTrayTip "VB Helper tray icon program"
Private Sub Form_Resize()
&&& Select Case WindowState
&&&&&&& Case vbMinimized
&&&&&&&&&&& mnuTrayMaximize.Enabled = True
&&&&&&&&&&& mnuTrayMinimize.Enabled = False
&&&&&&&&&&& mnuTrayMove.Enabled = False
&&&&&&&&&&& mnuTrayRestore.Enabled = True
&&&&&&&&&&& mnuTraySize.Enabled = False
&&&&&&& Case vbMaximized
&&&&&&&&&&& mnuTrayMaximize.Enabled = False
&&&&&&&&&&& mnuTrayMinimize.Enabled = True
&&&&&&&&&&& mnuTrayMove.Enabled = False
&&&&&&&&&&& mnuTrayRestore.Enabled = True
&&&&&&&&&&& mnuTraySize.Enabled = False
&&&&&&& Case vbNormal
&&&&&&&&&&& mnuTrayMaximize.Enabled = True
&&&&&&&&&&& mnuTrayMinimize.Enabled = True
&&&&&&&&&&& mnuTrayMove.Enabled = True
&&&&&&&&&&& mnuTrayRestore.Enabled = False
&&&&&&&&&&& mnuTraySize.Enabled = True
&&& End Select
&&& If WindowState && vbMinimized Then _
&&&&&&& LastState = WindowState
Private Sub Form_Unload(Cancel As Integer)
&&& RemoveFromTray
Private Sub mnuFileExit_Click()
&&& Unload Me
Private Sub mnuTrayClose_Click()
&&& Unload Me
Private Sub mnuTrayMaximize_Click()
&&& WindowState = vbMaximized
Private Sub mnuTrayMinimize_Click()
&&& WindowState = vbMinimized
Private Sub mnuTrayMove_Click()
&&& SendMessage hwnd, WM_SYSCOMMAND, SC_MOVE, 0&
Private Sub mnuTrayRestore_Click()
&&& SendMessage hwnd, WM_SYSCOMMAND, SC_RESTORE, 0&
Private Sub mnuTraySize_Click()
&&& SendMessage hwnd, WM_SYSCOMMAND, SC_SIZE, 0&
【Module Code:将下面代码用记事本保存为 *.bas(基本模块文件),此括弧及括弧内容除外】
Attribute VB_Name = "APIStuff"
Option Explicit
Public OldWindowProc As Long
Public TheForm As Form
Public TheMenu As Menu
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
&&&&&&& (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
&&&&&&& ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
&&&&&&& (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
&&&&&&& (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Const WM_USER = &H400
Public Const WM_LBUTTONUP = &H202
Public Const WM_MBUTTONUP = &H208
Public Const WM_RBUTTONUP = &H205
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIF_MESSAGE = &H1
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Type NOTIFYICONDATA
&&& cbSize As Long
&&& hwnd As Long
&&& uID As Long
&&& uFlags As Long
&&& uCallbackMessage As Long
&&& hIcon As Long
&&& szTip As String * 64
Private TheData As NOTIFYICONDATA
Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ByVal wParam As Long, ByVal lParam As Long) As Long
&&& If Msg = TRAY_CALLBACK Then
&&&&&&& If lParam = WM_LBUTTONUP Then
&&&&&&&&&&& If TheForm.WindowState = vbMinimized Then _
&&&&&&&&&&&&&&& TheForm.WindowState = TheForm.LastState
&&&&&&&&&&& TheForm.SetFocus
&&&&&&&&&&& Exit Function
&&&&&&& End If
&&&&&&& If lParam = WM_RBUTTONUP Then
&&&&&&&&&&& TheForm.PopupMenu TheMenu
&&&&&&&&&&& Exit Function
&&&&&&& End If
&&& End If
&&& NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam)
End Function
Public Sub AddToTray(frm As Form, mnu As Menu)
&&& Set TheForm = frm
&&& Set TheMenu = mnu
&&& OldWindowProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
&&& With TheData
&&&&&&& .uID = 0
&&&&&&& .hwnd = frm.hwnd
&&&&&&& .cbSize = Len(TheData)
&&&&&&& .hIcon = frm.Icon.Handle
&&&&&&& .uFlags = NIF_ICON
&&&&&&& .uCallbackMessage = TRAY_CALLBACK
&&&&&&& .uFlags = .uFlags Or NIF_MESSAGE
&&&&&&& .cbSize = Len(TheData)
&&& End With
&&& Shell_NotifyIcon NIM_ADD, TheData
Public Sub RemoveFromTray()
&&& With TheData
&&&&&&& .uFlags = 0
&&& End With
&&& Shell_NotifyIcon NIM_DELETE, TheData
&&& SetWindowLong TheForm.hwnd, GWL_WNDPROC, OldWindowProc
Public Sub SetTrayTip(tip As String)
&&& With TheData
&&&&&&& .szTip = tip & vbNullChar
&&&&&&& .uFlags = NIF_TIP
&&& End With
&&& Shell_NotifyIcon NIM_MODIFY, TheData
Public Sub SetTrayIcon(pic As Picture)
&&& If pic.Type && vbPicTypeIcon Then Exit Sub
&&& With TheData
&&&&&&& .hIcon = pic.Handle
&&&&&&& .uFlags = NIF_ICON
&&& End With
&&& Shell_NotifyIcon NIM_MODIFY, TheData
---------------------------------------------------
几个小函数
'(作者:csdngoodnight,E-mail:)
Public Function LenBB(Expression As String) As Integer
&&& '取得字符串实际字节长度
&&& LenBB = LenB(StrConv(Expression, vbFromUnicode))
End Function
'-------------------------------------
'获得我的文档路径
'(作者:csdngoodnight,E-mail:)
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
&&&&&&& (ByVal pIdl As Long, ByVal pszPath As String) As Long
Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _
&&&&&&& (ByVal hwndOwner As Long, ByVal nFolder As Long, pIdl As ITEMIDLIST) As Long
Type SHITEMID
&&& cb As Long
&&& abID() As Byte
Type ITEMIDLIST
&&& mkid As SHITEMID
Public Function MyDocumentsDir(oForm As Form) As String
&&& Dim IDL As ITEMIDLIST
&&& Dim sPath As String * 260
&&& If SHGetSpecialFolderLocation(oForm.hWnd, 5, IDL) = 0 Then
&&&&&&& If SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath) Then
&&&&&&&&&&& '返回我的文档路径
&&&&&&&&&& MyDocumentsDir = Left$(sPath, InStr(sPath, vbNullChar) - 1)
&&&&&&& End If
&&& End If
End Function
'----------------------------------------
'(作者:csdngoodnight,E-mail:)
Public Function RangeDiff(RangeNameA As String, RangeNameB As String) As Integer
&&& '返回两列间隔数(Excel表中的列)
&&& Dim a As Integer, b As Integer
&&& If Len(RangeNameA) = 0 Or Len(RangeNameB) = 0 Then Exit Function
&&& RangeNameA = UCase(RangeNameA)
&&& RangeNameB = UCase(RangeNameB)
&&& If Len(RangeNameA) = 1 Then
&&&&&&& a = Asc(RangeNameA) - 64
&&&&&&& a = (Asc(Left(RangeNameA, 1)) - 64) * 26 + Asc(Right(RangeNameA, 1)) - 64
&&& End If
&&& If Len(RangeNameB) = 1 Then
&&&&&&& b = Asc(RangeNameB) - 64
&&&&&&& b = (Asc(Left(RangeNameB, 1)) - 64) * 26 + Asc(Right(RangeNameB, 1)) - 64
&&& End If
&&& RangeDiff = b - a
End Function
'-----------------------------------------
'(作者:csdngoodnight,E-mail:)
Public Function FindRepeat(strChr As String) As String
&&& '判断字符串是否有重复字符
&&& Dim i As Integer, j As Integer
&&& For i = 1 To Len(strChr)
&&&&&&& For j = 1 To Len(strChr)
&&&&&&&&&&& If j && i Then
&&&&&&&&&&&&&&& If Mid(strChr, i, 1) = Mid(strChr, j, 1) Then
&&&&&&&&&&&&&&&&&&& FindRepeat = Mid(strChr, i, 1)
&&&&&&&&&&&&&&&&&&& Exit Function
&&&&&&&&&&&&&&& End If
&&&&&&&&&&& End If
&&&&&&& Next
End Function
'---------------------------------------------------
'(作者:csdngoodnight,E-mail:)
'配合上面那个LenBB函数使用
Public Function FileNameIs(AllFileDir As String, FileDirIs As String) As String
&&& '获取文件路径中的 路径部分 和 文件名部分
&&& '调用:
&&& 'Dim filedir As String
&&& 'Debug.Print "文件名:", FileNameIs("c:\abc.txt", filedir)
&&& 'Debug.Print "路径:", filedir
&&& If Len(AllFileDir) = 0 Then FileDirIs = "": Exit Function
&&& Dim v As Variant
&&& Dim i As Integer
&&& v = Split(AllFileDir, "\")
&&& i = UBound(v)
&&& '取得路径
&&& FileDirIs = Left(AllFileDir, LenBB(AllFileDir) - LenBB(CStr(v(i))) - 1)
&&& '取得文件名
&&& FileNameIs = v(i)
End Function
'---------------------------------------------------
检查窗口是否激活
Public OldWindowProc As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
&&&&&&& (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
&&&&&&& ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
&&&&&&& (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Const GWL_WNDPROC = (-4)
Const WM_ACTIVATE = &H6
Const WA_ACTIVE = 1
Const WA_CLICKACTIVE = 2
Const WA_INACTIVE = 0
Public Function NewWindowProc(ByVal hWnd As Long, ByVal Msg As Long, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ByVal wParam As Long, ByVal lParam As Long) As Long
&&& If Msg = WM_ACTIVATE Then
&&&&&&& If (wParam = WA_ACTIVE Or wParam = WA_CLICKACTIVE) Then
&&&&&&&&&&& '活动
&&&&&&&&&&& debug.print "活动"
&&&&&&& Else
&&&&&&&&&&& '非活动
&&&&&&&&&&& debug.print "不活动"
&&&&&&& End If
&&& End If
&&& NewWindowProc = CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam)
End Function
'窗体load中加上此代码:
OldWindowProc = SetWindowLong(hWnd, (-4), AddressOf NewWindowProc)
-----------------------------------------------------
用API指定文件夹(对话框)
'Module Code:
Private Type BrowseInfo
&&&& hWndOwner As Long
&&&& pIDLRoot As Long
&&&& pszDisplayName As Long
&&&& lpszTitle As Long
&&&& ulFlags As Long
&&&& lpfnCallback As Long
&&&& lParam As Long
&&&& iImage As Long
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _
&&&&&&& (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" _
&&&&&&& (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Function BrowseForFolder(hWndOwner As Long, sPrompt As String) As String
&&& Dim iNull As Integer
&&& Dim lpIDList As Long
&&& Dim lResult As Long
&&& Dim sPath As String
&&& Dim udtBI As BrowseInfo
&&& With udtBI
&&&&&&& .hWndOwner = hWndOwner
&&&&&&& .lpszTitle = lstrcat(sPrompt, "")
&&&&&&& .ulFlags = BIF_RETURNONLYFSDIRS
&&& End With
&&& lpIDList = SHBrowseForFolder(udtBI)
&&& If lpIDList Then
&&&&&&& sPath = String$(MAX_PATH, 0)
&&&&&& lResult = SHGetPathFromIDList(lpIDList, sPath)
&&&&&&& Call CoTaskMemFree(lpIDList)
&&&&&&& iNull = InStr(sPath, vbNullChar)
&&&&&&& If iNull Then
&&&&&&&&&&& sPath = Left$(sPath, iNull - 1)
&&&&&&& End If
&&& End If
&&& BrowseForFolder = sPath
End Function
'Form Code:
Private Sub Command1_Click()
&&& Dim sDirectoryName As String
&&& sDirectoryName = BrowseForFolder(Me.hWnd, "请选择目录")
&&& Debug.Print sDirectoryName
------------------------------------------------
判定Variant变量值的类型
VarType 常数&&
语法: VarType(varname)
可在代码中的任何地方用下列常数代替实际值:
常数 值 描述
vbEmpty 0 未初始化(缺省值)
vbNull 1 不含任何有效数据
vbInteger 2 Integer
vbLong 3 长整数
vbSingle 4 单精度浮点数
vbDouble 5 双精度浮点数
vbCurrency 6 Currency
vbDate 7 Date
vbString 8 String
vbObject 9 对象
vbError 10 错误
vbBoolean 11 布尔
vbVariant 12 Variant(只用于变体的数组类型)
vbDataObject 13 数据访问对象
vbDecimal 14 Decimal
vbByte 17 Byte
vbUserDefinedType 36 包含用户定义类型的变量
vbArray 8192 数组
TypeName 函数
返回一个 String,提供有关变量的信息。
语法: TypeName(varname)
必要的 varname 参数是一个 Variant,它包含用户定义类型变量之外的任何变量。
TypeName 所返回的字符串可以是下面列举的任何一个字符串:
返回字符串 变量
&object type& 类型为 objecttype 的对象
Integer 整数
Long 长整数
Single 单精度浮点数
Double 双精度浮点数
Currency 货币
Decimal 十进制值
String 字符串
&Boolean& 布尔值:False 或 True
Error 错误值
Empty 未初始化
Null 无效数据
Object 对象
Unknown 类型未知的对象
Nothing 不再引用对象的对象变量
如果 varname 是一个数组,则返回的字符串可以是任何一个后面添加了空括号的可能的返回字符串(或 Variant)。例如,如果 varname 是一个整数数组,则 TypeName 返回 "Integer()"。
--------------------------------------------------------
VB工程组成结构
文件扩展名及描述
.bas基本模块
.cls类模块
.ctl用户控件文件
.ctx用户控件的二进制文件
.dca活动的设计器的高速缓存
.ddf打包和扩展向导CAB信息文件
.dep打包和展开向导从属文件
.dll运行中的AvtiveX部件
.dobAvtiveX文档窗体文件
.doxAvtiveX文档二进制窗体文件
.dsr活动的设计器文件
.dsx活动的设计器的二进制文件
.dws部署向导教本文件
.exe可执行文件或AvtiveX部件
.frm窗体文件
.frx二进制窗体文件
.log加载错误的日志文件
.oca控件类型库缓存文件
.ocxAvtiveX控件
.pag属性页文件
.pgx二进制属性页文件
.res资源文件
.tlb远程自动化类型库文件
.vbdAvtiveX文档状态文件
.vbgVisual Basic组工程文件
.vbl控件许可文件
.vbpVisual Basic工程文件
.vbr远程自动化注册文件
.vbwVisual Basic工程工作空间文件
.vbz向导发射文件
.wctWebClass HTML模板
-----------------------------------------------
"!"感叹号与"."圆点的用法差异
都用在对象的属性等的引用上.
圆点操作符"."用来表示对象的属性和方法,在引用时需要用在对象的名称、圆点和需要的属性和方法.例如引用按钮的Caption属性:Command1.Caption
感叹号"!"常用于一个控件作为一个特性访问的情况下,例如引用另一窗体中的TextBox的Text属性:Form2!Text1.Text,用"!"连接两个控件,且前者是后者的容器.值得注意的是这里如果使用"."替换"!",可以获得同样效果.为了提高代码可读性,用"!"吧.
------------------------------------------
动态数组相关
'介绍如何声明动态数组,以及保留动态数组的内容
'声明动态数组
Dim MyArray() As Integer
Private Sub Form_Load()
&&& Dim i As Integer
&&& Dim j As Integer
&&& '重定数组数维大小
&&& ReDim MyArray(j)
&&& Debug.Print "当前数维:", UBound(MyArray)
&&& For i = 0 To j
&&&&&&& '初始化数组
&&&&&&& MyArray(i) = i
&&&&&&& Debug.Print MyArray(i)
&&& '若要再次重定数维大小,而且要保留原有数据
&&& '那么,用关键字 Preserve,但它只能重定最末维大小
&&& j = j + 5
&&& ReDim Preserve MyArray(j)
&&& Debug.Print "当前数维:", UBound(MyArray)
&&& '查看数据
&&& For i = j - 5 To j
&&&&&&& MyArray(i) = i
&&&&&&& Debug.Print MyArray(i)
&&& Debug.Print "全部数据:"
&&& For i = 0 To j
&&&&&&& Debug.Print MyArray(i)
----------------------------------------------------
遍历所有控件和判断控件类型
Private Sub Form_DblClick()
&&& '定义对象
&&& Dim ctl As Control
&&& '遍历所有控件
&&& For Each ctl In Me&& 'For Each ctl In Me.Controls
&&&&&&& '根据类型,改变属性值
&&&&&&& If TypeOf ctl Is TextBox Then
&&&&&&&&&&& ctl.Text = "文本框" & ctl.Text
&&&&&&& ElseIf TypeOf ctl Is Label Then
&&&&&&&&&&& ctl.Caption = "标签" & ctl.Caption
&&&&&&& ElseIf TypeOf ctl Is CommandButton Then
&&&&&&&&&&& ctl.Caption = "按钮" & ctl.Caption
&&&&&&& End If
VB的坐标系统综述
由于在visual basic系统中有多种坐标定义,容易使初学者混淆,本文将详细总结vb的坐标系统的一些基本概念,并提供坐标定义的详细方法:
visual basic 坐标系统概述:
visual basic 的坐标系统是指在屏幕(screen)、窗体(form)、容器(container)上定义的表示图形对象位置的平面二维格线,一般采用数对(x,y)的形式定位。其中,x 值是沿 x 轴点的位置,最左端是缺省位置 0。y 值是沿 y 轴点的位置,最上端是缺省位置 0。
在visual basic坐标系中,沿坐标轴定义位置的测量单位,统称为刻度,坐标系统的每个轴都有自己的刻度。坐标轴的方向、起点和刻度都是可变的,在后面的叙述中,将讨论如何改变这些定义。
如何创建坐标系统:
创建图形对象的坐标系统,一般有以下几种方法:
1、使用系统缺省定义:
在系统缺省状态下,visual basic使用twips坐标系,以’缇’为单位(1缇的长度等于1/1440英寸;1/567厘米;1/20磅)。应当注意的是:这些值指示的是图形对象打印尺寸的大小。而在计算机屏幕上的物理距离则根据监视器的大小及分辨率的变化而变化。
2、选择系统标准刻度定义:
除了缺省的twips坐标系外,用户还可以通过对象的scalemode属性来设置其它的坐标刻度:(共有8种设置),现将这些设置列表如下:
scalemode值 表示 说明
0 user 用户自定义
1 twip 缇,系统缺省设置
2 point 磅,每英寸约为72磅
3 pixel 像素,像素是监视器或打印机分率的最小单位。每英寸里像素的数目由系统设备的分辨率决定。
4 character 字符,打印时,一个字符高 1/6 英寸,宽1/12 英寸
5 inch 英寸,每英寸为2.54厘米
6 millimeter 毫米
7 centimeter 厘米 
在上述设置值中,除了 0 和 3以外,其它所有模式都是打印机所打印的单位长度。例如,某对象长为4个单位,当 scalemode 设为 5 时,打印时就是4英寸长。在程序中设定scalemode值的代码如下:
'设窗体的刻度单位为厘米。
scalemode = 7
'设 picture1 的刻度单位为像素。
picture1.scalemode = 3
3、创建自定义坐标系统:
当scalemode=0时,即为用户自定义模式,可采用设置对象的相应属性,来创建所需的坐标系统,这些属性是:
scaleleft: 设置对象左边距值
scaletop: 设置对象上边距值
scalewidth: 设置对象宽度
scaleheight: 设置对象高度
下面给出如下设置代码:
scaleleft=100
scaletop=100
scalewidth=300
scaleheight=200
picture1.scaleleft=50
picture1.scaletop=50
则所定义的坐标系如下图所示:
scaletop=100
picture1.scaleleft=50
以上代码定义窗体左上角坐标为(100,100),定义窗体内图形对象picture1距窗体左边距离为50,上边距离为50。scalewidth 和 scaleheight 语句定义窗体内部宽度的 1/300 为水平坐标单位;当前窗体内部高度的 1/200 为垂直坐标单位。如果窗体的大小以后被调整,这些单位保持原状。也就是说:scalewidth 和 scaleheight 是按照对象的内部尺寸来定义单位的,并且这些尺寸不包括边框厚度或菜单标题的高度。scalewidth 和 scaleheight 是指对象内的可用空间的大小。它们决定了对象本身的坐标系统。这有别于内部尺寸和外部尺寸(由 width 和 height属性指定)定义,width 和 height 总是按照容器的坐标系统来表示。另外以上刻度属性都可包括分数,也可是负数。如果将 scalewidth 和 scaleheight 属性设置值为负数即改变坐标系统的方向。
4.使用scale方法定义坐标系统:
一个更简洁的改变坐标系统的途径是使用 scale 方法。定义形式如下:
[object.]scale (x1, y1) – (x2, y2)
x1 和 y1 的值,决定了 scaleleft 和 scaletop 属性的设置值。x2-x1的差值和y2-y1的差值,分别决定了 scalewidth 和 scaleheight 属性的设置值。若指定 x1 & x2 或 y1 & y2 的值,与设置 scalewidth 或 scaleheight 为负值的效果相同。例如:设定窗体坐标系统如下:
scale (100, 100)-(200, 200)
该语句定义等同于以下属性设置:
scaletop=100:scaleleft=100:scalewidth=100:scaleheight=100
如何恢复缺省坐标系统:
在定义了其它坐标系后,如果需要将坐标系统恢复为缺省的twips坐标系,可以使用不含参数的scale方法,如语句:
picture1.scale
将图形对象的坐标系统恢复为缺省,其左上角坐标为(0,0)。
---------------------------------------------------------
常数&&&&&&&&&&& 值&&&&&&&&&& 描述
vbKeyLButton 1 鼠标左键
vbKeyRButton 2 鼠标右键
vbKeyCancel 3 CANCEL 键
vbKeyMButton 4 鼠标中键
vbKeyBack 8 BACKSPACE 键
vbKeyTab 9 TAB 键
vbKeyClear 12 CLEAR 键
vbKeyReturn 13 ENTER 键
vbKeyShift 16 SHIFT 键
vbKeyControl 17 CTRL 键
vbKeyMenu 18 菜单键
vbKeyPause 19 PAUSE 键
vbKeyCapital 20 CAPS LOCK 键
vbKeyEscape 27 ESC 键
vbKeySpace 32 SPACEBAR 键
vbKeyPageUp 33 PAGEUP 键
vbKeyPageDown 34 PAGEDOWN 键
vbKeyEnd 35 END 键
vbKeyHome 36 HOME 键
vbKeyLeft 37 LEFT ARROW 键
vbKeyUp 38 UP ARROW 键
vbKeyRight 39 RIGHT ARROW 键
vbKeyDown 40 DOWN ARROW 键
vbKeySelect 41 SELECT 键
vbKeyPrint 42 PRINT SCREEN 键
vbKeyExecute 43 EXECUTE 键
vbKeySnapshot 44 SNAP SHOT 键
vbKeyInser 45 INS 键
vbKeyDelete 46 DEL 键
vbKeyHelp 47 HELP 键
vbKeyNumlock 144 NUM LOCK 键
A 键到 Z 键与其 ASCII 码的相应值'A' 到 'Z' 是一致的
常数 值 描述
vbKeyA 65 A 键
vbKeyB 66 B 键
vbKeyC 67 C 键
vbKeyD 68 D 键
vbKeyE 69 E 键
vbKeyF 70 F 键
vbKeyG 71 G 键
vbKeyH 72 H 键
vbKeyI 73 I 键
vbKeyJ 74 J 键
vbKeyK 75 K 键
vbKeyL 76 L 键
vbKeyM 77 M 键
vbKeyN 78 N 键
vbKeyO 79 O 键
vbKeyP 80 P 键
vbKeyQ 81 Q 键
vbKeyR 82 R 键
vbKeyS 83 S 键
vbKeyT 84 T 键
vbKeyU 85 U 键
vbKeyV 86 V 键
vbKeyW 87 W 键
vbKeyX 88 X 键
vbKeyY 89 Y 键
vbKeyZ 90 Z 键
0 键到 9 键与其 ASCII 码的相应值 '0' 到 '9' 是一致的
常数 值 描述
vbKey0 48 0 键
vbKey1 49 1 键
vbKey2 50 2 键
vbKey3 51 3 键
vbKey4 52 4 键
vbKey5 53 5 键
vbKey6 54 6 键
vbKey7 55 7 键
vbKey8 56 8 键
vbKey9 57 9 键
数字小键盘上的键
常数 值 描述
vbKeyNumpad0 96 0 键
vbKeyNumpad1 97 1 键
vbKeyNumpad2 98 2 键
vbKeyNumpad3 99 3 键
vbKeyNumpad4 100 4 键
vbKeyNumpad5 101 5 键
vbKeyNumpad6 102 6 键
vbKeyNumpad7 103 7 键
vbKeyNumpad8 104 8 键
vbKeyNumpad9 105 9 键
vbKeyMultiply 106 乘号 (*) 键
vbKeyAdd 107 加号 (+) 键
vbKeySeparator 108 ENTER 键(在数字小键盘上)
vbKeySubtract 109 减号 (-) 键
vbKeyDecimal 110 小数点 (.) 键
vbKeyDivide 111 除号 (/) 键
常数 值 描述
vbKeyF1 112 F1 键
vbKeyF2 113 F2 键
vbKeyF3 114 F3 键
vbKeyF4 115 F4 键
vbKeyF5 116 F5 键
vbKeyF6 117 F6 键
vbKeyF7 118 F7 键
vbKeyF8 119 F8 键
vbKeyF9 120 F9 键
vbKeyF10 121 F10 键
vbKeyF11 122 F11 键
vbKeyF12 123 F12 键
vbKeyF13 124 F13 键
vbKeyF14 125 F14 键
vbKeyF15 126 F15 键
vbKeyF16 127 F16 键
以下是我的一个安装包的注释内容:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
下面的注释包含自解压脚本命令
Path=xufengn635 v2.0
Setup=xfn6353.exe
Overwrite=1
Title=庆晓资料运算工具 2.0 安装程序
《庆晓资料运算工具& ver 2.0 最终用户许可协议》
首先你必须承认:世界上没有烤不熟的地瓜,以表明你与作者就
地瓜一事已达成共识。
其次,(此处略去)
联系作者:旭峰
Shortcut=D, "xfn6353.exe", "", "", "庆晓资料运算工具 2.0"
Shortcut=P, "xfn6353.exe", "", "", "庆晓资料运算工具 2.0"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
用WinRar制作自释放压缩包,可以同样有安装界面,同样可以创建快捷键,可以有反安装项,仅把需要的几个部件加进去就行了.体积不会很大,适用于一些免费软件.上述安装包仅1.25M,一张软盘就可以带走.在win98-2上(没有装过任何VB类型程序的系统)运行都可以通过.
其中包括的组件及描述:
xfn6353.exe主程序(form 3个,用户控件 2个,image 若干,picturebox 8个,Label 若干,combobox 若干,timer ...)704k
MSVBVM60.DLL运行库(我们用的很多函数和一些基本控件,诸如Mid,UCase,Shell,Left,Right...都在里面) 1.34M
PICCLP32.OCX因为做了个动画,用到了PictureClip,所以连控件一并打包 81.1k
help.chm帮助文件 446k
Sound目录有几个WAV在里面 40k
n635.ico图标,工程和压缩包都用到(为了减小体积,要把图标文件中不需要的24X,48X,真彩色等图层全部去掉.仅保留16X 256色和32X 256色两层)
要注意的是,有些不能自我注册的Dll或OCX,可以写个BAT文件解压后自动运行执行注册:
regsvr32 abcd.dll
rem regsvr32 /u abcd.dll
(那个regsvr32.exe要13k大小,第二行被注释掉的是反注册命令)
---------------------------------------------------------------
'Form Code:
Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA" _
&&&&&&& (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, _
&&&&&&& ByVal nVolumeNameSize As Integer, lpVolumeSerialNumber As Long, _
&&&&&&& lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
&&&&&&& ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Function GetSerialNumber(strDrive As String) As Long
&&& Dim SerialNum As Long
&&& Dim Res As Long
&&& Dim Temp1 As String
&&& Dim Temp2 As String
&&& Temp1 = String$(255, Chr$(0))
&&& Temp2 = String$(255, Chr$(0))
&&& Res = GetVolumeInformation(strDrive, Temp1, _
&&& Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
&&& GetSerialNumber = SerialNum
End Function
Private Sub form_load()
&&& '使用该函数:
&&&& MsgBox GetSerialNumber("c:\")
&&& '它将告诉你C驱的磁盘序号。
--------------------------------------------------------
获取所有驱动器类型
【Form Code:将下面代码用记事本保存为 Form1.frm(窗体文件),此括弧及括弧内容除外】
VERSION 5.00
Begin VB.Form Demo_Frm
&& Caption&&&&&&&& =&& "Demo"
&& ClientHeight&&& =&& 2670
&& ClientLeft&&&&& =&& 3795
&& ClientTop&&&&&& =&& 1905
&& ClientWidth&&&& =&& 4035
&& LinkTopic&&&&&& =&& "Form1"
&& ScaleHeight&&&& =&& 2670
&& ScaleWidth&&&&& =&& 4035
&& Tag&&&&&&&&&&&& =&& "hello"
&& Begin VB.ListBox List1
&&&&& Height&&&&&&&&& =&& 2040
&&&&& Left&&&&&&&&&&& =&& 120
&&&&& TabIndex&&&&&&& =&& 1
&&&&& Top&&&&&&&&&&&& =&& 240
&&&&& Width&&&&&&&&&& =&& 3855
&& Begin VB.CommandButton Command1
&&&&& Caption&&&&&&&& =&& "获取信息"
&&&&& Height&&&&&&&&& =&& 375
&&&&& Left&&&&&&&&&&& =&& 1440
&&&&& TabIndex&&&&&&& =&& 0
&&&&& Top&&&&&&&&&&&& =&& 2280
&&&&& Width&&&&&&&&&& =&& 975
Attribute VB_Name = "Demo_Frm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" _
&&&&&&& (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _
&&&&&&& (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
Private Const DRIVE_UNKNOWN = 0
Private Const DRIVE_NO_ROOT_DIR = 1
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
'  用来返回磁盘驱动器的个数
Public Function DriveCount() As Integer
&&& Dim BitMask As Long
&&& Dim j, i
&&& BitMask = GetLogicalDrives()
&&& For i = 0 To 24
&&&&&&& If BitMask And 2 ^ i Then
&&&&&&&&&&& j = j + 1
&&&&&&& End If
&&& Next i
&&& DriveCount = j
End Function
'& 返回驱动器的名称
Public Function LoadDrivenames(An_Array() As String) As Long
&&& Dim j, i
&&& Dim lpBuffer As String
&&& ReDim An_Array(128) As String
&&& lpBuffer = Space$(1024)
&&& '& 返回当前所有逻辑驱动器的根驱动器路径
&&& GetLogicalDriveStrings Len(lpBuffer), lpBuffer
&&& j = InStr(lpBuffer, Chr$(0))
&&& '& 存储磁盘驱动器的名称到An_Array中
&&& Do While j & 0
&&&&&&& An_Array(i) = Left$(lpBuffer, j - 1)
&&&&&&& i = i + 1
&&&&&&& lpBuffer = Mid$(lpBuffer, j + 1)
&&&&&&& j = InStr(lpBuffer, Chr$(0))
&&& ReDim Preserve An_Array(DriveCount)
End Function
'& 返回磁盘驱动器的类型
Public Function Types(Optional sDrive As String) As String
&&& Select Case GetDriveType(sDrive)
&&&&&&& Case DRIVE_UNKNOWN
&&&&&&& Types = "不能识别"
&&&&&&& Case DRIVE_NO_ROOT_DIR
&&&&&&& Types = "不存在"
&&&&&&& Case DRIVE_REMOVABLE
&&&&&&& Types = "可移除驱动器"
&&&&&&& Case DRIVE_FIXED
&&&&&&& Types = "固定驱动器"
&&&&&&& Case DRIVE_REMOTE
&&&&&&& Types = "远程驱动器"
&&&&&&& Case DRIVE_CDROM
&&&&&&& Types = "光盘驱动器"
&&&&&&& Case DRIVE_RAMDISK
&&&&&&& Types = "随机存取磁盘"
&&&&&&& Case Else
&&&&&&& Types = "ERROR"
&&& End Select
End Function
Private Sub Command1_Click()
&&& Dim DrivesN() As String
&&& Dim i As Integer
&&& Me.Cls
&&& Print "驱动器个数:" & DriveCount
&&& Call LoadDrivenames(DrivesN)
&&& For i = 0 To DriveCount - 1
&&&&&&& List1.AddItem DrivesN(i) & Types(DrivesN(i))
&&& Next i
-------------------------------------------------
ComboBox加长加宽下拉选单
'form code:
Private Declare Function MoveWindow Lib "user32" _
&&&&&&& (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
&&&&&&& ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
&&&&&&& (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Const CB_SETDROPPEDWIDTH = &H160
'& 设置ComboBox下拉选单长度函数
Public Sub SetComboHeight(ComboBox_Obj As ComboBox, NewHeight As Long)
&&& Dim OldScaleMode As Integer
&&& If TypeOf ComboBox_Obj.Parent Is Frame Then Exit Sub
&&& ' 改变ComboBox控件的容器的坐标度量单位为象素
&&& OldScaleMode = ComboBox_Obj.Parent.ScaleMode
&&& ComboBox_Obj.Parent.ScaleMode = vbPixels
&&& ' 重新定义ComboBox的尺寸
&&& MoveWindow ComboBox_Obj.hwnd, ComboBox_Obj.Left, _
&&& ComboBox_Obj.Top, ComboBox_Obj.Width, NewHeight, 1
&&& ' 恢复ComboBox控件的容器的坐标度量单位
&&& ComboBox_Obj.Parent.ScaleMode = OldScaleMode
'& 设置ComboBox下拉选单宽度函数
Public Sub SetComboWidth(ComboBox_Obj As ComboBox, NewWidth As Long)
&&& '& NewWidth 是宽度,单位是 pixels
&&& SendMessage ComboBox_Obj.hwnd, CB_SETDROPPEDWIDTH, NewWidth, 0
Private Sub Form_Load()
&&& Dim i As Integer
&&& '& 向ComboBox添加项
&&& For i = 0 To 40
&&&&&&& Combo1.AddItem ("This is the long Item " + CStr(i))
&&& Next i
'& 改变ComboBox下拉选单长度和宽度
Private Sub Change_But_Click()
&&& Call SetComboHeight(Combo1, 300)
&&& Call SetComboWidth(Combo1, 200)
获取硬盘序列号、生产厂家/型号
【Class Code:将下面代码用记事本保存为 CDiskInfo.cls(类模块文件),此括弧及括弧内容除外】
Option Explicit
'http://vip.6to23.com/NowCan1/tech/vb_hd_info.htm
'--------------------------------------------------------------------------
'&& 类模块: CDiskInfo.cls
'&& 功能说明:获取硬盘序列号、生产厂家/型号
'&& 注意事项:支持Windows 95 OSR2, Windows 98, Windows NT, Windows 2000
'&&&&&&&&&&&& XP没有测试,估计没问题,在Win9X下必须保证存在SMARTVSD.vxd
'--------------------------------------------------------------------------
Private Const MAX_IDE_DRIVES As Long = 4
Private Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512
Private Const IDENTIFY_BUFFER_SIZE As Long = 512
Private Const READ_THRESHOLD_BUFFER_SIZE As Long = 512
Private Const DFP_GET_VERSION As Long = &H74080
Private Const DFP_SEND_DRIVE_COMMAND As Long = &H7C084
Private Const DFP_RECEIVE_DRIVE_DATA As Long = &H7C088
Private Type GETVERSIONOUTPARAMS
&&& bVersion As Byte
&&& bRevision As Byte
&&& bReserved As Byte
&&& bIDEDeviceMap As Byte
&&& fCapabilities As Long
&&& dwReserved(3) As Long
Private Const CAP_IDE_ID_FUNCTION As Long = 1
Private Const CAP_IDE_ATAPI_ID As Long = 2
Private Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4
Private Type IDEREGS
&&& bFeaturesReg As Byte
&&& bSectorCountReg As Byte
&&& bSectorNumberReg As Byte
&&& bCylLowReg As Byte
&&& bCylHighReg As Byte
&&& bDriveHeadReg As Byte
&&& bCommandReg As Byte
&&& bReserved As Byte
Private Type SENDCMDINPARAMS
&&& cBufferSize As Long
&&& irDriveRegs As IDEREGS
&&& bDriveNumber As Byte
&&& bReserved(2) As Byte
&&& dwReserved(3) As Long
&&& bBuffer(0) As Byte
Private Const IDE_ATAPI_ID As Long = &HA1
Private Const IDE_ID_FUNCTION As Long = &HEC
Private Const IDE_EXECUTE_SMART_FUNCTION As Long = &HB0
Private Const SMART_CYL_LOW As Long = &H4F
Private Const SMART_CYL_HI As Long = &HC2
Private Type DRIVERSTATUS
&&& bDriverError As Byte
&&& bIDEStatus As Byte
&&& bReserved(1) As Byte
&&& dwReserved(1) As Long
Private Const SMART_NO_ERROR As Long = 0
Private Const SMART_IDE_ERROR As Long = 1
Private Const SMART_INVALID_FLAG As Long = 2
Private Const SMART_INVALID_COMMAND As Long = 3
Private Const SMART_INVALID_BUFFER As Long = 4
Private Const SMART_INVALID_DRIVE As Long = 5
Private Const SMART_INVALID_IOCTL As Long = 6
Private Const SMART_ERROR_NO_MEM As Long = 7
Private Const SMART_INVALID_REGISTER As Long = 8
Private Const SMART_NOT_SUPPORTED As Long = 9
Private Const SMART_NO_IDE_DEVICE As Long = 10
Private Type SENDCMDOUTPARAMS
&&& cBufferSize As Long
&&& drvStatus As DRIVERSTATUS
&&& bBuffer(0) As Byte
Private Const SMART_READ_ATTRIBUTE_VALUES As Long = &HD0
Private Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long = &HD1
Private Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long = &HD2
Private Const SMART_SAVE_ATTRIBUTE_VALUES As Long = &HD3
Private Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long = &HD4
Private Const SMART_ENABLE_SMART_OPERATIONS As Long = &HD8
Private Const SMART_DISABLE_SMART_OPERATIONS As Long = &HD9
Private Const SMART_RETURN_SMART_STATUS As Long = &HDA
Private Type DRIVEATTRIBUTE
&&& bAttrID As Byte
&&& wStatusFlags As Integer
&&& bAttrValue As Byte
&&& bWorstValue As Byte
&&& bRawValue(5) As Byte
&&& bReserved As Byte
Private Type ATTRTHRESHOLD
&&& bAttrID As Byte
&&& bWarrantyThreshold As Byte
&&& bReserved(9) As Byte
Private Type IDSECTOR
&&& wGenConfig As Integer
&&& wNumCyls As Integer
&&& wReserved As Integer
&&& wNumHeads As Integer
&&& wBytesPerTrack As Integer
&&& wBytesPerSector As Integer
&&& wSectorsPerTrack As Integer
&&& wVendorUnique(2) As Integer
&&& sSerialNumber(19) As Byte
&&& wBufferType As Integer
&&& wBufferSize As Integer
&&& wECCSize As Integer
&&& sFirmwareRev(7) As Byte
&&& sModelNumber(39) As Byte
&&& wMoreVendorUnique As Integer
&&& wDoubleWordIO As Integer
&&& wCapabilities As Integer
&&& wReserved1 As Integer
&&& wPIOTiming As Integer
&&& wDMATiming As Integer
&&& wBS As Integer
&&& wNumCurrentCyls As Integer
&&& wNumCurrentHeads As Integer
&&& wNumCurrentSectorsPerTrack As Integer
&&& ulCurrentSectorCapacity(3) As Byte
&&& wMultSectorStuff As Integer
&&& ulTotalAddressableSectors(3) As Byte
&&& wSingleWordDMA As Integer
&&& wMultiWordDMA As Integer
&&& bReserved(127) As Byte
Private Const ATTR_INVALID As Long = 0
Private Const ATTR_READ_ERROR_RATE As Long = 1
Private Const ATTR_THROUGHPUT_PERF As Long = 2
Private Const ATTR_SPIN_UP_TIME As Long = 3
Private Const ATTR_START_STOP_COUNT As Long = 4
Private Const ATTR_REALLOC_SECTOR_COUNT As Long = 5
Private Const ATTR_READ_CHANNEL_MARGIN As Long = 6
Private Const ATTR_SEEK_ERROR_RATE As Long = 7
Private Const ATTR_SEEK_TIME_PERF As Long = 8
Private Const ATTR_POWER_ON_HRS_COUNT As Long = 9
Private Const ATTR_SPIN_RETRY_COUNT As Long = 10
Private Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11
Private Const ATTR_POWER_CYCLE_COUNT As Long = 12
Private Const PRE_FAILURE_WARRANTY As Long = &H1
Private Const ON_LINE_COLLECTION As Long = &H2
Private Const PERFORMANCE_ATTRIBUTE As Long = &H4
Private Const ERROR_RATE_ATTRIBUTE As Long = &H8
Private Const EVENT_COUNT_ATTRIBUTE As Long = &H10
Private Const SELF_PRESERVING_ATTRIBUTE As Long = &H20
Private Const NUM_ATTRIBUTE_STRUCTS As Long = 30
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const VER_PLATFORM_WIN32s As Long = 0
Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1
Private Const VER_PLATFORM_WIN32_NT As Long = 2
Private Type OSVERSIONINFO
&&& dwOSVersionInfoSize As Long
&&& dwMajorVersion As Long
&&& dwMinorVersion As Long
&&& dwBuildNumber As Long
&&& dwPlatformId As Long
&&& szCSDVersion As String * 128
Private Declare Function GetVersionEx Lib "KERNEL32" Alias "GetVersionExA" _
&&& (lpVersionInformation As OSVERSIONINFO) As Long
Private Const CREATE_NEW As Long = 1
Private Const GENERIC_READ As Long = &H
Private Const GENERIC_WRITE As Long = &H
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2
Private Const OPEN_EXISTING& As Long = 3
Private Declare Function CreateFile Lib "KERNEL32" Alias "CreateFileA" _
&&& (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, _
&&& ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, _
&&& ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _
&&& ByVal hTemplateFile As Long) As Long
Private Declare Function DeviceIoControl Lib "KERNEL32" _
&&& (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, _
&&& ByVal nInBufferSize As Long, lpOutBuffer As Any, _
&&& ByVal nOutBufferSize As Long, lpBytesReturned As Long, _
&&& ByVal lpOverlapped As Long) As Long
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
&&& (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function CloseHandle Lib "KERNEL32" _
&&& (ByVal hObject As Long) As Long
Private m_DiskInfo As IDSECTOR
Private Function OpenSMART(ByVal nDrive As Byte) As Long
&&& Dim hSMARTIOCTL As Long
&&& Dim hd As String
&&& Dim VersionInfo As OSVERSIONINFO
&&& hSMARTIOCTL = INVALID_HANDLE_VALUE
&&& VersionInfo.dwOSVersionInfoSize = Len(VersionInfo)
&&& GetVersionEx VersionInfo
&&& Select Case VersionInfo.dwPlatformId
&&&&&&& Case VER_PLATFORM_WIN32s
&&&&&&&&&&& OpenSMART = hSMARTIOCTL
&&&&&&& Case VER_PLATFORM_WIN32_WINDOWS
&&&&&&&&&&& 'Version Windows 95 OSR2, Windows 98
&&&&&&&&&&& hSMARTIOCTL = Create

我要回帖

更多关于 到底有谁能够告诉我 的文章

 

随机推荐