1、如果一行程序太长,能不能换行?
VB的程序代码是允许换行书写的,只要在每次换行的最后一个字符加上换行字符“_”就可以了。
例如:[code]Sub PicMove()
Frm.Picture2.Left =
Frm.Picture1.Left + _ ’加上换行符
Frm.Picture1.Width
End Sub[/code]
2、 如何在设计的时候清空存在的图片?
用鼠标点中该图片,在属性窗口中选中Picture属性,按Del键便可清空图片。
3、 Visual Basic 如何注释一段较长程序代码?
VB注释程序代码的符号是“注释:”,只要在某行程序前面加上“注释:”,就可以注释该行程序。但如果程序代码很长的时候,一行一行地注释令人觉得难以忍受。VB本身提供了这个功能,在主菜单“视图”选项的“工具栏”下,选中Edit,VB的界面会出现一排工具按钮,其中的手形图标按钮后的两个按钮用于“设置注释块”和“解除注释块”。
4、怎么实现鼠标一移上去就出现小提示窗口的功能?
VB 里每个控件都有ToolTipText属性,只要加上一行程序就可以了。
例如:
Label1.ToolTipText = "这是提示!"
5、 如何获得当前软件的运行磁盘目录和命令行参数?
VB里面有个系统对象叫App。App.Path就是当前软件的运行目录。而命令行参数存放在一个系统变量里面,叫Command。程序语句如下:[code]Label1.Caption=App.Path
Label2.Caption=Command$[/code]
6、我想换掉鼠标显示的形状,怎么做?
VB提供的系统控件一般都有MousePointer和MouseIcon属性。我们可以寻找自己喜欢的*.ICO,*.CUR文件,实现的程序如下:[code]Screen.MousePointer= 99
’用户鼠标类型
Screen.MouseIcon=LoadPicture("C:\ABC\1.ICO")
’读取鼠标的图标文件[/code]
7、如何设置程序的错误出口?
On Error语句用于程序的错误出口处理。一般的处理方法有两种:
1) 遇到错误跳转到某一行程序去执行,On Error GoTo someline。
例如:[code]On Error GoTo ERR_LINE
...
Label1.Caption=“正确执行”
ERR_LINE:
...
Label1.Caption=“出错了!”[/code]
2) 遇到错误之后忽略当前错误,继续执行,On Error Resume Next。
例如:[code]On Error Resume Next
...
Label1.Caption=“不管对不对都要执行”
...[/code]
8、怎样获得键盘输入和判断敲键的Ascii值?
把窗体的KeyPreview属性设置成True,然后在Form_KeyPress 事件里编写程序代码如下:
[code]Private Sub Form_KeyPress
(KeyAscii As Integer)
Me.Caption = Str(KeyAscii)
‘取得键盘输入的字符
...
End Sub[/code]
9、我希望窗体一运行就在屏幕的中央,怎么实现?
VB的系统对象Screen记录了当前显示模式的高度和宽度,可以利用这个值来设置窗体的位置。
[code]Sub CenterForm(frm As Form)
‘定义过程
frm.Move (Screen.width - frm.width)\ 2,
(Screen.Height - frm.Height) \ 2
End Sub
Private Sub Form_Load()
CenterForm Me ’调用过程
End Sub[/code]
10、很多软件都有鼠标在文本框TextBox一按下,就选中所有文字的功能,是怎么实现的?
[code]Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
’过程调用
End Sub[/code]
我们知道在处理字符串时,VB把一个汉字当成一个字符来进行出来,结果导致按一般情况做出来的key不支持中文,所以我们要做出支持中文的VBkey,就必须正确的得到组成一个汉字的两个ASCII码,如果得到呢?这里有两种方法:
第一种:
第一步:使用Strconv()函数进行字符串转换.
该函数的作用是对输入的字符串进行编码转换,返回值是一个字符串.该函数原型如下:
StrConv(string, conversion, LCID)
string:要转换的字符串(必须)
conversion:整数类型,表示要进行何种转换(必须)
LCID:本地LocaleID,相当于语种类型(可选)
如果我们要获得组成汉字的两个ASCII码,conversion可以选择为vbFromUnicode,表示将Unicode转换成本地缺省的代码页,如果你的是中文windows,就可以通过下一步获得组成汉字的两个ASCII码了.(其他语种的windows也许不可以,欢迎测试)
第二步:提取ASCII码:
由于Strconv的返回值是一个字符串,如何得到字符串中每个字符的ASCII码了,很多人会想到用Mid$函数或MidB$函数,可惜在这里如果用这两个函数的话,你会发现你有很多字符无法得到,为什么呢?因为Mid$(),MidB$()都无法实现对大于ASCII码大于127的字符的截取,所以我们必须采用其他的方法.在VB中Byte类型的数组可以直接跟字符串数组进行相互赋值,如果将字符串赋给一个Byte类型的数组,如果该字符串中的字符是汉字(必须是转换后的),则用一个数组的两个元素来保存该字符的ASCII码,否则用一个数组元素.
比如:
dim a() as byte
a=strconv("我a",vbFromUnicode)
'则a(0)=206,a(1)=210,a(2)=97 注意:数组下标是从0开始
综合一、二步,就可以写出完整的代码:
dim AscArray() as byte
dim strSN as string
dim i as long
AscArray=strconv(strSN,vbFromUnicode)
for i=0 to Ubound(AscArray)
'处理过程
next i
第二种方法:
直接采用ASC()函数,对ASC()的返回值进行处理就可以准确的得到组成一个汉字的两个字节的ASCII码.
如:
dim HighAsc as byte
dim LowAsc as byte
dim lngAscii as long
lngAscii=ASC("我")
HighAsc=int((65536+lngAscii)/256)
LowAsc=(65536+lngAscii) mod 256
'结果 HighAsc=206,LowAsc=210
本文结束.
再加一个:如果得到含中文字符的字符串的长度
用LenB(strconv(字符串,vbFromUnicode))就可以得到该字符串的长度。
一:在你的窗体加入代码。如果是多个窗口,可以将此代码放到模块中。
代码如下:[code]Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Sub Form_Initialize()
InitCommonControls
End Sub[/code]
注意:千万不要在Form_load()事件下写InitCommonControls这句话,否则你的窗体会启动不了
二:建立一个和你的.exe同名的.exe.manifest文件(假如:如果你最后编译好的文件名为WindowXPStyle.exe,则建立一个文件名为WindowXPStyle.exe.manifest的文件),并且此文件必须存在于和你Exe文件的同一目录下。
以WindowXPStyle.exe为例,则这个WindowXPStyle.exe.manifest的文件的内容如下:
[code]
processorArchitecture="X86"
name=".exe"
type="win32"
/>
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
将以上内容保存为WindowXPStyle.exe.manifest。并且和执行文件放在一个目录下.完成就是那么简单.
注意的地方:由于VB6自身的原因,Windows XP再一次给我们留了一些难题:
一、工具栏问题:工具栏控件一定要用Microsoft Windows Common Controls 5.0,而不要用Microsoft Windows Common Controls 6.0。因为此InitCommonControls API函数是位于comctl32.dll(Microsoft Windows Common Controls 5.0控件的动态链接库中)。
二、图形风格按钮的问题:很遗憾,我们不能再使用Graphical风格的命令按钮(即Style=1的命令按钮控件)了。因为一旦将命令按钮的Style属性设为1,那么它将失去Windows XP风格。
在尊重软件著作权的时代,电子注册版软件的应用也越来越广。它的出现使用户对程序中未受限制的功能有了一定了解,起到了推广和传播作用,同时也很好地保护了制作人的切身利益。那么,我们如何制作一个电子注册版软件呢?
经过摸索,笔者利用VB也简单地制作了一个电子注册版软件。
设计原理
利用API中的“GetVolumeInformation”函数提取使用者机器的硬盘序列号为特征码,注册时提交此码,经过软件著作权人加以运算,给出注册码,最后软件使用人输入注册码完成整个注册过程(为使说明简单,本例中以特征码减101做为注册码)。
新建一模块文件
新建一模块文件,并将如下声明的语句和常量添加到Module1.Bas模块中:
[code]Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA"
(ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal
nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As
Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal
nFileSystemNameSize As Long) As Long
Global GetVal As Long[/code]
编程时需注意的是要将声明语句写在同一行中。
窗体设置
在Form1上添加2个文本框,Name属性分别设置为Text1、Text2;再添加1个按钮,Name属性设置为Command1。
添加代码
将如下程序代码添加到Form1的Form1_Load事件中:
[code]Private Sub Form_Load()
Dim TempStr1 As String * 256
Dim TempStr2 As String * 256
Dim TempLon1 As Long
Dim TempLon2 As Long
………
‘读取是否注册的信息,如何控制这里不再说明
………
Call GetVolumeInformation("C:\", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)
Text1.Text = GetVal ‘提取本机C盘的序列号至文本框一
End Sub
[/code]
将如下程序代码添加到Command1的Command1_Click事件中:
[code]Private Sub Command1_Click()
If Text2 〈〉 CStr(GetVal) Then
MsgBox "注册码不正确,请认真检查输入是否正确。"
Else
MsgBox "你已经成功注册,请重新启动本软件。"
………
(将正确注册的信息写入,使软件功能以后不受限制。具体方法依个人爱好进行设置。)
………
End If
End Sub [/code]
至此,我们可以运行一下程序。你会发现我们已经简单地实现了利用硬盘序列号制作电子注册版软件的功能。
使用VB里的字串类型String有两大不足:第一、它的分配是由VB运行时控制,我们不能将其分配在指定内存处;第二,任何一次对字串的赋值操作都要进行内存重新分配。要实现高效、灵活的字串处理,我们必须克服这两大不足。
对于第一个问题,通过修改String变量里放着的BSTR描述符指针可以实现;对于第二个问题,可以用Mid语句(注意是语句而不是函数)来赋值。不详细讲了,直接看下面的这个类:
Option Explicit
'********************************************************
'clsBSTR.cls
'作者: 熊超 ID: AdamBear 2002年3月18日
'http://www.csdn.net/Author/AdamBear
' 你可以自由使用本类模块,不过请保留本声明
'********************************************************
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'不要直接对sString赋值(可以用MID语句),将其设为公有仅为提高效率。
Public sString As String 'BSTR描述符指针
Private pStr As Long 'BSTR地址
Private nMaxLen As Long 'BSTR最大字节数
'让本字串指向特定地址
Public Sub Attach(Addr As Long, Optional nLen As Long)
pStr = Addr
'修改BSTR描述符指针,使其指向Addr
CopyMemory ByVal VarPtr(sString), Addr, 4
If IsMissing(nLen) Then Exit Sub
'设定最大字串字节数
nMaxLen = nLen
End Sub
'还原本字串原BSTR描述符
Public Sub Detach()
CopyMemory ByVal VarPtr(sString), 0&, 4
End Sub
'让本字串指向源字串
Public Sub AttachStr(sStr As String)
Attach StrPtr(sStr), LenB(sStr)
End Sub
'data为缺省属性
Public Property Let data(sVal As String)
Dim c As Long
c = LenB(sVal)
'超过最大字串数,抛出错误。
If c > nMaxLen Then Err.Raise vbObjectError + 3000, "CString::Let Data", "溢出"
'写字串长度
CopyMemory ByVal (pStr – 4), c, 4
'写字串
Mid(sString, 1) = sVal
End Property
'可以通过公有变量sString来读字串,效率更高
Public Property Get data() As String
data = sString
End Property
Private Sub Class_Terminate()
Call Detach
End Sub
用法如下,假设我们已通过VitualAlloc,HeapAlloc,MapViewOfFile这样的内存管理API得到了一个4k个字节的可读写的内存地址baseAddr:
Dim sShare As New clsBSTR
'留下前4个字节用于BSTR保存字串字节数
sShare.Attach(baseAddr+4, 4096-4)
'下面的字串"Test"会直接写到baseAddr+4字节处
sShare = "Test"
Dim y As String
'读字串时可以用sString属性或缺省属性
y = sShare.sString
'用AttachStr方法Attach到一个字串。
'必须要先Detach
sShare.Detach
sShare.AttachStr(y)
sShare = "Hahaha"
Debug.Print y
'一旦AttachStr到字串y后,对sShare的修改就相当于对y的修改。
'并且以后对y的修改也只能用Mid语句
Mid(y, 1) = "xxxxx"
'不能直接赋值,这样VB会将原来y所指(也是sShare所指)内存释放,
' 重新分配y。这样在访问sShare时会出错。
'y = "Test"
使用这个类有几个需要注意的地方。
1、读字串时可以用sString属性来读,更快。
读sShare有两种方法,一种是用缺省属性Data来读,一种是直接用sString属性来读。用sString属性不重新分配内存,要快得多。
2、不要直接给sString赋值,应使用缺省的data属性来赋值。
之所以把sString属性暴露出来,是为了效率和方便。我们可以用Mid语句对其进行修改,但不要直接用"="来赋值。
3、注意Attach的第二个参数,表示字串的最大字节数,不要让它超过已经分配的内存。
4、用AttachStr将本字串对象Attach到某个字串(比如上面的y)上后,不能再对这个字串y重新赋值,也不能将其传递到会对其重新赋值的过程。
这么多需要注意的问题,用起来岂不是更不方便。的确,用它的之前要考虑是不是必须的。因为建立这个类也一样有开销。所以还有一个需要注意的问题:
5、它主要的应用还是在于将字串安放在指定内存处。虽然它也可以让同一个进程内几个的字串达到共享的目的,但是如果只是两三个很小的字串这样时做反而慢了。
对于VMWare、Virtual PC这些虚拟机软件,可能大家都比较熟悉。VirtualBox是德国一家软件公司InnoTek所开发的虚拟系统软件,它不仅具有丰富的特色,而且性能 也很优异。更是开源的,成为了一个发布在GPL许可之下的自由软件。VirtualBox 可以在 Linux 和 Windows 主机中运行,并支持在其中安装 Windows (NT 4.0、2000、XP、Server 2003、Vista)、DOS/Windows 3.x、Linux (2.4 和 2.6)、OpenBSD 等系列的客户操作系统。假如你曾经有用过虚拟机软件的经历的话,相信使用 VirtualBox 不在话下。即便你是一个新手,也没有关系。VirtualBox 提供了详细的文档,可以助你在短期内入门。
* Solaris and Mac OS X host support
* Seamless windowing for Linux and Solaris guests
* Guest Additions for Solaris
* A webservice API
* SATA hard disk (AHCI) controller
* Experimental Physical Address Extension (PAE) support
In addition, the following items were ?xed and/or added:
* GUI: added accessibility support (508)
* GUI: VM session information dialog
* VBoxHeadless: renamed from VBoxVRDP
* VMM: reduced host CPU load of idle guests
* VMM: many ?xes for VT-x/SVM hardware-supported virtualization
* ATA/IDE: better disk geometry compatibility with VMware images
* ATA/IDE: virtualize an AHCI controller
* Storage: better write optimization, prevent images from growing unnecessarily.
* Network: support PXE booting with NAT
* Network: ?xed the Am79C973 PCNet emulation for Nexenta guests
* NAT: improved builtin DHCP server (implemented DHCPNAK response)
* NAT: port forwarding stopped when restoring the VM from a saved state
* NAT: make subnet con?gurable
* XPCOM: moved to libxml2
* XPCOM: ?xed VBoxSVC autostart race
* Audio: SoundBlaster 16 emulation
* USB: ?xed problems with USB 2.0 devices
* MacOS X: ?xed seamless mode
* MacOS X: better desktop integration, several look’n’feel ?xes
* MacOS X: switched to Quartz2D framebuffer
* MacOS X: added support for shared folders
* MacOS X: added support for clipboard integration
* Solaris: added host audio playback support (experimental)
* Solaris: made it possible to run VirtualBox from non-global zones
* Shared Folders: made them work for NT4 guests
* Shared Folders: many bug?xes to improve stability
* Seamless windows: added support for Linux guests
* Linux installer: support DKMS for compiling the kernel module
* Linux host: compatibility ?xes with Linux 2.6.25
* Windows host: support for USB devices has been signi?cantly improved; many additional USB devices now work
* Windows Additions: automatically install AMD PCNet drivers on Vista guests
* Linux additions: several ?xes, experimental support for RandR 1.2
* Linux additions: compatibility ?xes with Linux 2.6.25
下载地址:http://cds-esd.sun.com/ESD42/innotek/VirtualBox-1.6.0-Win_x86.msi?AuthParam=1209751269_a8d1f3007f812062f086476446a0a39d&TicketId=B%2Fw4kBqFTFlIShxDM1Bbkg7r&GroupName=CDS&FilePath=/ESD42/innotek/VirtualBox-1.6.0-Win_x86.msi&File=VirtualBox-1.6.0-Win_x86.msi
Adobe在昨日举办的Open Screen Project上宣布开放Adobe拥有的各自私有技术。
在此之前,Adobe的PDF已是一种开放格式,针对Flv等格式的开放将对当前互联网的产生许多变数。我们在Linux系统上,虽然可以享受到与其他平台差不多的Flash技术,但是这一直不完美。首先,在64位的系统上,Flash播放一直存在问题。其 次,Flash播放器的缺乏也让Linux环境的多媒体性打了折。虽然GNU工程开始搞Flash的开源版本:Gnash,但是进展缓慢,效果也不尽人 意。
而另一方面,作为一种开放的技术标准──PDF,在Linux下的应用却是十分丰富。浏览PDF文档自然不在话下,而且多数应用程序直接支持输出PDF,也有软件支持对PDF的二次编辑。
现在,这一现状似乎就要改变了。
Adobe在Open Screen Project上,在无数IT巨头的支持下,宣布了以下四点:
移除使用SWF和FLV/F4V格式的限制
公开Adobe Flash Player的设备移植层的API
公开Adobe Flash? Cast?和AMF协议
移除授权费:在设备上使用下一代Adobe Flash Player和Adobe AIR将无需支付费用
对于一家生产软硬件的IT综合厂商来说,这无疑会让他们在开发和生产设备时节省相关费用,同时也会拥有更大的自由度。
对于Linux及整个开源界说,前两项是他们最关注的。这意味着SWF和FLV/F4V已成为像PDF一样的开放文档,开发者只要根据文档的规格,就可以开发出相应的播放器或相关应用。
可以预见的是,不久以后,Flash的播放在Linux下会畅通无阻。
至于还会对整个业界产生什么其他效应,那只有拭目以待了!事实上,Adobe这次的举动,不仅是为了推广自己的Flash和AIR,很大程度上是针对微软的SilverLight的。大家说呢?
Linux Kernel是Linux系统的核心部件,支持Intel、Alpha、PPC、 Sparc、IA-64 、ARM、MIPS、Amiga、Atari和IBM s/390等,还支持32位大文件系统.而在Intel平台上,物理内存最大支持可以达到64GB.加强对IDE和SCSI硬件系统的支持,并增强了对 USB设备和3D加速卡的支持.
下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.1.tar.bz2
众人期待已久的XP With SP3终于发布了。目前在MSDN下载列表中已经出现了简体中文版光盘镜像下载,稍后将提供BT种子。
本次Pro版发布了两个版本,一个是零售版 一个是VOL版.
零售版 SHA1:69dbf131116760932dcf132ade111d6b45778098
VOL版 SHA1:d142469d0c3953d8e4a6a490a58052ef52837f0f
使用iPhone的Web App样式制作的网站目前还并不太多,FoxNews的新闻站算是走在了前面,但iPhone用户们很快就能享受到来自Google的支持了–Google News业务已经有了iPhone版本.
只要您用iPhone手机照常访问news.google.com,就可以将您自动定向到iPhone版上,它支持16个语种的33个市场的新闻读取,并且还提供了一个Google Apps on iPhone的雏形.
