⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9929.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:
 
                            广西 高罡

  第一次运行,或通过运行程序的方式来启动ICQ时,随着一声火车的长
鸣,我们都能看到一朵背景为透空的大花,这就是ICQ独特的欢迎画面!通
常,我们都是用一整个带图形及文字的窗体来做为欢迎画面的。我们要如
何去做才能实现类ICQ的欢迎画面呢?这看起来像是件十分复杂的工作,其
实,利用了强大的API函数,事情就会变得非常的简单。出于简单化的考虑,
我使用VB6.0简体中文企业版来完成这一例程。
  首先要准备好做为欢迎画面所需要的图片,然后对图片进行简单的处
理,把需要透空的地方填上纯白色(255,255,255),然后保存为*.bmp
文件,这用PhotoShop可以很容易地实现。需要注意的是,图片必须为“索
引色”模式,如果不是就需用PhotoShop来修改,否则不能实现透空效果。
  先建立一个标准EXE工程,在窗体上文稿放置一个Picture控件,控件
名为Picture1,和一个Timer控件,控件名为Timer1,Interval属性设置
为2000。
  原程序如下:
  Option Explicit
  '定义获取桌面HDC的api函数
  Private Declare Function GetDC Lib “user32” (ByVal hwnd As Long) As Long
  '定义TransparentBlt函数
  '实现图片的透空效果需要用上API函数:TransparentBlt,这个函数
功能十分强大,而且使用方便,但不幸的
  '是VB自带的API浏览器居然把它的漏掉了,所以我们只有采用人工输
入的方法了
  Private Declare Function TransparentBlt Lib “msimg32.dll”_
   (ByVal hdcDest As Long, _
   ByVal nXOriginDest As Long, _
   ByVal nYOriginDest As Long, _
   ByVal nWidthDest As Long, _
   ByVal nHeightDest As Long, _
   ByVal hdcSrc As Long, _
   ByVal nXOriginSrc As Long, _
   ByVal nYOriginSrc As Long, _
   ByVal nWidthSrc As Long, _
   ByVal nHeightSrc As Long, _
   ByVal crTransparent As Long) As Long
  '其中,hdcDest为目标地的HDC,nXOriginDEst和nYoriginDest分别为
目标图像的起始点坐标,nWidthDesk和nHeightDest分别为目标图像的宽度
和高度。与之相应的hdcSrc、nXOriginSrc、nyOriginSrc、nWidthSrc、
nHeightSrc分别为原图的HDC、原图的起始X、Y坐标、原图和宽度和长度,
crTransparent为需要设置成透空的颜色的RGB值。
  '定义用于恢复桌面的函数
  Private Declare Function InvalidateRectAsAny Lib “user32” Alias 
“InvalidateRect”_ (ByVal hwnd As Long, lpRect As Any, ByVal bErase As Long) As Long
  
  Private Sub Form_Load()
   Me.Hide
   Dim Pic As Long
   Dim w As Long
   Dim h As Long
   Dim x As Long
   Dim sx, sy
  Picture1.AutoRedraw = True
  '获取桌面的HDC
  x = GetDC(0) 
  '计算桌面的宽度和高度
   sx = Screen.Width \ Screen.TwipsPerPixelX 
   sy = Screen.Height \ Screen.TwipsPerPixelY
   '计算图像的宽度和高度
   w = Picture1.ScaleX(Picture1.Picture.Width, 8, vbPixels) 
  h = Picture1.ScaleY(Picture1.Picture.Height, 8, vbPixels)
  
  picture1.picture=loadpicture(“图像文件的完整文件名称”)
  
   '使透空的图像显示在桌面的中央
   Pic = TransparentBlt(x, _
   sx / 2 - w / 2, _
   sy / 2 - h / 2, _
   w, _
   h, _
   Picture1.hDC, _
   0, _
   0, _
   w, _
   h, _
   RGB(255, 255, 255))
  End Sub
  Private Sub Timer1_Timer()
  '两秒钟后恢复桌面
  InvalidateRectAsAny 0, ByVal 0&, True
  Load 自制程序的主窗体名
  Timer1.Enabled = False
  End Sub
  需要注意的是程序完成后如果直接在VB环境下运行有可能会出现透空图
像一闪而过的现象,这并不是你的错,只要把程序编译成*.exe的文件后运
行一切都会正常的。
                    
****************************************************************

                       VB6内置的内码转换功能 

                             江苏 文历

  嘿嘿,看到这个题目,想必吓了一大跳吧,或者是摆出一副不相信的表
情?不用着急,请听我慢慢道来。
  话说这个VB6,很是无耻,居然内置了支持Unicode的功能,也就是说,
当你读入一个字符串时,它根据本地缺省语言的对应关系将之转换为Unicode,
输出时,再从Unicode转换为本地编码。一方面,它当然方便啦,随便出个
什么语言的版本都好方便的,而且在Unicode的系统上,如NT,那它可就如
鱼得水,Unicode毕竟是软件发展的方向,像现在中文Win9X使用的GBK内码,
实际上就是向着Unicode走了一大步。可是在另一方面,这种支持实际上极大
地延缓了字符串的处理时间!想想看,如果我们从文件里读一行并显示,本来
是很简单的事情,可是在VB6里面,实际上多了一段转换到Unicode的时间,
如果我们用字符串从原文件里读一行,然后分析,再写到目的文件里去,实际
上就多了两重的时间(本地到Unicode , unicode到本地)。当然对于这种小事,
高手们想必也都有处理的办法(如用byte数组来代替字符串)
  说了这么一大堆Unicode的坏话,还没说到正题呢,由于VB6内置对Unicode
的支持,而Unicode里面分别和 GBK 以及Big5汉字都有对应关系,所以要实现
转换也只是一件小事,下面我们就有请本次女主角出场。(哗哗哗哗……掌声
不绝。)
  函数strConv! 这个美眉大家可能在VB5里面也都见过的,她有一些保镖,
可以帮她把字符串在Unicode和本地编码之间转换,而在VB6里面呢,strConv
又多了一个保镖!大家请仔细看:
  strConv(string,conversion) 'VB5
  StrConv(string, conversion, LCID) 'VB6
  string呢,就是预转换的字符串了(提示一下,也可以使用byte数组)。
  conversion: 是一个整数,只决定转换方式,VB里定义了一些常量,如
VBFromUnicode、VBUnicode等等,这些不用我解释大家应该也明白了吧。
  LCID:哈,这可是VB6新加入的参数了,长整数, 可以指定编码方式, 
如&H404,即Big5码, &H804即GBK码,合理运用这个参数,就可以写出一
个非常简单的内码转换工具!
  什么?你还不明白,哎,就把源码给你看看吧。
  Dim iReadNumber As Integer '读文件号
  Dim iWriteNumber As Integer '写文件号
  Dim mem() As Byte 'byte数组
  Dim strFileName As String '文件名
  Dim lLength As Long '文件长度
   
  '将文件内容读入mem byte数组
  iReadNumber = FreeFile
  strFileName = TextFileName.Text
  lLength = FileLen(strFileName)
  ReDim mem(lLength) As Byte
  Open strFileName For Binary As #iReadNumber
  Get #iReadNumber, , mem
  Close #iReadNumber
   
  '将mem数组转换为Big5码所对应的Unicode码
  mem = StrConv(mem, vbUnicode, &H404)
  '再将Unicode码转换为GBK编码
  mem = StrConv(mem, vbFromUnicode, &H804)
   
  '写到源文件里去 
  iWriteNumber = FreeFile
  Kill strFileName
  Open strFileName For Binary As #iWriteNumber
  Put #iWriteNumber, , mem
  Close #iWriteNumber
  '结束
  (笔者用的是中文VB6 Professional 版 + service pack3。)
  怎么样,方便吧?短短几行就把Big5码转换到GBK了。
  不过方便是方便了,但是呢,也有它自己的缺陷,老实说,用这种方法
来转换GB\GBK到Big5码是非常好的,可是把Big5码转过来的话,结果居然是
繁体的!看起来真的是很不爽,哎,这也没有办法,Unicode里面就是这个对
应关系;此外呢,这样转换毕竟是走了两步路,所以呢,从理论上来说,比
别的转码软件慢了一倍! 
  但是这样转过来可是有两大好处的,一,不会有错误的码,这可是国际
标准哟,你想什么? 二,不会有缺字,就像现在的很多转码软件都是从Big5
转到GB码,想想看15000字转到六七千字,一一映射,没有缺字才怪!
  
****************************************************************
****************************************************************

◆下载专区◆

BTCLib Library 1.0  (47K)
是一个MFC扩展库,它允许你定制你的控件。
使用这些类程,你的应用软件会具有一个新的模型风格。该库包括透明的
和非矩形的按钮、窗口、对话框,等等。
下载地址: http://www.geocities.com/SiliconValley/Sector/6100/BTCLib.zip
相关地址: http://www.binary-technologies.notrix.de

DirectX Control 2.7  (358K)
一个ActiveX控件,可以在可视化开发环境如VB中使用DirectX。
DirectX Control可以通过简单的API调用访问声音、输入和图像功能,不
需要书写复杂的C代码。DirectX Control支持三种不同的输入设备,你可
以得到游戏摇杆的方向和按钮状态,可以得到鼠标的坐标或者模拟键盘输
入,可以在游戏或应用程序中方便的控制他们。
系统要求:DirectX 5.0 or higher
下载地址: http://www.gfcsoftware.com/dxcontrol.zip
相关地址: http://www.gfcsoftware.com/directx.htm

ShellBrowser for Delphi4 2.0  (184K)
是一个通过Windows 95/NT的外壳名字方便浏览的Delphi组件。
对于每一个对象,它可以显示浏览的前后菜单、组成页、正确的条目以及
更多。就如同把文件放到回收站里一样,你可以使用你自己的Delphi弹出
菜单来拖动这个浏览的前后菜单。它让你可以使用几行程序来建立一个类
似浏览器的应用程序,包含几个有代码的示例项目和帮助文件。
下载地址: http://www.jam-software.com/delphi/shlbrws4.zip
相关地址: http://www.jam-software.com/delphi/

****************************************************************
****************************************************************

◆有问必答◆

★本期回答★

●093. 回答请mailto: yaozheng@kali.com.cn?subject=093
BCB的生手在Coding的过程中发现一些函数不知如何使用? 
函数列表如下: 
CEILING() 
FLOOR() 
INT() 
MOD() 
ROUNDDOWN() 
ROUNDUP() 
TRUNC() 
除INT()能够在程序中正常工作外,其余几个都编译通不过。请高手指点! 
E_mail: Amily_HJQ@gf.com.cn
答:
A.
你应该是没有包含头文件:math.h  阿蒙
B.
If you want to use those function, you should add the following 
line to your program:#include <math.h>
In addition, some functions' name character is lower. Did you 
notice it? Gauss  l_gauss@163.net

__________________________________________________________________

★本期提问★

094. 回答请mailto: yaozheng@kali.com.cn?subject=094
大家好:
1、有没有Qcard32.DLL编程的例子源程序?
2、用hcrtf.exe做帮助文件时,为什么总是遇到下列问题
HC4002: Warning: 
The RTF file D:\temp\.\chess.rtf is corrupted at offset 6800.
NowCan  Email: liukai1111@263.net

095. 回答请mailto: yaozheng@kali.com.cn?subject=095
各位DELPHI高手:
    小弟使用的一套工具软件只有 VC++ 的驱动程序和编程接口,我最近想
利用动态链接库把它改写为DELPHI接口,但是在改写 .H 头文件时,发现VC++
中定义的如下算法因子不知如何改写到DELPHI中,请多多指教,不胜感激:
 
#define parmtype(id) (((id) >> 8) & 0xF)  /* High byte, lo nibble */
#define parmnumb(id) (((id) & 0xFF) - 1)  /* Low byte */
 
#define CS_WAITEVT (CS_RINGS)

#define CP_DIAL        dx_get_tngencad ( 1 )   
#define CP_REORDER     dx_get_tngencad ( 2 )   
#define CP_BUSY        dx_get_tngencad ( 3 )   
#define CP_RINGBACK1   dx_get_tngencad ( 4 )   
 
096. 回答请mailto: yaozheng@kali.com.cn?subject=096
请问:如何在ASP中用循环遍历一个数据库时用SQL语句删除和更新当前记录!
京晖 JingHui_Super@263.net

097. 回答请mailto: yaozheng@kali.com.cn?subject=097
我是一名Delphi使用者,近日发现上网帐单不对,想自编一个不程序,以供自用.
但不知如何检测当时是否联网,是否脱机?恳请高手不吝惕教!在下不胜感激!
京晖  JingHui_Super@263.net

098. 回答请mailto: yaozheng@kali.com.cn?subject=098
BCB3.0怎样得到打印机的端口地址?  liukai1111@263.net

099. 回答请mailto: yaozheng@kali.com.cn?subject=099
围棋死活算法求解 liuycb@163.net

1OO. 回答请mailto: yaozheng@kali.com.cn?subject=100
请问怎样在Dephi中模拟一个按键动作,如按下end、enter键等,用Windows 
API 函数吗?是不是用keybd_event?怎样用?十分感谢!
dy001@21cn.com

1O1. 回答请mailto: yaozheng@kali.com.cn?subject=101
请教各位高手,如何打开一个有口令保护的Paradox表?谢谢!!!
我的E-mail:kinlee@21cn.com

1O2. 回答请mailto: yaozheng@kali.com.cn?subject=102
如何把Turboc程序转变为Windows98下的DLL?  snszn@pub2.qz.fj.cn


提问信箱: yaozheng@kali.com.cn?subject=question 
如果您有什么疑难问题,请发到上面的信箱里,我会及时把您的问题放在
杂志上的,希望编程高手们能不吝赐教,也希望这个栏目能成为大家交流
的场所。

****************************************************************
****************************************************************

◆编者的话◆


本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net

◆欢迎光临我的个人主页

●《编程技术》 http://person.zj.cninfo.net/~yao
本刊的同名主页,主要以收集各类编程工具控件和程序源代码为主。

●《C++ Builder世界》 http://cppbuilder.myrice.com
本人最新制作的个人主页,是一个探讨C++ Builder编程的专题
网站,为广大的C++ Builder爱好者搜集关于C++ Builder的一切。
                                                

◆《编程技术》订、退方法:

请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao

如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:
E-mail:yaozheng@kali.com.cn
ICQ#:  43260473

**************************THE END**************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -