注册 登录
编程论坛 VB6论坛

《奥运邮集》软件代码介绍——VB6初学之友

jrs123 发布于 2008-03-15 09:36, 17146 次点击
虽然这只是一个有文字说明的图片浏览软件,但偶是在业余条件下从零开始学的,在学习中遇到的一些代码觉得对初学者很有帮助。在此发帖,希望对您有所帮助。
   
    一、为什么要学编程?
    这是对每一个业余编程爱好者提出的至关重要的问题,不然您会浪费毕生中一段宝贵的时光。
    2008年,北京迎来了第29届奥运会,偶将以前出版过的《奥林匹克运动会邮票集》图书改编成一部软件——《奥林匹克运动会邮票集》软件。
    愿《奥运邮集》软件也为北京奥运会献上一分光和热!
[[it] 本帖最后由 jrs123 于 2008-6-7 13:50 编辑 [/it]]

[[it] 本帖最后由 jrs123 于 2008-6-7 14:11 编辑 [/it]]

[[it] 本帖最后由 jrs123 于 2008-6-7 14:12 编辑 [/it]]

[[it] 本帖最后由 jrs123 于 2008-6-9 08:25 编辑 [/it]]
70 回复
#2
jrs1232008-03-15 10:23
曾走了一段弯路
一开始,《奥运邮集》是选用了编制成“网页”的形式。而且整整用了“一年”的时间完成的《奥运邮集》网站制作。
    遗憾的是,“网页”式的《奥运邮集》浏览起来,效果极不理想(至少偶是这么认为的),于是就决定推翻重来。
    偶是学机械的,对“编程”也是一窍不通。于是花了很长一段时间,在“百度”上寻求,要学哪种编程语言合适......

[[it] 本帖最后由 jrs123 于 2008-6-7 14:27 编辑 [/it]]
#3
iewanna2008-03-15 13:13
呵呵~~看下你的结果想弄成什么样子
#4
随风逐流2008-03-15 13:45
我在考虑是不是把这个帖子给转移掉
怎么感觉废话好多。。。
#5
刨子头2008-03-15 19:43
写得很好!
我支持,加油!
#6
jrs1232008-03-16 14:45
二、选学什么编程软件?
这也是如今在论坛上常遇到的问题。偶为之也大动过脑筋。最终结论如下:
1.VB:是初学者的首选。容易入门和学习速度快,软件界面友好。更重要的是有较好的学习氛围和人气较旺的论坛。
2. PB:是开发大型MIS及各类数据库跨平台应用的首选,属高级编程语言,有关书籍的缺乏,其基础语言也不适合初学者。
3. C++ Builder/Dephi:是唯一一套能够同时适用于开发数据库应用、网络及Web应用、分布式应用、可重用组件、系统软件、驱动程序、多媒体及游戏等所有软件的高效率开发环境。但其基础语言不够通用和开发系统软件功能不足。这也不适宜偶的选用。
4. VC:从功能上讲除了跨平台应用外什么都可开发。基础语言的普及程度高,以及其代码的执行效率高等特性、VC自带强大帮助文档和大量优质教材,VC在数据库开发工具中始终可以稳住阵角。这可以是初学者选用之一。
5. JAVA:由于其开发环境的配置较难,偶不选它。
    虽然微软抛弃了VB6,但作为基本语言的一种可视化编程工具。在中国乃至全世界都有它的身影,它曾是最为流行的编程工具,到现在还占据着非常重要的地位。再往远处说,它好比交通工具中的“自行车”,若干百年后,汽车、摩托车、火车以至飞机都有可能被淘汰,但“自行车”将始终是人类生活和运动的伴侣。
     虽然偶最终是选用了VB6。但在学习中还是遇到了不少困难,不然也不会在这个论坛发二百多个帖子(几乎都是提问)。而且也体会到微软为何要弃儿了。
#7
jrs1232008-03-19 12:15
三、偶是怎样开始学VB6的?
    1、启蒙学习:第一想到的是视频教程(如:VB编程与应用(电大)29讲,在网上找,下载很方便)。作为“启蒙学习”比看书效果好。第一遍先快速浏览一下,看讲些什么内容;第二遍有意识的做些简单的笔记,记下每一讲的重点,看不懂的先跳过;第三遍就是有目的看一些对自己编软件有用的内容,能看懂最好,看不懂也没关系。
    完成启蒙学习后,对VB6就有了初步的认识;
    2、接触VB6软件:偶到光盘店花了几元买了一张DB的“编程高手三合一”,其中有VB6的企业版(没有“帮助系统”)文件,安装很顺利,密码是111-1111111;(提示:不要将光盘上的VB6文件复制到硬盘来安装VB6系统,它只能从光盘安装)
    启动VB6后,看到的编辑版面众多的栏目和图标,偶还是一头雾水。(在这里,将偶用过的内容编了序列号在下一讲进行介绍);
    3、收集文本教材:网上这方面的内容更多了,选一个比较通俗易懂的。文本教材要比视频教程的内容更加详细。这里,偶采用的学习方法和“启蒙学习”是一样,先记下有用的内容所在位置,其它先别管。
#8
jrs1232008-03-21 23:00
四、初识VB6
    从VB6系统的初始界面,可以看到有10可见的栏目需要偶去了解的:
    1、菜单条——提供了VB6绝大部分的命令和方法。偶编辑《奥运邮票》软件,只选用了其中一部分内容:
    (1)文件(F)——这里面偶用到的只有二项:(见图中红三角)
    “工程另存为”:一般情况下,完成一个程序编辑存盘时,会形成一个“文件”,这个文件名默认是“工程1”。当您需要将它改为其它的文件名时,如改为“奥运邮集”、“第1届”、“第2届”......等文件名时,就要到这里来改。
    提示:文件名改完之后,但原来的文件,如“工程1”在文件夹中还有,可以将其删除。(实际上是删除二个对应的文件,您知道是哪两个吗?)
    “生成工程1.exe(K)”:点击此栏后,会弹出一个对话框,系统问你要将这个“工程1.exe”文件放在何处。这时,你可以将“工程1”改为你需要用的文件名,如olpk、xj1、xj2......等。
    提示:由此功能生成的exe文件就可以在任何一台电脑上独立运行。如偶完成的“奥运邮集.exe”、“xj1.exe”、“xj2.exe”等各届奥运邮集。
#9
刨子头2008-03-23 19:38
继续吧!
#10
jrs1232008-03-25 07:50
(2)视图(V)——在正常情况下,这一栏是用不到的。但一旦图中红三角各项(即前面的系统界面图中的3-8项)没有了,或不正常时,就要从这个栏目恢复;(在偶然一次用了一个清理电脑垃圾程序后,这几项有的就消失了)
  恢复的方法很简单:点击它们后,就会弹出相应的视图,只是它们的位置需要您自己去摆放;(您不妨自己试试?)
#11
jrs1232008-03-26 10:11
(3)工程(P)——这栏的大部分项目都可以在上面图tp4的(5)中操作,这里只提二个偶用到的项目:(见“工程”图)
    引用——这是偶要在软件中提供与“QQ交友”链接时要加载的“控件”。点击此项,会弹出“引用—工程1”对话框(见“引用”图),移动滑块到“windows script host object model”项,前面打上勾(见红三角)后点“确定”即完成了该控件的“加载”工作。(链接QQ交友的其它代码以后再讲)
    工程1属性(E)——这是一个重要设置的项目。点击此栏,弹出“工程1—工程属性”对话框(见“工程属性”图)。当您的软件中有多个窗体时,在这个属性可以任意选定哪个窗体是首先启动的窗体(见红三角位置);如要先启软件“封面”或“进度条”等,都要在这里确定。
    其它的内容《奥运邮集》软件没用到,这儿就不讲了。
#12
jrs1232008-03-27 20:29
(4)工具(T)——《奥运邮集》软件用的该栏的唯一功能是“菜单编器(M)”(见工具图红三角)。点击此处,弹出“菜单编辑器”的对话框(见菜单编辑器图)。
    编辑举例如下:在(1)框内容输入奥运邮集(Y),然后在(2)框内输入英文代码“oy”;
                  当输入下一行内容时,要点击(3)位置的“下一个(N)”钮;
                  由于“第1届、第2届......”是“奥运邮集(Y)”菜单下面的子菜单目录,所以要点一下在(5)位置的向右“→”箭头钮(即右移一位),然后再输入第1届和代码xj1;
    灰色失效栏:“第6届”奥运会因第一次世界大战而未举办,所以“第6届”应是灰色,处于“失效”状态,即将(6)位置的“有效(E)”钮前面的勾去掉。
    提示:a)凡窗体菜单栏上的各项(见主页图),如奥运邮集、奥运话史、奥运与中国......等各栏编辑时都要靠最左端(与“奥运邮集(Y)”对齐);
          b)如果“第1届”的下面还有子菜单,如第1页,第2页等,则通过“→”箭头钮,将它们的位置再右移一位;
    完成“菜单目录”编辑后,就点确定,结果如“主页图”所示。
#13
jrs1232008-03-30 07:44
2、工具条——编《奥运邮集》软件主要用到工具条的三个按钮,即“保存工程”、“启动”和“结束”(见工具条图中红三角所示)。
    “保存工程”钮:这是最常用,而又经常出“状况”的钮。该钮是将软件编辑结果“存盘”。但不是说每次只有在退出VB6时才去存盘的“钮”。每当编完成一段代码或调试,就要及时“点”它一下,保存前面已完成的内容。偶就是没有做到这一点,时常忘了及时“存盘”,当电脑出现意外而卡机、重启动等,未能保存前面的结果,就会前功尽弃,后悔不已。
    “启动”钮——当您需要看一下自己的编辑效果时,就点此钮。如果代码有问题,无法正常运行程序,会弹出各类出错提示。所以每完成一段代码或软件一项功能时,就需要验证一下前面所编代码是否正常。所以,不要累积太多太久才去验证,错误多了,查找出错原因也不容易。
     “结束”钮——就是关闭前面“启动”的程序,如果运行程序出错,必需按此钮,退出运行的程序,才能进一步调试代码。
     提示:工具条上的其它“钮”有何功能,您可以点击试试。各人的习惯不同,偶只是常用以上三个钮而已。

[[it] 本帖最后由 jrs123 于 2008-3-31 13:26 编辑 [/it]]
#14
zhou2008-03-30 13:05
提示: 作者被禁止或删除 内容自动屏蔽,只有管理员可见
#15
jrs1232008-03-31 14:46
五、《奥运邮集》软件的“积木”项目
    可以说,该“邮集”软件就是各组代码“积木”式搭建成的,为了不耽误您的宝贵时间,偶将用到的“积木”列举如下,如不合您的口胃就不必往下看了:
    1、窗体页面——如何实现超长页面的结构,滚动条的代码及窗体的居中;
    2、多工程结构——夏季29届,冬季20届奥运邮票集为什么不用单工程,而用多工程,各exe文件如何跳接及进度条等;
    3、悬浮窗体——为了进入各届奥运邮集的操作方便,采用了“悬浮窗体”。此外,向用户提供友好界面的两种不同操作模式;
    4、窗体中的邮票——如何实现邮票不变形的放大与缩小,并可以由滚轮来操作;
    5、页面中的文字说明——留言式的奥运问答题、简介、趣文、标题、信息发布等不同格式的实现;
    6、子窗体的结构——子窗体的几种不同结构格式;
    7、实现与网站及QQ交谈的链接;
    8、软件的加密——《奥运邮集1-10届》是不加密的解压直接可以运行,而夏季11届以后采用了电子注册加密方式,即一个注册码只能用在一台电脑上;
    说明:7楼的系统图中(3)-(10)项不再单独讲解,而是结合到上面的“积木”一起讲,希望这样的“教学工艺”能得到您的认可。
          此外,在讲解过程中偶还会向您推荐一些收集到的好用的代码及免费的软件;如抓图软件,制作图标软件,压缩图片软件及CHM帮助文件制作软件等。
    本教材如有不足和错误之处,敬请各位高手批评指正。更希望软件中还未解决的问题在此论坛能得到帮助和解决。
    下图为第三届奥运会软件示例;(第二届奥运会因第一次世界大战而停办)

[[it] 本帖最后由 jrs123 于 2008-6-8 08:41 编辑 [/it]]
#16
刨子头2008-04-02 18:48
顶。支持!
#17
jrs1232008-04-03 10:13
谢谢“刨子头”的支持,谢谢各位网友的支持,偶会尽力把这套教材写好,欢迎大家多提宝贵意见!
#18
jrs1232008-04-04 18:06
六、《奥运邮集》软件窗体页面的结构
    1、邮票图片的载体——考虑到《奥运邮集》邮票的数量大,所以每个页面要尽量多的放置邮票,偶采用了如下操作和页面的结构选择:
    第一步:启动VB6系统,屏幕出现如7楼所示的系统图;
    第二步:点击“工具箱”上的“Frame”控件,见页面结构图中(4);此时鼠标形成十字,在Form1窗体内拖出一个“Frame1”的控件,见页面结构图中(5)。为了满足奥运邮集软件的需要,偶对“Frame1”控件的属性作如下的设置:(见Frame1属性图)
    控件名称,见(1):未变更;
    控件底图,见(2):各页可选不同底色;
    BackColor,见(3):选0-None为边框不可见(若选1-Fixed Single为边框可见);
    Caption,见(4):为空。经(3)(4)两项属性选定后,页面上就见不到此控件的名称和边框线了(见XJ7图);
    Enabled,见(5):选True,即表示当鼠标移到该控件上时,鼠标会显示属性ToolTipText,见(7)上面所设置的字体,如“点击邮票放大”的提示;
    Height,见(6):这可以按需要来确定此控件的高度。应注意的是此高度不能大于32000,否则运行软件时会出现“溢出”错误;
    此外,所有页面的宽度Width,见(8)统一选定为15200;
    提示:关于高、宽的单位将取决于“窗体Form”属性中ScaleMode的参数设定。本软件是选用默认的1-Twip;(偶曾吃过这个亏,各窗体不一致,结果各页高度和宽度都乱套了)
#19
jrs1232008-04-08 17:59
2、超长页面——有两个主要问题要解决;
    (1)在这页面上能放多少枚邮票,能放多少条文字解说框?其实就是一个窗体上允许“控件”的极限是多少的问题?
    原先设计时,每枚邮票下面都配有文字说明,但后来因控件数受到限制,也就作罢;
    (2)滚动条——滚动条是超长页面必须解决的问题。其实,一般的页面也需要设置“滚动条”。为此,偶花了很多的时间和精力,并在网友的帮助下完成的这一工作。
    说起来,“滚动条”在HTML网页制作上,是不成问题的问题,而在VB6上为什么这么麻烦!难道这是微软要弃它的一个原因?
    到现在,偶还不知道所选用的这个“滚动条”方案是否是最佳选择,所以在这里发表也希望起到“抛砖引玉”的效果。
     《奥运邮集》软件的滚动条——“抛砖引玉篇”(之一)
    https://bbs.bccn.net/viewthread.php?tid=207347&extra=page%3D1&frombbs=1
    将偶《奥运邮集》“滚动条”代码在此发帖,抛砖引玉,希望看到更好更简捷的方案!
    条件:在窗体上放一个高32000,宽15200的Frame控件,再从工具箱拖放水平与垂直二个滚动条,各属性设置如图所示:(图内的红色所示数据是经过一番调试后得出的);
    垂直滚动条VScrollBar——(1)滚动条的高(2)鼠标点击空白区时滚动条移动快慢值(见滚动条示例图)(3)与窗体左边缘距离(4)移动最大值(5)鼠标点击两端黑三角箭头,滚动条移动快慢值(见滚动条示例图)(6)与窗体顶端距离(7)滚动条的宽
    水平滚动条HScrollBar——(1)滚动条的垂直方向的高(即条宽)(2)鼠标点击空白区时滚动条移动快慢值(见滚动条示例图)(3)与窗体左边缘距离(4)移动最大值(5)鼠标点击两端黑三角箭头,滚动条移动快慢值(见滚动条示例图)(6)与窗体顶端距离(7)滚动条的总宽度(长度)

[[it] 本帖最后由 jrs123 于 2008-4-12 08:29 编辑 [/it]]
#20
jrs1232008-04-11 20:40
窗体居中问题目前仍未得到解决(已解决了)
3、窗体的居中——就是处于不同的分辨率的屏幕,窗体都显示在屏幕的中央。看似容易的问题,但在偶的奥运邮集软件始终未能解决,多个论坛上已经发了不少有关的帖子,也有不少高手介入,至今还没有解决。
    在VB6中令窗体的居中常用二种方法:一是从属性StartUpPpsition中选“2-屏幕中心”(或用鼠标将窗体拖至屏幕中心,见屏幕中心属性图的红三角所示);另一种是用代码:frame.left=(form.width-frame.width)/2等代码;
    在《奥运邮集》软件中这些方法却不能见效。为此,偶再次将这个问题放在《奥运邮集》软件的窗体居中问题——“抛砖引玉篇”(之二),希望能得到解决。详见:
          https://bbs.bccn.net/thread-199571-1-1.html

[[it] 本帖最后由 jrs123 于 2008-4-11 20:41 编辑 [/it]]
已解决窗体居中的解决方案如下
Private Sub form_resize()
        Frame1.Left = (Me.ScaleWidth - Frame1.Width) / 2 '采用这段代码窗体居中问题就解决了,
End Sub

[[it] 本帖最后由 jrs123 于 2008-6-15 13:08 编辑 [/it]]
#21
野比2008-04-12 03:49
辛苦了,加油哦,支持一个。
#22
jrs1232008-04-12 14:38
本讲小结:
本讲“《奥运邮集》软件窗体页面的结构”小结:欢迎交流[qq]791465768[/qq]
   应知:(1)如果窗体内的控件超出一个屏幕高度,就需要设置滚动条代码与模块,同时应能实现鼠标滚轮移动页面;
         (2)在不同屏幕分辨率下,页面居中的设置方法;
   应会:(1)实现超长页面高不能超过32000,完成滚动条设置,还需要一组代码和一个模块;
         (2)合理设置水平和垂直滚动条的属性,各页面ScaleMode的参数设定要一至(如都选1-Twip);
   实践:请您也完成一个超长页面,上面放一些图和控件,设置一组滚动条,看您设计的工程否正常运行?

[[it] 本帖最后由 jrs123 于 2008-6-15 13:09 编辑 [/it]]
#23
jrs1232008-04-18 08:31
七、《奥运邮集》软件的多工程结构
如果将夏季29届,冬季20届所有邮票都集中在一个工程内,会不会设计简单,操作方便呢?偶当初就是这样的思路,结果却行不通。
    1、单工程带来的问题——由于超长页面上的控件数量受到限制,所有近万枚的奥运邮票及众多的文字说明就要分布在几百个窗体上。偶进行了实践,在一个工程内的窗体数量几百个可以不受限制制,但软件启动的速度至少在二三分钟以上(这又是VB6的一个致命的弱点!),让人无法接受,所以这一方案很快就放弃了。
    此外,启动速度慢的原因,除了“机构”庞大之外,滚动条方案所采用的模块,每个窗体都要配一组代码,占用了大量的资源;加上未采用数据库,图片也占用了大量的空间,导致软件启动速度缓慢。
    有关滚动条的模块代码详见
    [url]http://bbs.bccn.net/viewthread.php?tid=207347&extra=page%3D1&frombbs=1[/url]

[[it] 本帖最后由 jrs123 于 2008-4-24 18:54 编辑 [/it]]
#24
刨子头2008-04-18 20:23
说的也是!
#25
jrs1232008-04-19 18:07
网上收集“关于窗体”的几个小程序:
在制作软件时,网上收集了不少小程序,今日整理一下,先将“关于窗体”的选出几个向大家介绍,希望对您有用;
1、打开窗体的各种方式:从左到右、从右到左、从上到下、左上到右下、右上到左下、从下到上、左下到右上以及中间到四周等。
    2、窗体定时自动关闭;
    3、鼠标滚动轮改变窗体大小;
    4、控件大小随窗体变化;
    5、右下角弹出小窗口并自动关闭;
    6、带圆弧角的窗体(圆弧大小可调);
    7、Realone不可改变大小窗体;
    8、Realone可改变大小窗体
    9、类同XP导航窗体;
   10、百叶窗方式打开窗体;
   11、窗体居中(本教材“抛砖引玉之二”的窗体居中代码就是从这里找到的);
   12、漂亮的透明窗体;
   13、无边框窗体;  
   14、窗体分割为左右两边;
#26
刨子头2008-04-19 22:38
赠人玫瑰 手留余香!!!!!!
#27
jrs1232008-04-28 13:44
多工程结构的选用
这几天忙于在软件内增加视频内容,推迟了几天发帖;
    2、多工程结构的选用——就是按每一届奥运会邮集作为一个工程。为此,多工程要解决如下几个问题:
    (1)每个工程内各页面的转接;
     ***主页面间的转接——在工程内从一个主页面要转到forma2的页面时,就用下面代码:
     Unload forma2 '先关闭再打开,为什么要这样做您知道吗?
     Load forma2
     forma2.Show
     ***主页面向副页面转接——如点击主页面上的奖牌图“image1”,就弹出xj18a01a副页面,用下面代码:
    Private Sub Image1_Click()
    Load xj18a01a
    xj18a01a.Show
    End Sub
    ***主页面与网站的链接——当您点击主页面左上角的《奥运邮集》网站图标时,就会进入IE系统的奥运邮集网站;
    有两个链接方案:
    第一个方案:Shell "explorer.exe http://www.——这个方案的优点是代码简单,但不足的是打开的网站网页是处于最小化状态;
    第二个方案:需要二段代码和一个属性设置——这个方案的优点是打开网站的网页是处于最大化状态。缺点是代码多,设置稍烦锁。
    第一段声明:
    Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal Hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Const SW_SHOW = 5
    第二段转接代码:
    Dim web As String '链接网站用,网址放在Combo1的属性Text中
  web = Combo1.Text
  ShellExecute 0&, vbNullString, web, vbNullString, vbNullString, 0
   提示:被链接的网站网址要放在网址放在Combo1的属性Text中
#28
jrs1232008-04-28 13:46
副页面的奖牌榜
副页面的奖牌榜

[[it] 本帖最后由 jrs123 于 2008-4-28 13:51 编辑 [/it]]
#29
nty232008-04-28 15:32
新开VB交流群,渴望大家踊跃加入,互相学习,共同进步,一起解决学习过程中遇到的困难。
新开VB交流群,渴望大家踊跃加入,互相学习,共同进步,一起解决学习过程中遇到的困难。
群名:中国编程论坛VB分坛
公告:在中国编程论坛(BBS.BCCN.NET)平台交流的基础上开设此交流群,以更加方便大家即时有效的进行沟通。
本群号:33393220
创建人:56272782
#30
hjy8812122008-04-29 11:47
怎么没有教程呀?
#31
jrs1232008-05-03 15:50
(2)相邻exe工程之间的转接;
各届邮集都是exe格式的文件,它们之间的转换有两个途径;
    ***第一个途径——任一届奥运邮集的首页和尾页,都有转到前一届或后一届的按钮来完成转换。
    由于转一另一届是需要打开exe格式的文件,所以需要用下面的特殊的代码:
    Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\XJ9.exe", vbMaximizedFocus
    注:XJ9.exe为将被打开的新一届邮集。
    提示:采用这种从一个exe文件转换一另一个exe文件时,原来的已打开的文件仍在进程中,而未被关闭;而采用下面的方法,打开一个新的exe文件后,就会关闭前面所有的已打开文件。
    这一段代码看似简单,但偶也是在很多论坛上才求教得到的,也曾来之不易。如果您今后设计软件遇到exe文件之间的转换或许能用得上,如果您有更好的代码也希望在这里交流。
    ***第二个途径——通过屏幕左侧的悬浮窗体上的导航钮(见图)。这一方式转换的特点是,打开某一届后,就会自动关闭掉前面其它已打开的各届。实现这一方式的代码举例如下:(有一段声明)
Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "USER32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const PROCESS_TERMINATE = 1
Private Sub Command3_Click()
Dim Ltem As Long
Dim LpID As Long
Dim hLong     As Long
Dim strWinName     As String
strWinName = "第1届" ‘被关闭的所有届都要有相应这样的一组代码;
hLong = FindWindow(vbNullString, strWinName)
If hLong Then
GetWindowThreadProcessId hLong, LpID
Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
TerminateProcess Ltem, 0
hLong = 0
End If
strWinName = "第2届"
hLong = FindWindow(vbNullString, strWinName)
If hLong Then
GetWindowThreadProcessId hLong, LpID
Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
TerminateProcess Ltem, 0
hLong = 0
End If
Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\xj3.exe", vbMaximizedFocus
End Sub
提示:由于目前夏季奥运会有29届,所以打开一届,就要设置关闭其它28届的28组代码,一个程序代码重复而又庞大。不知是否还有更好的代码?

[[it] 本帖最后由 jrs123 于 2008-5-3 19:57 编辑 [/it]]
#32
wangtuan77882008-05-03 18:45
for i=1 to N '有几届n就写几
   strWinName = "第" & i & "届"
   hLong = FindWindow(vbNullString, strWinName)
   If hLong Then
   GetWindowThreadProcessId hLong, LpID
   Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
   TerminateProcess Ltem, 0
   hLong = 0
   End If
next
呵呵,不知道这样行不?
#33
jrs1232008-05-03 20:40
楼上朋友代码可行,已通过验证,
真不错,用此代码该工程至少省了三分之二的代码,
欢迎对奥运邮集软件代码多提宝贵意见!
#34
jrs1232008-05-06 18:11
为什么会出现自变量未定义错?
在悬浮窗的软件中采用上述方案,(即多了下面12行)会出现"自变量未定义"错误,问题出在何处?那位能指正一下?(出错处见图)
Option Explicit '以下是悬浮窗用,加了此段,会出错"编译错误,自变量未定义"
Private Declare Function SetWindowPos Lib "USER32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const Swp_nomove = &H2
Private Const Swp_nosize = &H1
Private Const HWND_NOTOPMOST = -2
Private Const hwnd_topmost = -1
Private Declare Function GetCursorPos Lib "USER32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "USER32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetParent Lib "USER32" (ByVal hWnd As Long) As Long
Private Type POINTAPI
    x As Long
    y As Long
End Type '悬浮窗体止
Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long '以下均常(0)

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "USER32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const PROCESS_TERMINATE = 1
Private Sub Command1_Click()
For i = 1 To 30 '有几届n就写几
   strWinName = "第" & i & "届"
   hLong = FindWindow(vbNullString, strWinName)
   If hLong Then
   GetWindowThreadProcessId hLong, LpID
   Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
   TerminateProcess Ltem, 0
   hLong = 0
   End If
Next
Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\xj1.exe", vbMaximizedFocus
''UnloadMe False, True '关闭钮用(补)
End Sub

Private Sub Command10_Click()
For i = 1 To 30 '有几届n就写几
   strWinName = "第" & i & "届"
   hLong = FindWindow(vbNullString, strWinName)
   If hLong Then
   GetWindowThreadProcessId hLong, LpID
   Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
   TerminateProcess Ltem, 0
   hLong = 0
   End If
Next
Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\xj10.exe", vbMaximizedFocus
'UnloadMe False, True '关闭钮用(补)
End Sub

Private Sub Command11_Click()
For i = 1 To 30 '有几届n就写几
   strWinName = "第" & i & "届"
   hLong = FindWindow(vbNullString, strWinName)
   If hLong Then
   GetWindowThreadProcessId hLong, LpID
   Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
   TerminateProcess Ltem, 0
   hLong = 0
   End If
Next
Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\xj11.exe", vbMaximizedFocus
'UnloadMe False, True '关闭钮用(补)
End Sub
#35
wangtuan77882008-05-06 22:14
加一句dim i as integer
#36
jrs1232008-05-07 11:09
还不行,请看附件,
还是变量未定义

[[it] 本帖最后由 jrs123 于 2008-5-7 11:11 编辑 [/it]]
#37
wangtuan77882008-05-07 19:09
Dim i As Integer
Dim strWinName As String
Dim hLong As Long, LpID As Long, Ltem As Long
#38
jrs1232008-05-09 09:38
通过了,谢谢wangtuan7788
#39
jrs1232008-05-10 08:51
系统退出的两种不同方式
(3)系统退出;
    系统退出分为两个内容;一是各届单独退出,一是奥运邮集软件整体退出,下面分别讲解:
    ***各届单独退出——各届退出的钮只有一个,就是在每页的下面,点击该钮,会弹出“系统询问”对话框,问您是否在退出?(见图)
    当点击“是”后,要求关闭该届所有已打开的窗体。代码如下:(如要退出第17届奥运会)
Private Sub Command19_Click() '退出钮
If MsgBox("你要退出《第17届奥运会邮票集》吗?", vbYesNo + vbExclamation, "系统询问") = vbYes Then
   Unload Me
   End
   Else
   Cancel = True
    End If
End Sub
Private Sub UnloadMe(bQuestion As Boolean, bEnd As Boolean, Optional ByRef Cancel As Integer)
Dim Ltem As Long
Dim LpID As Long
Dim hLong     As Long
Dim strWinName     As String
strWinName = "第17届(1)"
hLong = FindWindow(vbNullString, strWinName)
If hLong Then
GetWindowThreadProcessId hLong, LpID
Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
TerminateProcess Ltem, 0
hLong = 0
End If
strWinName = "第17届(2)"
hLong = FindWindow(vbNullString, strWinName)
If hLong Then
GetWindowThreadProcessId hLong, LpID
Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
TerminateProcess Ltem, 0
hLong = 0
End If
    . '如果有多页面,则要重复上述代码
    .
    .
End Sub   
提示:如果点击窗体右上角的关闭钮也要求弹出“系统询问”框,就需要加下面一段代码:(奥运邮集软件各届退出均未选用此代码,而是保留关闭本窗体的功能)
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) '关闭钮用弹出“系统询问”
    If UnloadMode = 0 Then bQuestion = True
End Sub
#40
hxfly2008-05-10 17:24
这样的原创文章应该加精,BCCN的强大离不开你们......
#41
wangtuan77882008-05-11 09:42
回复 39# 的帖子
你这里也可以用上面的方法啊,用一个循环把所有页面都关了啊
#42
jrs1232008-05-11 17:23
软件整体退出用的几组代码
***软件整体退出——整体退出需要返回到“主页面”,可以通过三个钮来实现,见图。代码如下:
'整体退出声明
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal Hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const PROCESS_TERMINATE = 1
Private bQuestion As Boolean
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) '从窗体关闭钮用此段
    If UnloadMode = 0 Then bQuestion = True
End Sub
Private Sub Command1_Click() '“退出系统”钮用此段
bQuestion = True
    Unload Me
End Sub
Private Sub cdtc_Click() '菜单栏上“退出系统”钮用此段
bQuestion = True
    Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer) '关闭钮共用部分
     If bQuestion Then
        If MsgBox("您确实要退出《奥林匹克运动会邮票集》吗?", vbYesNo + vbExclamation, "系统询问") <> vbYes Then
            Cancel = True
            Exit Sub
        Else
            hLong = FindWindow(vbNullString, strWinName)
            If hLong Then
                GetWindowThreadProcessId hLong, LpID
                Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
                TerminateProcess Ltem, 0
                hLong = 0
            End If
        End If
    End If
    UnHook Me.Hwnd '鼠标滚轮事件用
    For Each pForm In Forms
        Unload pForm
    Next
     Dim i As Integer '循环关闭各窗体用
For i = 1 To 30 '有几届n就写几届
   strWinName = "第" & i & "届"
   hLong = FindWindow(vbNullString, strWinName)
   If hLong Then
   GetWindowThreadProcessId hLong, LpID
   Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
   TerminateProcess Ltem, 0
   hLong = 0
   End If
Next
strWinName = "olp" '关闭“悬浮窗体”用
hLong = FindWindow(vbNullString, strWinName)
If hLong Then
GetWindowThreadProcessId hLong, LpID
Ltem = OpenProcess(PROCESS_TERMINATE, False, LpID)
TerminateProcess Ltem, 0
hLong = 0
End If
End Sub
#43
jrs1232008-05-13 13:04
软件的多工程结构”小结
本讲“七、《奥运邮集》软件的多工程结构”小结:
   应知:(1)单工程和多工程的软件结构各有什么特点?何时采用单工程、何时采用多工程结构?
         (2)在多工程软件exe窗体之间的转换与工程内的窗体之间转换代码有何不同之处?
   应会:(1)单工程系统退出代码(含该工程所有窗体的进程退出);
         (2)多工程系统退出代码(含所有工程的进程退出);
   实践:请您也设计一个(单工程或多工程)系统退出代码,要求能弹出系统询问框的(参见上一帖的图例);
#44
jrs1232008-05-14 17:56
下拉式悬浮窗代码介绍
八、悬浮窗体的功能与代码
      奥运邮集有夏季29届、冬季20届,因为需要向用户提供一个友好的、操作方便的换届方式。为此,偶在奥运邮集软件中采用了几种不同的窗体切换方式:
    1、主页上的菜单——即通过主页上的菜单(见图a1-tp3)。打开任一届奥运邮集。该方式的特点是,通过该菜单可以连续打开各届奥运邮集;
    2、各届奥运邮集的换页钮和换届钮——该方式的特点是:
    (1)可以连续打开本届各页邮票或相邻届的奥运邮集的第一页;
    (2)点击窗体右上角的关闭钮,可单独关闭该窗体;
    (3)点击退出本届奥运邮集时,可同时关闭本届所有已打开的窗体;(注:这组代码上面39楼已介绍过了)
    3、采用隐藏在屏幕左边的悬浮窗体切换各届奥运邮集——这一方式的特点是打开一届,即关闭已打开的其余各届(注:此代码上面31楼已介绍过了);
    下面,向大家介绍一组下拉式悬浮窗的代码:(悬浮窗隐藏在屏幕上方:)
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal ptx As Long, ByVal pty As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter _
    As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
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
Const HWND_TOPMOST = -1
Private Type POINTAPI
        X As Long
        Y As Long
End Type
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
     End Type
Private Is_Move_B As Boolean
Private Is_Movestar_B As Boolean
Private MyRect As RECT
Private MyPoint As POINTAPI
Private Movex As Long, Movey As Long
Private max As Long
Private Sub Form_Load()
        Timer1.Interval = 50: Timer2.Interval = 1000
        Form1.BackColor = vbBlue
        Get_Windows_Rect
        Picture1.Width = 10700
        Form1.Width = 10770
     End Sub
Sub Get_Windows_Rect()
        Dim dl&
        max = 2200: Form1.Height = max '窗体高度调整
        Form1.Top = 0
        dl& = GetWindowRect(Form1.hwnd, MyRect)
        End Sub
Private Sub Form_Paint()
        If PtInRect(MyRect, MyPoint.X, MyPoint.Y) = 0 Then
             SetWindowPos Me.hwnd, HWND_TOPMOST, Me.Left / Screen.TwipsPerPixelX, _
                  Me.Top \ Screen.TwipsPerPixelY, Me.Width \ Screen.TwipsPerPixelX, _
                  Form1.Height \ Screen.TwipsPerPixelY, 0
        End If
End Sub
Private Sub Timer1_Timer()
       Dim dl&
       dl& = GetCursorPos(MyPoint)
           If (PtInRect(MyRect, MyPoint.X, MyPoint.Y) And _
                     Form1.Height = max) Or MyPoint.Y <= 30 Then
                         Form1.BackColor = vbBlue
                Form1.Height = max
                         If MyPoint.X - MyRect.Left <= 10 Or Is_Movestar_B Then
                   Screen.MousePointer = 15
                   Is_Move_B = True
                Else
                   Screen.MousePointer = 0
                   Is_Move_B = False
          End If
                Else
               If Not Is_Movestar_B Then
                  Form1.Height = 30
               End If
            End If
 End Sub
#45
jrs1232008-05-16 09:12
鼠标滚轮放大缩小代码
九、窗体中的邮票
   历届奥运会邮票有着不同的发行年代,不同的题材和不同的风格以及不同的价值。而奥运邮集软件除了体现这些内容外,还要在邮票的观赏性方面有突出的表现。为此,本邮集除了选用了全新的邮票外,所有邮票提供放大缩小的功能以满足用户对观赏性方面的要求;
    1、邮票的放大缩小方法之一——用鼠标拖动图片边框或角来放大缩小单枚或整组邮票;要求在拖放中,邮票不变形(即高宽比例不变)代码如下:
Dim x0, y0 As Long
Sub form_initialize()
    x0 = Me.Width
    y0 = Me.Height
End Sub
Sub Form_Load()
Dim itemx As Object
    For Each itemx In Form1
        itemx.Tag = itemx.Left & "," & itemx.Top & "," & itemx.Width & "," & itemx.Height
    Next
End Sub
Sub form_resize()
Dim itemx As Object
    For Each itemx In Form1
        itemx.Move Split(itemx.Tag, ",")(0) * Me.Width / x0, Split(itemx.Tag, ",")(1) * Me.Width / x0, Split(itemx.Tag, ",")(2) * Me.Width / x0, Split(itemx.Tag, ",")(3) * Me.Width / x0
    Next
End Sub
    2、如果要求用鼠标滚轮也能操作邮票放大缩小,还需要添加一个模块,代码如下:
Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private 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
Private Const GWL_WNDPROC = (-4)
Private Const WM_GETTEXT = &HD
Private Const WM_MOUSEWHEEL = &H20A
Dim theForm As Form
Dim PrevWndProc As Long
Public Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error Resume Next      
    Select Case MSG   
    Case WM_MOUSEWHEEL
        With theForm
            If wParam > 0 Then
                .Height = .Height + .Height * 0.2      
                .Width = .Width + .Width * 0.2
            ElseIf wParam < 0 Then
                .Height = .Height - .Height * 0.2
                .Width = .Width - .Width * 0.2
            End If
        End With
    End Select
    SubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam)   
End Function
Public Function SetSubClass(ByVal FormObject As Form)
    Set theForm = FormObject
    PrevWndProc = SetWindowLong(theForm.Hwnd, GWL_WNDPROC, AddressOf SubWndProc)
End Function
Public Function UnSubClass()
    On Error Resume Next            
    SetWindowLong theForm.Hwnd, GWL_WNDPROC, PrevWndProc   
End Function

[[it] 本帖最后由 jrs123 于 2008-5-16 12:28 编辑 [/it]]
#46
jrs1232008-05-20 19:19
十、页面中的文字说明
在窗体中有以下几种文字说明:
    1、留言式的奥运问答题——单击文字框,在弹出的文字输入框,在此框内可输入答案(见图)。该方案代码由二部分组成:
    '第一部分:
    Private Sub Form_Load()
    Text1.Text = GetSetting("MyApp101", "保存留言", "内容", "")
    Text2.Text = GetSetting("MyApp102", "保存留言", "内容", "")
    End Sub
    '第二部分:
    Private Sub Text1_Click()
    Dim message, title, defaultValue As String
    Dim myValue As String
    message = ""   '设置提示信息
    title = "请输入您的答案"                      '设置标题
    defaultValue = ""                           '设置默认值
    myValue = InputBox(message, title, defaultValue, 100, 100)
   '显示输入对话框
   If myValue = "" Then
    Else
        Text1.Text = myValue
        SaveSetting "MyApp101", "保存留言", "内容", myValue
    End If
   End Sub
提示:每个留言框有自己的代号,如MyApp101、 MyApp102等,二组代码的代号要一致。

[[it] 本帖最后由 jrs123 于 2008-5-21 07:05 编辑 [/it]]
#47
jrs1232008-05-22 13:41
2、奥运简介——这是拖出Label文字框后将文字输入到属性中的Caption栏中。(页面上的“趣文”、“标题”也都是用这种方式。)
    当鼠标移到该文字框上,会出现一行文字提示,如“点击此栏更详细”,是Label文字框属性ToolTipText,将文字输入到栏内即可。
    此外,当鼠标点击该栏,还会弹出更详细的说明窗体(见图),这是由下面代码来实现的。如编辑时,双击“奥运简介”文字栏,光标跑到下面的代码上:
    Private Sub Label4_Click() '单击Label4事件;
    Load xj1sm '弹出xj1sm窗体(见图)
    xj1sm.Show
    End Sub
    “奥运简介”框是拖出Text1框,此框的属性可以决定以下几个内容:(见图)
    框内字体字型与字号选择属性——Font
    框内底色属性——Color
    框内字体颜色——ForeColor

[[it] 本帖最后由 jrs123 于 2008-6-15 09:37 编辑 [/it]]
#48
jrs1232008-05-24 18:47
抓图软件HyperSnap-DX
在制作《奥运邮集》软件过程中采用了几个软件,今将抓图软件介绍如下,因有的软件过大(5.82M)无法上传,需要的请留信箱;
    抓图软件HyperSnap-DX简介: (有注册机)
    HyperSnap-DX 是个有名的屏幕抓图工具(见图),它不仅能抓住标准桌面程序还能抓取 DirectX, 3Dfx Glide 游戏和视频或 DVD 屏幕图。
    本程序能以 20 多种图形格式(包括:BMP, GIF, JPEG, TIFF, PCX 等)保存并阅读图片。可以用热键或自动记时器从屏幕上抓图。
    功能还包括:在所抓的图像中显示鼠标轨迹,收集工具,有调色板功能并能设置分辨率,还能选择从 TWAIN 装置中(扫描仪和数码相机)抓图。
    ---== HyperSnap-DX v5.20.01 汉化注册版安装提示 ==---
    1:解压后运行HS5Setup52001.exe安装原版程序;
    2:再运行HB-HysnapDx52001-NW.exe安装汉化补丁。
    3:内附KeyGen.exe为注册机:
    注册提示:(也可按"注册全攻略"的示图提示进行注册)
    1:要选择“Purchase single licenses”--Next 才可获得您的机器码
    2:复制机器码到注册机,得到注册码后复制注册完成:)wdte
#49
jrs1232008-05-27 06:58
将bmp图像格式转换为jpg或GIF格式图像保质量
介绍Macromedia Fireworks V8.0软件(有注册机)
    数码相机拍摄的图片或用抓图软件抓取高质量的图片,通常为bmp格式,其容量常在1M以上,有没有能将其容量压缩而不降低图像质量的方法呢?
    偶找到了Macromedia Fireworks V8.0软件,方法很简单,见图。将bmp图像格式转换为其它格式(如jpg或gif)压缩容量而不降低图像质量;
    该软件自身rar容量达88M,在此无法上传,请见谅!想要的请留信箱
 十一、子窗体的结构
    《奥运邮集》软件的子窗体有以下几种不同结构格式;(见下图)
    1、带圆角的子窗体——在子窗体内形成窗体圆角用下面一组代码:
    Option Explicit
Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3

As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal Hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Private Sub Form_Load()
    Dim hr As Long
    Dim dl As Long
    Dim usew As Long
    Dim useh As Long
    usew = Me.Width / Screen.TwipsPerPixelX
    useh = Me.Height / Screen.TwipsPerPixelY
    hr = CreateRoundRectRgn(0, 0, usew, useh, 80, 80)
    dl = SetWindowRgn(Me.Hwnd, hr, True)
End Sub
    2、带滚动条的文字框控件TextBox——当文字框内的文字较多时,可以通过滚动条看到全文。设置步骤如下:
    第一步:在窗体中拖出TextBox大小适中的文字框;(见带圆角的子窗体图中的“文字框”)
    第二步:在TextBox的属性中,MultiLine设为Ture(多行显示);ScrollBars设为2-Vertical(垂直滚动条);
    第三步:点击属性“Text”,在打开的框内粘贴上(输入)文字内容;
    第四步:通过属性“Font”设置字号与字体,“ForeColor”设置字体的颜色;
    3、可用鼠标滚轮放大缩小的窗体(见鼠标滚轮放大缩小窗体图)——关于鼠标滚轮事件的代码前面(45#)已经介绍过了,这里不再重复。

[[it] 本帖最后由 jrs123 于 2008-5-30 11:48 编辑 [/it]]
#50
jrs1232008-05-30 09:57
十二、发布信息、登陆网站与QQ交谈
1、软件发布信息——就是在软件上设一个能向用户发送信息的文字框。
    偶在《奥运邮集》的主页面的右下角有个信息发布小窗体(见图1),以及在每一届的第一页上都有一个“最新信息”发布栏(见图2)。
    制作方法如下:
   (1)先添加Mirosoft Internet Transfer Control 6.0 (sp6)控件
   (2)若是固定的文字框,即在窗体上拖出Text1文字框,其属性:
        ScrollBars取2-Vertial(垂直滚动条);
        MultiLine取True(多行显示)
        Locked取True(锁定文字)
   (3)代码:(放在:Private Sub Form_Load()内)
        Text6.Text = Inet1.OpenURL("http://www.) <!--将各届所有的新信息txt文件都放在XX文件夹内-->
重要提示:在页面上要拖出Inet控件!(见图)

[[it] 本帖最后由 jrs123 于 2008-6-15 12:22 编辑 [/it]]
#51
jrs1232008-05-31 11:14
2、登陆网站——在软件上放一个按钮(或图片),用户随时点击访问某个网站。提供两种方法供参考:
    (1)第一种方法,就一句代码:Shell "explorer.exe http://www.  (这方法代码少而精,但不足的是登陆网站时,网站的页面是处于最小化状态,即在屏幕最下面的任务栏上)
    (2)第二种方法:一个控件+一组声明+一组代码:(这个方法比较麻烦,但优点是登陆的网站是显示最大化页面,《奥运邮集》均采用这种方法)
    '一个控件:向窗体内拖一个控件ComboBox并在属性属性Text中放进网址,如http://www.(见图)
    '一组声明:
    Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal Hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Const SW_SHOW = 5  
    '一组代码:
    Private Sub Command1_Click() '点击按钮1即登陆网站
    Dim web As String '链接网站用,网址放在Combo1的属性Text中
    web = Combo1.Text
    ShellExecute 0&, vbNullString, web, vbNullString, vbNullString, 0
    End Sub
12