收 藏
投 稿
繁 体
RSS
首 页
运 营
学 院
建 站
论 坛
Web
master8.net
网站运营
欢迎在本站发布信息,在线投递稿件
请点这里
。编辑QQ:4908220,欢迎联系交流。
业界动态
创业故事
推广研究
策划盈利
电子商务
企业平台
站长工具
SEO查询
Whois查询
Pr查询
域名查询
IP查询
网页编辑器
技术学院
投递稿件请点这里:)
网页设计
HTML
XHTML
CSS
Javascript
Frontpage
Dreamweaver
图形图像
PhotoShop
FireWorks
Flash
Coreldraw
程序开发
PHP
ASP
.NET
JSP
CGI
XML
数据库
MySQL
Oracle
MSSQL
Access
综合应用
设计理论
建站系统
服务器管理
常用下载
办公应用
建站服务
如有建站意向,请尽快联系我们,以便安排时间...
QQ:4908220
作品展示
服务范围
服务流程
服务报价
联系方式
付款方式
站长论坛
注册
/
登陆
/
忘密?
交流区
站长酒吧
SEO&推广
网赚交流
建站系统
服务&信息
招聘求职
项目外包
广告发布
网络资源
技术区
网页设计师
界面设计师
WEB程序员
计算机应用
文章正文
» 您的当前位置:
首页
>>
学院
>>
程序开发
>>
ASP
VB软件设计中的几个问题
来源:
互联网
| 时间:2005-10-04 | 浏览:
相关评论
|
报告错误
|
发布文章
【字号:
大
|
中
|
小
】 【背景色
】
VB软件设计中的几个问题 
在软件开发过程中,有一些看似很简单的问题,却很容易被一般的开发人员所忽略,这些“Bugs”的存在,影响我们软件走向商品化。下面所列出的是笔者在使用Visual Basic开发软件时,碰到了几个这类问题,这里给出其解决方法,供大家探讨交流。
一、防止应用程序加载两份
当我们的应用程序在Windows下运行后,在操作过程中,有时会把它最小化隐藏起来,或者切换到程序管理器下进行其它操作,而后又想进入原来的应用程序,这时如果忘记了刚才启动的应用程序,又去重新启动该应用程序,在内存中就同时加载了两份同样的应用程序,这样不但占用了内存空间,而且容易引起误操作,造成数据的损失。为了避免这种情况发生,就需要程序能够给出提示“已经加载过”或直接进入第一次被加载的应用程序中。对于这个问题,看起来比较难办,其实我们只要对Windows管理应用程序的机理有所了解,就很容易解决。我们知道,对于每一个运行着的应用程序,Windows都分配给一个唯一的“句柄(Handle)”和一个模块代码(Module)。当同时运行两份相同的程序时,两份程序的模块代码都相同,因此,只要找到内存中两个相同的模块代码,我们就知道有两份程序在运行,从而可以控制它。Windows提供的两个接口函数GetModuleHandle和GetModuleUsage可以完成此任务。具体方法如下,首先在一个新的模块文件(??*.Bas)中声明API函数。
Declare Function GetModuleHandle Lib"Kernel" (ByVal lpProg Name$)
Declare Function GetModuleUsage Lib"Kernel"(ByVal hModule)
同时建立一个子过程,名字为main,子过程中的代码如下:
Sub Main() On Error GoTo errMain‘错误处理Dim hModule%‘模块句柄Dim AppCount%‘应用程序的个数appPath$=app.Path +""‘应用程序的启动路径hModule %=GetModuleHandle(appPath$+app.EXEName+".exe")‘获得该程序的句柄。
AppCount %=GetModuleUsage(hModule)‘获得模块代码,即运行的应用程序数目。
lf AppCount%>1 Then‘同一应用程序数大于1 MsgBox"程序已经加载",64 End‘结束当前启动的应用程序Elsc mainForm.Show‘mainForm是程序的主窗体End lf Exit Sub errMain: lf Err<>0Then MsgBox"启动程序时发生错误",64 Exit Sub End lf End Sub该过程完成后,在VB3.0主菜单[options]下,选择[Project]菜单项,设定[Start up From]项为Sub main,即程序运行时,最先从Sub main子程序开始。这样保证上面的代码一定被执行。Sub main是VB3.0约定的子过程名,不能用其它的名字来代替。
重新生成EXE文件,在程序管理器下,启动该应用程序,然后把产生的窗体最小化,接着从程序管理器下再运行它,用户将看到一个消息框,告诉用户,应用程序已被加载过了,第二份程序终止执行。上面的程序仅用来防止加载二份程序,但还没有做到当不能启动第二份时,自动进入到第一份程序。要做到这一点,所涉及的程序较复杂,这里就不详细介绍了。
二、判断Windows的安装路径
在我们开发的软件中,有时会直接调用Windows提供的小应用程序,如计算器、计事本等;或需要把一些特殊的文件放到Windows或SYSTEM的路径下。通常,Windows都安装在C:\WINDOWS目录下,但用户可以任意修改Windows的主目录名,因此,在我们的软件中,就需要判断Windows的安装路径。
对于这个问题,Windows提供了两个API函数:
GetWindowsDirectory和GetSystemDirectory,可以返回Windows目录和SYSTEM目录的名称。
为此,编制一个通用函数GetWinDir,它返回Windows的安装目录名称。类似,可以写出GetSysDir,略。
在*.BAS模块文件中声明API函数
Declare Function GetWindowsDirectory Lib "Kernel" (ByVal IpBuffer As S tring,ByV al nSize As Integer) as IntegerFunction GetWinDir () As String Dim Windir$ Windir$=Space$(144)‘144是WINDOWS目录名称理论上的最大长度。
lf GetWindowsDirectory(Windir$,144)=0Then MsgBox"不能确定WINDOWS的安装路径",16 GetWinDir="" Else Windir$=ALLTrim$(Windir$)
if Right$(Windir$,1)<>“”then Windir$=Windir$+“”‘加上反斜杠GetWinDir=Windir$ End lf End Function其中ALLTRIM是用来去掉字符串中空字符的函数FunctionALLTrim(FatStr$)AsString" this Function delete Space char in string of FatStr$
Dim SlimStr$,I%
SlimStr$=FatStr$ I%=lnStr(SlimStr$,Chr$(0))‘空格的位置IfI%
Then SlimStr$=Left$(SlimStr$,I%-1) SlimStr$=LTrim$(RTrim$)(SlimStr$))
AIITrim$=SlimStr$ End Function
三?痹诠氐舸疤迩疤崾颈4媸?
据一般说来,通常用5种方式可以关闭一个应用程序:
1.用户选择了当前窗体Control Box中的[关闭]命令2.激发程序中的结束命令代码(如End,Unload) 3.退出Windows 4.在Windows的任务列表中关闭应用程序。
2.多文档操作时,关闭主MDI窗体,引起子MDI窗体关闭。在关闭一个应用程序前,我们要给用户一个机会,提示“是否保存数据”,或者取消“关闭”的操作。在VB中,窗体的关闭引发的是Form_Unload事件,我们可以对该事件进行编程,来控制“关闭”操作。假设现已有一个过程FileS ave用来保存文件,则可以这样来编写程序。
Sub Form_Unload(CancelAs lnteger) select cast Msagbox (“是否保存数据?”,3+32) 
‘Yes,No,Cnacel三种选择case 6‘YES FileSave‘保存数据case2‘cancel Cancel=TRUE‘取消关闭操作case else‘NO‘不保存,执行关闭操作End select End Sub上面代码中的Cancel变量,是Form_unload事件本身的固有传出变量,它给Windows控制过程传递消息,从而控制程序的走向。
上面三个例子,只是软件完善过程中的一些小问题,要使软件稳定可靠,需要做大量细致认真的工作。有些问题,我们可以通过发掘VB本身的潜力,深入掌握一些过程的操作技巧来解决;而有些较复杂的问题,涉及到Window s底层方面的操作,采用Windows的API函数,可以很容易实现。当然这需要对Windows的函数和机理有一定的了解。随着Windows编程水平的提高,我们会逐渐学会并喜欢利用A PI函数来辅助完成程序编码。 
上一篇:
ASP+Access的安全隐患及对策
下一篇:
万维网创始人博客处女秀
我要投稿
打印本文
推荐本文
加入收藏
返回顶部
关闭窗口
12-03
软件发布:风越ASP代码生成器 [FireAsp Creator] V1.8
07-10
ASP种种错误提示解决方案
07-10
Asp+Sql 对数据库的各种操作
07-06
ASP Session
06-30
ASP 编程中20个非常有用的例子
ASP种种错误提示解决方案
从ASP过渡到ASP.net遗留的二十大...
如何把ASP编写成DLL
ASP开发中存储过程应用全接触
利用ASP发送和接收XML数据的处理...
ASP自动解压RAR文件
用php如何操作LDAP
ASP开发web站点
用ASP实现远程抓取网页到本地数...
ASP无组件上传进度条解决方案
more..
» 相 关 评 论
验证码:
站长吧首页
-
网站运营
-
站长学院
-
SEO查询
-
站长论坛
-
建站服务
-
联系本站
-
广告/业务
©2005-2006 站长吧 Master8.NET All rights reserved 陕ICP备05010609号
九州未来科技提供服务器支持
| 网站空间 | 虚拟主机