江苏·韩世伟 (E-mail):我准备给单位做一个Intranet,使用的工具为NT 4.0的IIS 2.0和SQL Server 6.0,但是在处理以前的.dbf数据时,碰到了问题,不知如何将.dbf文件数据转到SQL Server的数据库中?
李海:目前很多单位开始采用MS SQL Server作为数据库后台,也都面临这一问题。转换的方法视你的.dbf数据库而定。如果你的.dbf文件是由FoxPro或Visual FoxPro生成的,包含有general或memo字段,建议使用Visual FoxPro包含的升级向导SQL Server Upsizing Wizard,它可以转换Visual FoxPro的所有字段类型和数据对象。如果你的.dbf是由dBASE或FoxBASE生成的,只包含文字信息,可以在FoxBASE中使用COPY TO命令将其生成为纯文本数据。然后利用SQL Server的命令行工具BCP(bulk copy program,这个工具通常在BIN目录中)将数据从ASCII格式转换为SQL Server的数据。
Windows 95下的socket规范不支持Raw socket,但我却想在Win 95下使用Raw socket编程,我该怎么办?
李海:Windows 95不直接支持Raw socket(SOCK_RAW),所以解决办法一般是借用Windows NT的模块或使用第三方工具,如BETTER YET Trumpet's beta stack for WIN95。Windows NT的许多部件都可以在Windows 95下使用,如icmp.dll(在Windows 95下使用Raw socket进行PING编程就可以用它),如果你用Windows 95来上网,那么象这样的Windows NT部件可能已经被安装在你的机器里了,因为很多软件都要用到它。
武汉·贺学林(传真):(1)我用VB 5.0在窗体上操作Word文档,当利用OLE容器控件时,文档只能显示首页。请问是否有现成的可利用控件能在VB 5.0还更方便地处理Office的文档(如专门用来显示和处理Word文档),就如同RichTextbox控件可方便地处理RichText文本一样?(2)在VB 5.0专业版中将Image控件或Picturebox控件与Access 8.0数据库的OLE型字段绑定后在运行时出错,错误信息为“图片无效(错误481)”,但OLE型字段中存储的已经是符合VB 5.0规定格式的图片了,这是怎么回事?
李海:要想找到第三方的控件来如同RichTextbox控件可方便地处理RichText文本一样处理Office文档可能比较困难,因为Microsoft不会鼓励其它厂商来同它竞争,因而对其文件格式采取了一些保护措施。在此介绍有两个与此相关的控制或软件,供你参考。一个软件是Quick View Plus 4.5(http://www.inso.com),这个软件不能直接作为控件插入VB,但是可以作为浏览器Internet Explorer的插件,所以一旦安装了Quick View Plus 4.5,你就可以在IE中浏览Office的文档,由于VB5内置了WebBrowser控件(其实就是IE),所以你可以使用WebBrowser控件加上Quick View Plus 4.5来浏览Office文件。下图就是在VB中浏览Excel文件(当然Quick View Plus也支持其它Office格式)。但这种方式只能浏览文件,而不能编辑文件。另一个控件是COMcache File Convert Control Set(http://www.comcache.com),这个控件是进行文件格式转换的,它支持Word、Excel、RTF等多种格式文件之间的相互转换。 图1 在VB中利用Quick View Plus浏览Excel文件
(2) Access数据库的OLE型字段中存放的图形是按OLE格式存放的图像,而不是VB的Image控件或Picturebox控件所支持的标准图片格式(.bmp、.rle、.ico、.gif、.jpg、.emf和.wmf),所以不能使用Image控件或Picturebox控件来观看。应该使用VB的OLE控件,该控件在工具条中如右图所示。我们以VB5目录下的NWIND.MDB文件为例说明这一过程。首先在窗体上添加Data控件(以下称为Data1),将Database设为NWIND.MDB文件,然后将RecordSource属性设为Employees表。再在窗体上添加OLE控件,此时VB会显示一个对话框让你选择文件类型,按“取消”键(如果这时你误按了“确定”键,则需将OLE控件的Class属性置为空。)。设置DataSource为Data1,DataField为Photo(这是一个OLE图形字段)。这时你再运行就可以得到想要的结果了。这个技巧也适用VB 4.0的32位版本。如果是使用VB 4.0的16位版本或VB 3.0, 不能使用这一技巧,可以访问Microsoft Knowledge Base(http://support.microsoft.com/default.aspx),其中的Q147727 是针对VB 4.0的16位版本,Q113957则针对VB 3.0。从这两篇文章中,你也可以了解到Access 1.x和2.0是怎样存储OLE字段的。
沈阳·甄建平 (E-mail):我想在NT网上的Windows 95工作站上接收其他工作站送来的数据,用VB 5.0上的Winsock控制件,可否实现?如可以,Winsock控制件的端口对网卡怎样设置?
李海:只要你和其它机器之间都采用TCP/IP协议,你就可以使用VB 5.0上的Winsock控件来进行数据传输。但Winsock控件的端口和硬件的端口虽然英文都是port,但却是两码事。Winsock控件的端口号是有TCP/IP软件来设定的,比如HTTP服务器的port号通常是80,而FTP服务器为21。
刘海声 (E-mail):在VB 5.0中如何正确播放播放FLC文件?
李海:在VB 5.0显示.FLC文件可以利用多媒体控制接口(MCI)来进行,在安装前需要先安装AAPlay for Windows。这方面的文章,包括本刊在内的杂志已经介绍了很多次,就不再重复了。32位的FLI/C文件播放控件(OCX或ActiveX)非常少见。按我个人的观点,FLI/C文件格式已经过时了,应该采用.AVI、MPEG、Quick Time等格式。
32位的FLI/C文件播放控件叫WINFLIC。 可以在http://www.programmersheaven.com/zone1/cat88/255.htm下载。如果不能访问这两个站点,也可以使用winflic.ocx作为关键字 在www.hotbot.com进行搜索。这个控件可以播放FLI/C格式的动画。该软件是共享软件(注册费大约 1.5荷兰盾),未注册版本只能播放一两分钟的动画。作者是R.S.Plieger(e-mail: plieger@bnc.nl)。
广州·阿浩 (E-mail):如何用VB编写查看版本信息的程序?
李海:你没有指明你所要查看的版本信息是指Windows的版本信息还是可执行文件(.exe、.dll、.ocx等)的版本信息。有关Windows的版本信息我已经在以往的回答中介绍过几次,在此就不重复了。要想查看可执行文件的版本信息就要利用Windows API。与此相关的Windows API都包含在version.dll(16位版本为ver.dll)中,在Win32api.txt中包括了所需的所有Visual Basic声明。读取一个可执行文件的版本信息首先要调用GetFileVersionInfoSize来获取指定的文件中版本信息的大小。如果这个函数返回0,通常说明这个文件中不包含版本信息。如果该文件中包含版本信息,就可以使用GetFileVersionInfo来读取版本信息。接着使用VerQueryValue函数来从获得的版本信息中得到进一步的内容。这个函数的定义如下: Declare Function VerQueryValue Lib "version.dll" Alias "VerQueryValue" (pBlock As Any, ByVal lpSubBlock As String, ByVal lplpBuffer As Long, puLen As Long) As Long 其中,pBlock是利用GetFileVersionInfo得到的版本信息,lpSubBlock是一个字符串,它说明你想知道的具体的版本信息内容,如:\VarFileInfo\Translation代表语言版本、\StringFileInfo\040904E4\CompanyName表示公司名,\StringFileInfo\040904E4\FileDescription为文件描述。
在Microsoft Knowledge Base(http://support.microsoft.com/default.aspx?scid=fh;ZH-CN;kbinfo)中你可以找到完整的32位Visual Basic范例程序(文章号为Q139491),16位的Visual Basic范例程序的文章号为Q112731。
Ma chao (E-mail):不知如何手动修改Windows 95的图标,例如My Computer中的盘符。
李海:这是一个非常有趣的问题。我们这里不讨论如何利用属性对话框修改“快捷方式”或关联的文件类型的图标,相信你很熟悉这些了。我们这里只介绍如何修改Windows 95的系统图标。Windows 95自身没有提供修改这些图标的工具,所以手工修改就要使用RegEdit修改Windows 95的注册簿(registry),这可是个胆小的人不敢干的事。如果你惧怕修改注册簿,你可以使用Microsoft的两个产品Microsoft Plus!和PowerToys,前者是收费的,而后者是免费的,你可以从www.microsoft.com/windows95/info/shareware.htm下载。Microsoft Plus!有个Destop Themes可以修改大多数系统图标,而PowerToys中的TweakUI修改桌面上的几个图标。从http://www.winfiles.com/apps/98/themes-edit.html你还可以下载几个类似的软件。下面我们将揭开这些软件的秘密,你也可以手工进行修改。如果多个人同时使用一台机器,Windows 95允许每个用户单独地修改和保存自己的设置,如墙纸、色彩等等。但一旦你更换了系统的图标,使用该机器的所有用户会都跟着一起更换了自己的图标。虽然同是系统图标,但因为修改的地方不同,我们将它们分为两类。一类是桌面上的几个系统图标,象“我的计算机”、“回收箱”、Internet Explorer等等,另一类是“开始”菜单上的图标、资源管理器中的图标等。欲修改“我的计算机”图标,先运行RegEdit,找到HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}(图1)。在其中有一个DefaultIcon键(key),修改它的键值就可以改变“我的计算机”图标了。Windows 95默认的键值是“explorer.exe,0”,逗号前表示图标所在文件,在Windows中,图标文件通常包含在.exe、.dll和.ico文件中。逗号后面表示该图标在文件中的编号,第一个图标为0,第二个位1,依此类推。例如,把“我的计算机”的图标改为“PIFMGR.DLL,4”,系统就会显示一个被咬了一口的苹果代表“我的计算机”。修改了DefaultIcon,图标往往不会立即改变,为了看到变化,你需要重新启动一下Windows。
图3 修改“我的计算机”图标
其它系统图标的CLSID见下表。这些图标的修改方法基本同“我的计算机”图标相同,只是回收箱有点特别。在回收箱的DefaultIcon键下有empty和full两个值,它们分别对应于回收箱中没有文件和有文件的两种状态。
收件箱Inbox | {00020D75-0000-0000-C000-000000000046} |
回收箱Recycle bin | {645FF040-5081-101B-9F08-00AA002F954E} |
The Internet | {FBF23B42-E3F0-101B-8488-00AA003E56F8} |
网络邻居Network Neighborhood | {208D2C60-3AEA-1069-A2D7-08002B30309D} |
Microsoft Network | {00028B00-0000-0000-C000-000000000046} |
除了桌面上的图标以外,象“开始”菜单和资源管理器中的很多图标都是可以修改的,但修改的位置有所不同。用RegEdit找到HKEY_LOCAL_MACHINE\Software\Micorsoft\Windows\CurrentVersion\explorer\ShellIcons。如果你安装了Microsoft Plus!,你可能在这里找到将近40个编号,每一个编号都对应这一个系统图标。有些软件也会修改这里的一个或几个系统图标,图4就是PowerToys修改了29号图标后的结果。
图4 修改“开始”菜单和资源管理器中的图标
这些编号的含义如下表所示:
编号 |
类别 |
含义 |
编号 |
类别 |
含义 |
1 |
桌面 |
Microsoft Network |
21 |
开始菜单 |
设置 |
2 |
资源管理器 |
应用程序 |
22 |
开始菜单 |
查找 |
3 |
资源管理器 |
关闭的文件夹 |
23 |
开始菜单 |
帮助 |
4 |
资源管理器 |
打开的文件夹 |
24 |
开始菜单 |
运行 |
5 |
资源管理器 |
5.25英寸磁盘驱动器 |
25 |
开始菜单 |
挂起 |
6 |
资源管理器 |
3.5英寸磁盘驱动器 |
26 |
资源管理器 |
弹出CD(外置) |
7 |
资源管理器 |
可移动驱动器 |
27 |
开始菜单 |
关机 |
8 |
资源管理器 |
硬盘 |
28 |
资源管理器 |
共享文件标志 |
9 |
资源管理器 |
网络 |
29 |
杂项 |
快捷方式箭头 |
10 |
资源管理器 |
离线网络 |
31 |
桌面 |
空的回收箱 |
11 |
资源管理器 |
CD-ROM驱动器 |
32 |
桌面 |
满的回收箱 |
12 |
资源管理器 |
RAM驱动器 |
33 |
资源管理器 |
播号网络文件夹 |
13 |
桌面 |
整个网络 |
34 |
资源管理器 |
桌面文件夹 |
15 |
桌面 |
我的电脑 |
35 |
控制面板 |
控制面板 |
16 |
控制面板 |
打印机 |
36 |
开始菜单 |
程序组文件夹 |
17 |
桌面 |
网络邻居 |
37 |
控制面板 |
打印机文件夹 |
18 |
桌面 |
网络工作组 |
38 |
开始菜单 |
字体文件夹 |
19 |
开始菜单 |
程序 |
39 |
开始菜单 |
任务栏 |
20 |
开始菜单 |
文档 |
40 |
资源管理器 |
音乐CD |
修改这些图标的方法同前面修改“我的电脑”类似。修改系统图标后应先删除Windows目录下的ShellIconCache文件(隐含文件),然后重新启动Windows,以使修改生效。
如果你想找到漂亮的图标,可以访问http://www.megsinet.com/clemenst下载图标库,在这里你可以下载2M的图标库(释放后为13M),其中包括超过5000个图标,它们都被非常好地分类整理。
如果您有任何建议,请给我发电子邮件:
。
版权所有 李海,热情软件屋 1997-2006