我收藏的一些源代码

shawls 2002-01-10 10:09:16


xml格式的,用空格替代 chr(13)代替<br>


<数据>
<名称>读写INI文件的四个函数</名称>
<类别>VB文件</类别>
<数据来源>自己制作</数据来源>
<来源时间>2002-01-04 19:17:00</来源时间>
<保存时间>2002-01-06 02:43:28</保存时间>
<删除>False</删除>
<删除时间>2002-01-09 23:57:09</删除时间>
<关键字1>INI</关键字1>
<关键字2>函数</关键字2>
<关键字3 />
<内容简介 />
<内容>'文件名SourceDB.ini文件<br> Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long<br> Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long<br> <br> '以下两个函数,读/写ini文件,固定节点setting,in_key为写入/读取的主键<br> '仅仅针对是非值<br> 'Y:yes,N:no,E:error<br> Public Function GetIniTF(ByVal In_Key As String) As Boolean<br> On Error GoTo GetIniTFErr<br> GetIniTF = True<br> Dim GetStr As String<br> GetStr = VBA.String(128, 0)<br> GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"<br> GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")<br> If GetStr = "1" Then<br>    GetIniTF = True<br>    GetStr = ""<br> Else<br>    GoTo GetIniTFErr<br> End If<br> Exit Function<br> GetIniTFErr:<br>    Err.Clear<br>    GetIniTF = False<br>    GetStr = ""<br> End Function<br> <br> Public Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean<br> On Error GoTo WriteIniTFErr<br> WriteIniTF = True<br> If In_Data = True Then<br>  WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini"<br> Else<br>  WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini"<br> End If<br> Exit Function<br> WriteIniTFErr:<br>    Err.Clear<br>    WriteIniTF = False<br> End Function<br> <br> <br> '以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键<br> '针对字符串值<br> '空值表示出错<br> Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String<br> On Error GoTo GetIniStrErr<br> If VBA.Trim(In_Key) = "" Then<br>    GoTo GetIniStrErr<br> End If<br> Dim GetStr As String<br> GetStr = VBA.String(128, 0)<br>  GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"<br>   GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")<br> If GetStr = "" Then<br>    GoTo GetIniStrErr<br> Else<br>    GetIniStr = GetStr<br>    GetStr = ""<br> End If<br> Exit Function<br> GetIniStrErr:<br>    Err.Clear<br>    GetIniStr = ""<br>    GetStr = ""<br> End Function<br> <br> Public Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean<br> On Error GoTo WriteIniStrErr<br> WriteIniStr = True<br> If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then<br>    GoTo WriteIniStrErr<br> Else<br>  WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini"<br> End If<br> Exit Function<br> WriteIniStrErr:<br>    Err.Clear<br>    WriteIniStr = False<br> End Function</内容>
</数据>
- <数据>
<名称>如何取得计算机名</名称>
<类别>VBAPI</类别>
<数据来源>yesky</数据来源>
<来源时间>2001-11-24 22:09:12</来源时间>
<保存时间>2002-01-05 22:14:41</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>计算机名</关键字2>
<关键字3>取得</关键字3>
<内容简介>NULL</内容简介>
<内容>程序说明: <br> <br>   这个程序比较简单,大家自己看吧 <br> <br>   计算机名就是你打开 控制面板-系统-网络标识-完整的计算机名称 <br> <br>   程序代码: <br> <br> <br> <br> Form1 <br> <br> Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long <br> <br> Private Sub Command1_Click()<br> Dim Name As String, Length As Long <br> <br> Length = 225<br> Name = String(Length, Chr(0))<br> GetComputerName Name, Length<br> Name = Left(Name, Length)<br> Label1.Caption = Name <br> <br> End Sub <br> <br> Private Sub Form_Load() <br> <br> End Sub</内容>
</数据>
- <数据>
<名称>计算Windows从启动后所运行的总时间</名称>
<类别>VBAPI</类别>
<数据来源>yesky</数据来源>
<来源时间>2001-11-24 22:09:12</来源时间>
<保存时间>2002-01-10 15:03:09</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>运行</关键字2>
<关键字3>时间</关键字3>
<内容简介 />
<内容>利用Api函数计算Windows从启动后所运行的总时间 <br> <br> Private Declare Function GetTickCount Lib "kernel32" () As Long<br> <br> Private Sub Timer1_Timer()<br> Dim hour As Integer<br> Dim minute As Integer<br> Dim second As Integer<br> hour = GetTickCount \ 1000 \ 60 \ 60<br> Label1.Caption = Str(hour) + "小时"<br> <br> minute = (GetTickCount - hour * 60 * 60 * 1000) \ 1000 \ 60<br> Label2.Caption = Str(minute) + "分钟"<br> <br> second = (GetTickCount - Val(Label1.Caption) * 60 * 60 * 1000 - Val(Label2.Caption) * 60 * 1000) \ 1000<br> Label3.Caption = Str(second) + "秒钟"<br> End Sub</内容>
</数据>
- <数据>
<名称>使窗体右上角的X按钮失效</名称>
<类别>控件特效</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 18:13:01</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>窗体</关键字2>
<关键字3>失效</关键字3>
<内容简介 />
<内容>窗体右上角的X按钮通常用来关闭一个程序,这个小X按钮实际上是和系统菜单的“关闭”菜单项关联在一起的,什么?不知道什么是系统菜单,系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”、“移动”、“最大化”、“最小化”、“关闭”这么几个按钮。这个菜单用普通的方法是不能编辑和改变的,但是我们可以通过API函数GetSystemMenu来得到它的句柄,然后通过菜单相关的API函数就能改变它了,下面一起看看怎么做吧。 <br> <br>   为了学习方便,下面先给出源码,并且已经作了详细的中文注释: <br> <br> 程序说明:<br> 本例利用API函数GetSystemMenu得到系统菜单的句柄<br> X按钮是系统菜单的一菜单项,然后用RemoveMenu函数<br> 删去这一菜单项,也就是使X按钮失效了。<br> -------------------------------------------<br> 【VB声明】 <br> <br> Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long <br> <br> <br> 【说明】<br> 取得指定窗口的系统菜单的句柄。在vb环境,“系统菜单”的正式名称为“控制菜单”,即单击窗口左上角的控制框时出现的菜单 <br> <br> 【返回值】<br> Long,如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单) <br> <br> 【备注】<br> 在vb里使用:系统菜单会向窗口发送一条WM_SYSCOMMAND消息,而不是WM_COMMAND消息 <br> <br> 【参数表】<br> hwnd ----------- Long,窗口的句柄 <br> <br> bRevert -------- Long,如设为TRUE,表示接收原始的系统菜单 <br> <br> Private Declare Function GetSystemMenu Lib "user32" ( _<br> ByVal hwnd As Integer, _<br> ByVal bRevert As Integer _<br> ) As Integer <br> <br> 【VB声明】 <br> <br> Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long <br> 【说明】<br> 删除指定的菜单条目。如删除的条目属于一个弹出式菜单,那么这个函数不会同时删除弹出式菜单。首先应该用GetSubMenu函数取得弹出式菜单的句柄,再在以后将其删除 <br> <br> 【返回值】<br> Long,非零表示成功,零表示失败。会设置GetLastError <br> <br> 【备注】 <br> 强烈建议大家使用vb菜单的visible属性从菜单中删除条目,而不要用这个函数,否则会造成指定菜单中其他菜单条目的visible属性对错误的菜单条目产生影响 <br> <br> 【参数表】<br> hMenu ---------- Long,菜单的句柄 <br> <br> nPosition ------ Long,欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零) <br> <br> wFlags --------- Long,常数MF_BYCOMMAND或MF_BYPOSITION,取决于nPosition参数<br> <br> <br> <br> Private Declare Function RemoveMenu Lib "user32" ( _<br> ByVal hMenu As Integer, _<br> ByVal nPosition As Integer, _<br> ByVal wFlags As Integer _<br> ) As Integer <br> <br> Private Sub Command1_Click()<br> Unload Me<br> End Sub <br> <br> Private Sub Form_Load()<br> Dim R As Integer<br> MyMenu = GetSystemMenu(Me.hwnd, 0)<br> RemoveMenu MyMenu, &HF060, R<br> End Sub  <br> <br> <br>   程序中用到了两个API函数GetSystemMenu、RemoveMenu,其中GetSystemMenu函数用来得到系统菜单的句柄,RemoveMenu用来删除指定的菜单条目,我们先来看看这个函数的声明和参数:<br> <br>    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long <br> <br>    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long  <br> 其中各GetSystemMenu参数的意义如下表: <br> <br> 参数 意义 <br> hwnd Long 系统菜单所在窗口的句柄 <br> bRevert Long 如设为TRUE,表示恢复原始的系统菜单 <br> 返回值 Long 如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单) <br> <br>   而RemoveMenu参数的意义如下表: <br> <br> 参数 意义 <br> hMenu Long 菜单的句柄 <br> nPosition Long 欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零) <br> wFlags Long 常数MF_BYCOMMAND=&H0&或MF_BYPOSITION=&H400&,取决于nPosition参数 <br> 返回值 Long,非零表示成功,零表示失败 <br> <br>   然后就可以在程序中使用这两个函数了,我们在窗体的Form_Load()过程中加入如下代码: <br> <br>    MyMenu = GetSystemMenu(Me.hwnd,0)    得到系统菜单的句柄,Me.hwnd表示当前窗体的句柄 <br> <br>    RemoveMenu MyMenu, &HF060, MF_BYCOMMAND 移去“关闭”菜单项,&HF060“关闭”菜单项的命令ID <br> <br>   接着我们运行程序,看看窗体右上角的X按钮是不是已经不可点击了,系统菜单中的“关闭”项也消失了,很有趣,不过一定记着为程序留一个“退出”按钮哦!</内容>
</数据>
- <数据>
<名称>动态改变及恢复屏幕设置下</名称>
<类别>VBAPI</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-05 22:25:20</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>屏幕设置</关键字2>
<关键字3>动态</关键字3>
<内容简介>NULL</内容简介>
<内容>三、在工程窗体中,加入两个按钮Command1和Command2,其Caption属性分别为“800x600x16”和“恢复原设置”。 <br> <br>   其程序代码为: <br> <br>   窗口的“通用|声明”区 <br> <br> <br> <br> Option Explicit<br> Dim H, V, Color As Long  <br> <br>   声名变量,用于保存最初屏幕设置<br>   Private Sub Form_Load()<br>   ---------------以下代码用于得到最初的屏幕设备--------------<br> <br> <br> <br> H = GetDeviceCaps(Form1.hdc, HORZRES)<br> V = GetDeviceCaps(Form1.hdc, VHORZRES)<br> Color = GetDeviceCaps(Form1.hdc, BITSPIXEL)<br> End Sub <br> <br> Private Sub Command1_Click()  <br> <br>   调用SetDispMode函数改变屏幕设置<br> <br> <br> <br> SetDispMode 800, 600, 16<br> End Sub <br> <br> Private Sub Command2_Click()  <br> <br>   恢复最初屏幕设置<br> <br> SetDispMode Cint(H), Cint(V), Cint(Color)<br> End Sub <br> <br>   四、将程序编译执行。 <br> <br>   本程序执行后,如果单击Command1,则您的计算机屏幕显示模式将被设置为“800x600x16”的显示模式;如果单击Command2, 则您的计算机屏幕显示模式将被设置为原来的显示模式。此程序稍加修改,即可放置于桌面或任务栏中,直接快捷的修改屏幕设置。</内容>
</数据>
...全文
228 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2002-01-11
  • 打赏
  • 举报
回复
u p
kingshine 2002-01-11
  • 打赏
  • 举报
回复
u p
shawls 2002-01-11
  • 打赏
  • 举报
回复


<数据>
<名称>用VB制作IE工具条自定义按钮上</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 14:59:22</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>IE</关键字1>
<关键字2>按钮</关键字2>
<关键字3>工具条</关键字3>
<内容简介>用VB制作IE工具条自定义按钮<br> 作者:西安市含光门外中原小区1号楼3单元702(710068) 张庆 </内容简介>
<内容>现在,有许多软件安装后会在 IE 浏览器的工具条上添加一个自定义按钮,为用户运行程序提供了方便,如“网络蚂蚁”、“金山词霸2000”等等。实际上添加这个自定义按钮并不难,只要找到了它在注册表中的位置和有关参数,通过手工或程序都可以轻易完成。而最方便的办法就是调用现成的 ActiveX 控件来完成这个功能,但 Windows 似乎没有提供这种控件。下面介绍如何开发和使用这种自定义控件。 <br> 实现方法 <br> 要添加这种自定义按钮,需要在 Windows 注册表的 HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions 子键下建立一个 GUID 项,然后在注册表的右栏建立相应的参数并赋值。这些参数及其含义如下: <br> ●ButtonText:自定义按钮上显示的文本字符串; <br> ●Clsid:IE 工具条的类标识码,为“{1FBA04EE-3024-11D2-8F1F0000F87ABD16}”; <br> ●Default Visible:自定义按钮是否可见,一般为 “Yes"; <br> ●Exec:自定义按钮执行的目标,为可执行文件或超文本链接等; <br> ●HotIcon:鼠标移上按钮时显示的图标,一般取自 EXE 文件或 DLL 文件; <br> ●Icon:按钮正常显示的图标,一般取自 EXE 文件或 DLL 文件; <br> ●MenuText:在 IE 的“工具”菜单中显示的菜单项; <br> ●MenuStatusBar:IE的“工具”菜单项的注释,在状态条上显示。 <br> 制作过程 <br> 在 VB 5.0/6.0 下建立新的“ActiveX 控件”工程。 <br> 首先,给控件 AddButton 的 Picture 属性添加一个微型 Icon 图片,这样当使用该控件时,会在控件工具箱上显示这个小图标。然后,再在设计窗口上放置一个 image 控件,给它也设置一个小图片,使用该控件时,会在其 Form 上显示该控件的外观。最后,调出代码编辑窗口,在该窗口中键入以下代码,其中 API 函数调用的代码可以直接从“API 文本浏览器”中获得。 <br> Option Explicit <br> ……'Default Property Values <br> ……'Property Variables <br> '定义常量 <br> Const HKEY_LOCAL_MACHINE = &H80000002 <br> Const REG_SZ = 1 <br> '声明存取注册表的 API 函数 <br> Private Declare Function RegCloseKey Lib “advapi32.dll" (ByVal hKey As Long) As Long <br> Private Declare Function RegCreateKey Lib “advapi32.dll" Alias “RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long <br> Private Declare Function RegDeleteValue Lib “advapi32.dll" Alias “RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long <br> Private Declare Function RegOpenKey Lib “advapi32.dll" Alias “RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long <br> Private Declare Function RegSetValueEx Lib “advapi32.dll" Alias “RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String,ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long </内容>
</数据>
- <数据>
<名称>用VB制作IE工具条自定义按钮下</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 14:59:31</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>IE</关键字1>
<关键字2>按钮</关键字2>
<关键字3>工具条</关键字3>
<内容简介>用VB制作IE工具条自定义按钮<br> 作者:西安市含光门外中原小区1号楼3单元702(710068) 张庆 </内容简介>
<内容>'定义注册表中的主键、子键 <br> Const hKey = HKEY_LOCAL_MACHINE <br> Const subKey0=“Software\Microsoft\Internet Explorer\Extensions\" <br> ’把字符串值存入注册表 <br> Private Sub SaveString(hKey As Long, strPath As String, strValue As String, strdata As String) <br> Dim keyhand As Long <br> Dim r As Long <br> r=RegCreateKey(hKey, strPath, keyhand) <br> r=RegSetValueEx(keyhand, strValue, 0,REG_SZ, ByVal strdata, Len(strdata)) <br> r=RegCloseKey(keyhand) <br> End Sub <br> ’从注册表中删除字符串值 <br> Private Function DeleteValue(ByVal hKey As Long, ByVal strPath As String, ByVal strValue As String) <br> Dim r, keyhand As Long <br> r = RegOpenKey(hKey, strPath, keyhand) <br> r = RegDeleteValue(keyhand, strValue) <br> r = RegCloseKey(keyhand) <br> End Function <br> '把设置写入注册表,定义按钮 <br> Public Sub AddBtn2IEtoolbar() <br> Dim subKey As String <br> subKey = subKey0 & Trim(GUID) & “\" <br> Call SaveString(hKey, subKey, “ButtonText", ButtonText) <br> Call SaveString(hKey, subKey,“Clsid", <br> “{1FBA04EE-3024-11D2-8F1F0000F87ABD16}") <br> Call SaveString(hKey, subKey, “Default Visible", “Yes") <br> Call SaveString(hKey, subKey, “Exec", Exec) <br> Call SaveString(hKey, subKey, “HotIcon", HotIcon) <br> Call SaveString(hKey, subKey, “Icon", Icon) <br> Call SaveString(hKey, subKey, “MenuStatusBar", <br> MenuStatusBar) <br> Call SaveString(hKey,subKey,“MenuText", MenuText)End Sub <br> '从注册表中删除自定义按钮 <br> Public Sub DelBtnFromIEtoolbar() <br> Dim subKey As String <br> subKey = subKey0 & Trim(GUID) & “\" <br> Call DeleteValue(hKey, subKey, “ButtonText") <br> Call DeleteValue(hKey, subKey, “Clsid") <br> Call DeleteValue(hKey, subKey, “Default Visible") <br> Call DeleteValue(hKey, subKey, “Exec") <br> Call DeleteValue(hKey, subKey, “HotIcon") <br> Call DeleteValue(hKey, subKey, “Icon") <br> Call DeleteValue(hKey, subKey, “MenuStatusBar") <br> Call DeleteValue(hKey, subKey, “MenuText") <br> End Sub <br> '初始化控件属性 <br> Private Sub UserControl_InitProperties() <br> m_ButtonText = m_def_ButtonText <br> m_Exec = m_def_Exec <br> m_HotIcon = m_def_HotIcon <br> m_Icon = m_def_Icon <br> m_MenuText = m_def_MenuText <br> m_MenuStatusBar = m_def_MenuStatusBar <br> m_GUID = m_def_GUID <br> End Sub <br> '从存储器中加载属性值 <br> Private Sub UserControl_ReadProperties(PropBag As PropertyBag) <br> m_ButtonText = PropBag.ReadProperty <br> (“ButtonText", m_def_ButtonText) <br> m_Exec = PropBag.ReadProperty(“Exec", <br> m_def_Exec) <br> m_HotIcon = PropBag.ReadProperty(“HotIcon", <br> m_def_HotIcon) <br> m_Icon = PropBag.ReadProperty(“Icon", <br> m_def_Icon) <br> m_MenuText = PropBag.ReadProperty <br> (“MenuText",m_def_MenuText) <br> m_MenuStatusBar =PropBag.ReadProperty <br> (“MenuStatusBar", m_def_MenuStatusBar) <br> m_GUID =PropBag.ReadProperty(“GUID", <br> m_def_GUID) <br> End Sub</内容>
</数据>
- <数据>
<名称>使用VB设计具有动感的命令图标栏</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:00:57</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>图标</关键字1>
<关键字2>动感</关键字2>
<关键字3>命令</关键字3>
<内容简介>使用VB设计具有「动感」的命令图标栏<br> 作者:张嵘 </内容简介>
<内容>我们在使用Word、Excel等Windows应用程序时,经常会见到在程序界面顶端有一行“立体式”图标按钮。当用鼠标按下某一个图标按钮时,程序就执行相应的操作。这一行“立体式”图标按钮通常就称作命令图标栏或工具条。命令图标栏一般提供一些最常用的命令,供用户快速地取用,并且它设计时采用了“立体式”按钮,操作时会产生凹下去和凸出来的“动感”,笔者这里就谈谈如何用VB来建立具有“动感”的命令图标栏。<br> 使命令图标具有“动感”是依靠对命令图标的不同状态的图像切换来获得的。当鼠标按下时,图标显示为凹入状态的图像;当松开时,图标显示为凸出状态的图像。通过图像切换就使命令图标具有了“动感”,具体设计步骤如下:<br> 1首先在窗体中创建一个图片框(Picture Box),将其Align属性置为1,使图片框固定在窗体上端,调节其宽度使其能安置图像或命令按钮。<br> 2在图标框内创建若干个图像框(Image Control),设置其Autosize=True,Picture属性在程序运行中设置。<br> 3编写程序代码。这里假设某个命令图标凸出状态的图像文件名为"zrup.bmp",凹入状态的图像文件名为"zrdown.bmp"。<br> 窗体装入时:Sub form-load()<br> Imagel.picture=Loadpicture("zrup.bmp") ' 命令图标凸出<br> End sub<br> 鼠标按下时:Sub Imagel-mousedown(Button As Integer Shift As Integer, X As single,Y As single)<br> Imagel.picture=Loadpicture("zrdown.bmp") ' 命令图标如下:<br> End sub<br> 鼠标松开时:Sub Imagel-mouseup(Button As Integer,Shift As Integer,X As single,Y As single)Imagel.picture=Loadpicture("zrup.bmp") ' 命令图标凸出<br> End sub<br> 以上只能使命令图标具备凹下去的功能,但当在按鼠标按钮不放,并拖曳鼠标使光标移到外头,原来图标仍然处于凹下状态。要使其自动凸起,就要编写如下代码:<br> Sub Imagel-mouseup(Button As Integer,Shift As Integer,X As single,Y As single)<br> Select Case Button<br> Case 1<br> If X<=0 or X>Imagel.Width or Y<=0 or Y>Imagel.Height then Imagel.picture=Loadpicture("zrup.bmp") '凸出<br> else<br> Imagel.picture=Loadpicture("zrdown.bmp") '凹入<br> End if<br> End select<br> End sub<br> 通过以上三步骤就可以建立具有“动感”的命令图标,若具有多个命令图标时,可通过创建图像控制数组来实现。BMP是常见的一种图像格式,也可以使用VB提供的丰富的不同状态的命令图标位图文件,它在VB的子目录\bitmaps\中</内容>
</数据>
- <数据>
<名称>直接通过ODBCAPI访问SQL数据库一</名称>
<类别>数据库</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:11:10</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>ODBC</关键字1>
<关键字2>API</关键字2>
<关键字3>SQL</关键字3>
<内容简介 />
<内容>*********************************<br> ODBC - Open DataBase Connectivity<br> *********************************<br> <br> Basic Steps<br> <br> Connecting to the SQL Server DataBase for retrieving information from tables<br> <br> <br> *************************************************************<br> The steps 1 - 3 are for connecting to the SQL Server Database<br> *************************************************************<br> <br> <br> 1. Allocate ODBC Environment Handle<br> <br> If SQLAllocEnv(glEnv) <> 0 Then<br>   MsgBox "Unable to initialize ODBC API drivers!"<br>   End<br> End If<br> ______________________________________________________________<br> <br> 2. Allocate ODBC Database Handle<br> <br> Dim iStatus As Integer<br> <br> If SQLAllocConnect(glEnv, glDbc) <> 0 Then<br>   MsgBox "Could not allocate memory for connection Handle!"<br>   ODBCInit = False<br> <br>   ' Free the Environment<br>   iStatus = SQLFreeEnv(lEnv)<br> <br>   If iStatus = SQL_ERROR Then<br>     MsgBox "Error Freeing Environment From ODBC Drivers"<br>   End If<br> <br>   ' Quit the Application<br>   End<br> End If<br> ______________________________________________________________ <br> <br> 3. Connect using the sConnect string - SQLDriverConnect<br> <br> Dim sResult As String<br> Dim iSize As Integer<br> Dim sConnect As String<br> <br> sConnect = "DSN=" & gsDSN & ";UID=" & gsLoginID & ";PWD=" & gsPassword & ";APP=" & gsAppCode & ";DATABASE=" & gsDatabase<br> <br> If SQLDriverConnect(glDbc, Screen.ActiveForm.hWnd, sConnect, Len(sConnect), sResult, Len(sResult), iSize, 0) <= 0 Then<br>   MsgBox "Could not establish connection to ODBC driver!"<br> End If<br> ______________________________________________________________<br> <br> <br> ***************************************************<br> The steps 4 - 8 are for retrieving data from tables<br> ***************************************************<br> <br> <br> 4. Allocate ODBC Statement Handle<br> <br> If SQLAllocStmt(glDbc, glStmt) <> 0 Then<br> <br>    MsgBox "Could not allocate memory for a statement handle!"<br> <br> End If<br> ______________________________________________________________<br> <br> 5. Execute ODBC Statement - SQLExecDirect<br> <br> Dim lRet As Long, lErrNo As Long<br> Dim iLen As Integer<br> Dim sSQLState As String * MAX_DATA_BUFFER<br> Dim sErrorMsg As String * MAX_DATA_BUFFER<br> Dim sMsg As String<br> <br> sSQL = "SELECT name, location FROM authors"<br> <br> If SQLExecDirect(glStmt, sSQL, Len(sSQL)) <> SQL_SUCCESS Then<br>   ' Also Check for ODBC Error message - SQLError<br>   lRet = SQLError(glEnv, gldbc, glStmt, sSQLState, lErrNo, sErrorMsg, MAX_DATA_BUFFER, iLen)<br>   sMsg = "Error Executing SQL Statement" & Chr$(13) & Chr$(10)<br>   sMsg = sMsg & "ODBC State = " & Trim$(Left$(sSQLState, InStr(sSQLState, Chr$(0)) - 1)) & Chr$(13) & Chr$(10)<br>   sMsg = sMsg & "ODBC Error Message = " & Left$(sErrorMsg, iLen)<br>   MsgBox sMsg, vbInformation, "Execute Query"<br> End If<br> ______________________________________________________________<br> <br> 6. Fetch one row of results from executed ODBC Statement - SQLFetch<br> <br> Code in Step 7.<br> ______________________________________________________________</内容>
</数据>
- <数据>
<名称>直接通过ODBCAPI访问SQL数据库二</名称>
<类别>数据库</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:10:29</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>ODBC</关键字1>
<关键字2>API</关键字2>
<关键字3>SQL</关键字3>
<内容简介>NULL</内容简介>
<内容>7. Get the Data in each field of the Fetched row - SQLGetData<br> <br> Dim bPerform As Integer, iStatus As Integer<br> Dim sData As String * MAX_DATA_BUFFER<br> Dim lOutLen As Long<br> <br> bPerform = SQLFetch(glStmt)<br> <br> Do While bPerform<br>   bPerform = SQLFetch(lStmt)     ' Get the next row of data<br>   If bPerform = SQL_SUCCESS Then    ‘ If rows of data available   <br>     bPerform = True<br> <br>     ' Get Author Name - iColumn = 1 for first field i.e. name in sSQL <br>     iStatus = SQLGetData(glStmt, iColumn, 1, sData, MAX_DATA_BUFFER, lOutLen)<br> <br>     ' lOutlen = length of the valid data in sData<br>     ' Data value will be = Left$(sData, lOutlen), lOutlen = -1 if no data or Null data<br> <br>     ' Get Location - iColumn = 2 for second field i.e. location in sSQL<br>     iStatus = SQLGetData(glStmt, iColumn, 1, sData, MAX_DATA_BUFFER, lOutLen)<br> <br>      ' Add the Field Data to Correponding Data Display Controls for this row<br>   Else<br>     bPerform = False  ' No more rows available<br>   End If<br> Loop<br> <br> 'Release the ODBC Statement Handle<br> bPerform = SQLFreeStmt(glStmt, SQL_DROP)<br> ______________________________________________________________<br> <br> 8. Release the ODBC Statement Handle - SQLFreeSTmt<br> <br> Code in Step 7.<br> ______________________________________________________________<br> <br> *******************************************************************<br> The steps 9 - 11 are for Disconnecting from the SQL Server DataBase<br> *******************************************************************<br> <br> <br> 9. Disconnect from ODBC Database - SQLDisconnect<br> <br> iStatus = SQLDisconnect(glDbc)<br> ______________________________________________________________<br> <br> 10. Release the ODBC Database Handle - SQLFreeConnect<br> <br> iStatus = SQLFreeConnect(glDbc)<br> ______________________________________________________________<br> <br> 11. Release the ODBC Environment Handle - SQLFreeEnv<br> <br> iStatus = SQLFreeEnv(glEnv)<br> ______________________________________________________________ <br> <br> ***********************************************************************<br> The following entries are required in the ODBCAPI module<br> ***********************************************************************<br> <br> ' ODBC Variables and Constants<br>  <br> Global glEnv As Long<br> Global glDbc As Long<br> Global sSQL As String<br>  <br> Global Const MAX_DATA_BUFFER = 255<br> Global Const SQL_SUCCESS = 0<br> Global Const SQL_SUCCESS_WITH_INFO = 1<br> Global Const SQL_ERROR = -1<br> Global Const SQL_NO_DATA_FOUND = 100<br> Global Const SQL_CLOSE = 0<br> Global Const SQL_DROP = 1<br> Global Const SQL_CHAR = 1<br> Global Const SQL_NUMERIC = 2<br> Global Const SQL_DECIMAL = 3<br> Global Const SQL_INTEGER = 4<br> Global Const SQL_SMALLINT = 5<br> Global Const SQL_FLOAT = 6<br> Global Const SQL_REAL = 7<br> Global Const SQL_DOUBLE = 8<br> Global Const SQL_VARCHAR = 12<br> Global Const SQL_DATA_SOURCE_NAME = 6<br> Global Const SQL_USER_NAME = 8<br> <br> <br> 'ODBC Declarations<br> 'The hWnd is a Long in Windows 95 & Windows NT</内容>
</数据>
- <数据>
<名称>直接通过ODBCAPI访问SQL数据库三</名称>
<类别>数据库</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:10:56</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>ODBC</关键字1>
<关键字2>API</关键字2>
<关键字3>SQL</关键字3>
<内容简介>NULL</内容简介>
<内容>#If Win32 Then<br>   Declare Function SQLAllocEnv Lib "odbc32.dll" (env As Long) As Integer<br>   Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal env As Long) As Integer<br>   Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal env As Long, ldbc As Long) As Integer<br>   Declare Function SQLConnect Lib "odbc32.dll" (ByVal ldbc As Long, ByVal Server As String,ByVal serverlen As Integer, ByVal uid As String, ByVal   uidlen As Integer, ByVal pwd As String, ByVal pwdlen As Integer) As Integer<br> <br>   Declare Function SQLDriverConnect Lib "odbc32.dll" (ByVal ldbc As Long, ByVal hWnd As Long, ByVal szCSIn As String, ByVal cbCSIn As   Integer,ByVal szCSOut As String, ByVal cbCSMax As Integer, cbCSOut As Integer, ByVal f As Integer) As Integer<br> <br>   Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal ldbc As Long) As Integer<br>   Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal ldbc As Long) As Integer<br>   Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal ldbc As Long, lStmt As Long) As Integer<br>   Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal lStmt As Long, ByVal EndOption As Integer) As Integer<br>   Declare Function SQLTables Lib "odbc32.dll" (ByVal lStmt As Long, ByVal q As Long, ByVal cbq As Integer, ByVal o As Long, ByVal cbo As Integer,   ByVal t As Long, ByVal cbt As Integer, ByVal tt As Long, ByVal cbtt As Integer) As Integer<br> <br>   Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal lStmt As Long, ByVal sqlString As String, ByVal sqlstrlen As Long) As Integer<br> <br>   Declare Function SQLNumResultCols Lib "odbc32.dll" (ByVal lStmt As Long, NumCols As Integer) As Integer<br>   Declare Function SQLDescribeCol Lib "odbc32.dll" (ByVal lStmt As Long, ByVal colnum As Integer, ByVal colname As String, ByVal Buflen As   Integer, colnamelen As Integer, dtype As Integer, dl As Long, ds As Integer, n As Integer) As Integer<br> <br>   Declare Function SQLFetch Lib "odbc32.dll" (ByVal lStmt As Long) As Integer<br>   Declare Function SQLGetData Lib "odbc32.dll" (ByVal lStmt As Long, ByVal col As Integer, ByVal wConvType As Integer, ByVal lpbBuf As String,   ByVal dwbuflen As Long, lpcbout As Long) As Integer<br> <br>   Declare Function SQLGetInfo Lib "odbc32.dll" (ByVal ldbc As Long, ByVal hWnd As Long, ByVal szInfo As String, ByVal cbInfoMax As Integer,   cbInfoOut As Integer) As Integer<br> <br>   Declare Function SQLError Lib "odbc32.dll" (ByVal env As Long, ByVal ldbc As Long, ByVal lStmt As Long, ByVal SQLState As String, NativeError As   Long, ByVal Buffer As String, ByVal Buflen As Integer, Outlen As Integer) As Integer<br> <br> #Else<br></内容>
</数据>
- <数据>
<名称>直接通过ODBCAPI访问SQL数据库四</名称>
<类别>数据库</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:11:03</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>ODBC</关键字1>
<关键字2>API</关键字2>
<关键字3>SQL</关键字3>
<内容简介>NULL</内容简介>
<内容><br>   Declare Function SQLAllocEnv Lib "odbc.dll" (env As Long) As Integer<br>   Declare Function SQLFreeEnv Lib "odbc.dll" (ByVal env As Long) As Integer<br>   Declare Function SQLAllocConnect Lib "odbc.dll" (ByVal env As Long, ldbc As Long) As Integer<br>   Declare Function SQLConnect Lib "odbc.dll" (ByVal ldbc As Long, ByVal Server As String, ByVal serverlen As Integer, ByVal uid As String, ByVal   uidlen As Integer, ByVal pwd As String, ByVal pwdlen As Integer) As Integer<br> <br>   Declare Function SQLDriverConnect Lib "odbc.dll" (ByVal ldbc As Long, ByVal hWnd As Integer, ByVal szCSIn As String, ByVal cbCSIn As Integer,   ByVal szCSOut As String, ByVal cbCSMax As Integer, cbCSOut As Integer, ByVal f As Integer) As Integer<br> <br>   Declare Function SQLFreeConnect Lib "odbc.dll" (ByVal ldbc As Long) As Integer<br>   Declare Function SQLDisconnect Lib "odbc.dll" (ByVal ldbc As Long) As Integer<br>   Declare Function SQLAllocStmt Lib "odbc.dll" (ByVal ldbc As Long, lStmt As Long) As Integer<br>   Declare Function SQLFreeStmt Lib "odbc.dll" (ByVal lStmt As Long, ByVal EndOption As Integer) As Integer<br>   Declare Function SQLTables Lib "odbc.dll" (ByVal lStmt As Long, ByVal q As Long, ByVal cbq As Integer, ByVal o As Long, ByVal cbo As Integer,   ByVal t As Long, ByVal cbt As Integer, ByVal tt As Long, ByVal cbtt As Integer) As Integer<br> <br>   Declare Function SQLExecDirect Lib "odbc.dll" (ByVal lStmt As Long, ByVal sqlString As String, ByVal sqlstrlen As Long) As Integer<br> <br>   Declare Function SQLNumResultCols Lib "odbc.dll" (ByVal lStmt As Long, NumCols As Integer) As Integer<br>   Declare Function SQLDescribeCol Lib "odbc.dll" (ByVal lStmt As Long, ByVal colnum As Integer, ByVal colname As String, ByVal Buflen As Integer,   colnamelen As Integer, dtype As Integer, dl As Long, ds As Integer, n As Integer) As Integer<br> <br>   Declare Function SQLFetch Lib "odbc.dll" (ByVal lStmt As Long) As Integer<br>   Declare Function SQLGetData Lib "odbc.dll" (ByVal lStmt As Long, ByVal col As Integer, ByVal wConvType As Integer, ByVal lpbBuf As String, ByVal   dwbuflen As Long, lpcbout As Long) As Integer<br> <br>   Declare Function SQLGetInfo Lib "odbc.dll" (ByVal ldbc As Long, ByVal hWnd As Integer, ByVal szInfo As String, ByVal cbInfoMax As   Integer,cbInfoOut As Integer) As Integer<br> <br>   Declare Function SQLError Lib "odbc.dll" (ByVal env As Long, ByVal ldbc As Long, ByVal lStmt As Long, ByVal SQLState As String, NativeError As   Long, ByVal Buffer As String, ByVal Buflen As Integer, Outlen As Integer) As Integer<br> <br> #End If</内容>
</数据>
- <数据>
<名称>功能强大的SendMessage函数上</名称>
<类别>VB文件</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:14:03</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>SendMessag</关键字1>
<关键字2>函数</关键字2>
<关键字3>API</关键字3>
<内容简介 />
<内容><br> Windows API(应用程序接口)是Windows系列软件为程序开发人员提供的火力强大的“武器库”,在这个武器库中,有很多极具威力的武器,SendMessage就是其中之一,它的功能非常丰富,灵活使用这个函数,会给编程工作带来很多便利。本文以Visual Basic为例,结合几个具体的例子介绍该函数的功能。<br> 一、SendMeaasge函数简介<br>    顾名思义,SendMessage函数的功能是“发送消息”,即将一条消息发送到指定对象(操作系统、窗口或控件等)上,以产生特定的动作(如滚屏、修改对象外观等)。<br> SendMessage函数在VB中的函数说明如下:<br> Declare Function SendMessage Lib "user32" Alias "SendMessageA" (Byval hwnd As Long, Byval wMsg As Long,Byval wParam As Long,lParam As Any) As Long<br> 其中四个自变量的含义和说明如下:<br> hWnd:对象的句柄。希望将消息传送给哪个对象,就把该对象的句柄作为实参传送,在VB中可以简单地用“对象.hWnd”获得某个对象的句柄,如Text1.hWnd和Form1.hWnd分别可以得到Text1和Form1的句柄。<br> wMsg:被发送的消息。根据具体需求和不同的对象,将不同的消息作为实参传送,以产生预期的动作。<br> wParam、lParam:附加的消息信息。这两个是可选的参数,用来提供关于wMsg消息更多的信息,不同的wMsg可能使用这两个参数中的0、1或2个,如果不需要哪个附加参数,则将实参赋为NULL(在VB中赋为0)。<br> 在简单了解了SendMessage函数的格式和功能后,让我们以几个例子来看看它的威力。<br> 二、SendMessage函数使用实例<br> 例1  多行TextBox中的快速处理功能在处理多行TextBox时我们经常会碰到以下几种情况:<br>    希望了解多行TextBox中目前共有多少行文字。<br>    想快速返回第N行的文字。<br>    对于上面的情况,如果用VB自身的语句或函数来实现的话,要写不短的代码,而且由于要采用顺序查找的办法来完成,因此代码的执行效率也很低。如果使用SendMessage函数则可以大大减少代码量,并大幅度的提高执行效率。<br>    用SendMessage函数完成上面两个任务的方法非常简单,每个任务只需简单地发送一条消息给多行TextBox即可,两个消息分别为:EM_GETLINECOUNT、EM_GETLINE,其它参数和返回值见附表。<br>    下面用一个简单的实例演示这两个功能:<br> 新建工程,在Form1上添加三个TextBox(名称分别为Text1、txtLineCount、TxtString,将Text1的Multi<br> Line属性置为True)、三个标签和一个命令按钮。为工程添加一个模块Moudle1,在其中写如下声明(其中<br> SendMessage函数的声明可以从VB的“API浏览器”中复制): 消息常量名 消息值 wParam lParam 返回值 <br> EM_GETLINECOUNT &HBA 未用 未用 行数 <br> EM_GETLINE &HC4 要找的行号 存结果的字节串 结果字节串的字节数 <br> <br> Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long,lParam As Any) As Long<br> Public Const EM_GETLINECOUNT=&HBA<br> Public Const EM_GETLINE=&HC4<br> 在Form1的代码模块中写如下代码:<br>     Private Sub Command1_Click()<br>     Dim str(256) As Byte<br>     str(1)=1 '最大允许存放256个字符<br>     '获取总行数,结果显示在文本框txtLineCount中<br>     txtlineCount=SendMessage(Text1.hwnd,EM_GETLINECOUNT,0,0)<br>     '获取第3行的数据放在str中,转换为字符串后显示在文本框txtString中<br>     SendMessage Text1.hwnd,EM_GETLINE,2,str(0)<br>     txtString= StrConv(str,vbUnicode)<br> End Sub<br>    之后,按F5运行程序,在多行文本框中随便键入几行文字,然后按下[确定]按钮,出现如图画面,说明程序正确统计出了总行数和第3行的文字。<br> 两点补充说明:在调用SendMessage获取第N行字符串时,lParam需要说明为字节数组,在调用完成后,再将字节数组转换为字符串;另外,调用前必须在lParam的前两个字节指明允许存放的最大长度,其中第一个字节为低位,第二个字节为高位,本例将高位(即str(1))置1.说明最大允许存放256个字符。</内容>
</数据>
- <数据>
<名称>功能强大的SendMessage函数中</名称>
<类别>VB文件</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:14:10</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>SendMessag</关键字1>
<关键字2>函数</关键字2>
<关键字3>API</关键字3>
<内容简介 />
<内容>例2  程序控制拉下或收起组合框的下拉列来<br>    一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。<br>    在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),lParam无用(设为0)。<br>    为说明具体的使用方法,下面提供简单的程序片段。首先在代码模块中做如下声明:<br> Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long<br> Const CB_SHOWDROPDOWN=&H14F<br>    当程序中某处需要拉下组合框Combol的列表时,写如下调用语句:<br> SendMessage Combol.hwnd,CB_SHOWDROPDOWN,True,0<br>    当需要收起组合框Combol的列表时,写如下语句:<br> SendMessage Combol.hwnd,CB_SHOWDROPDOWNN,False,0<br> 例3  在列表框中查找匹配的项目<br>    在Win95风格的帮助系统中一般都有一个“索引”页,索引页含有一个文本框和一个列表框,当用户在文本框中输入文字时,下拉列表会动态地显示与文本框中文字最匹配的项目,为用户提供了最大的方便。这种效果在应用程序的帮助系统中很容易实现(只要按照Win95帮助系统的正常制作过程制作就可以实现),如果想在应用程序的其它地方实现这种特性就需费一番心思了。<br>    而使用SendMessage函数实现上述特性则非常简单,甚至只需一条语句就足够了,那就是在文本框的Change事件中给列表框发一条LB_FINDSTRING(&H18F)消息,该消息告诉列表框在列表中查找匹配的项目。<br>    在发LB_FINDSTRING消息时,wParam参数代表从列表框的哪一个项目后面开始查找,一般情况下该参数可定为-1,表示从List1(0)即第一项开始向后循环查找,lParam则传进欲搜索的字符串(必须采用值传递)。<br>    具体的代码和运行画面与后面的例4合并在一起演示。<br> 例4  为ListBox添加水平滚动条<br>    在VB中,列表框控件仅提供垂直滚动条,没有设置水平滚动条的能力,当某些项目的文本宽度较长时,超出列表框宽度部分的文本就无法显示出来,因此,很有必要为ListBox添加一个水平滚动条来方便操作。<br>    为添加水平滚动条,只需发一条LB_SETHORIZONTALEXTENT(&H194)消息给列表框即可。发送消息时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度,也可随便给一个大于最大文本宽度的数字,如本例的250),lParam无用。下面是例3和例4合并在一起的代码和运行画面<br> Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long<br> Public Const LB_FINDSTRING=&H18F<br> Public Const LB_SETHORIZONTALEXTENT=&H194<br> Private Sub Form_Load()<br> List1.AddItem "软件"<br> List1.AddItem "电脑游戏"<br> List1.AddItem "电视机"<br> List1.AddItem "电视台"<br> List1.AddItem "电脑"<br> List1.AddItem "电脑游戏软件"<br> '下一句为列表框添加水平滚动条<br> SendMessage List1.hwnd,LB_SETHORIZONTALEXTENT,250,0<br> End Sub<br> Private Sub Text1_Change()<br> '注意!当lParam传入的是字符串时,必须用ByVal传递<br> List1.ListIndex = SendMessage(List1.hwnd,LB_FINDSTRING,-1,ByVal Text1.Text)<br> End Sub<br> 通过上面几个例子,想必您已经对SendMessage函数的强大功能有了初步的了解。事实上利用该函数我们还可以完成更多更好的任务,如控制文本框的自动滚屏、实现文字编辑过程中的Undo功能、操纵应用程序的窗体控制菜单等等,感兴趣的读者请参阅有关Windows API的资料。<br> 本文程序均用Visual Basic 5.0企业版编写,在Pwin95环境下运行正常。</内容>
</数据>
- <数据>
<名称>设置树型列表控件的背景颜色标题行高度</名称>
<类别>界面</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:18:52</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>树型控件</关键字1>
<关键字2>背景颜色</关键字2>
<关键字3>标题行高度</关键字3>
<内容简介 />
<内容>首先做如下的定义:<br> Private Declare Function SendMessage Lib "user32" Alias "Send MessageA" (ByVal hwnd As Long,ByVal wMsg As Long, ByVal wParam As Long,ByVal lParam As Long) As Long<br> Const TV-FIRST = &H1100<br> Const TVM-SETBKCOLOR = TV_FIRST + 29<br> 然后再作如下调用:<br> Call SendMessage(TreeView1.hwnd, TVM-SETBKCOLOR, 0, RGB(255, 0, 0))<br> 上面的SendMessage调用将TreeView1的背景颜色设置为红色。<br> 大家可能注意到了。在上面的Sendmessage函数定义中,我们将lParam定义为 ByVal lParam As Long,而不是象前面的那些范例那样定义为Any或者String类型,关于这个问题,我会在最后的一章中做介绍。<br> 2、设置树型列表控件标题行高度<br> 利用TVM_SETITEMHEIGHT消息可以设定控件的标题行的高度,该消息的定义及调用方法如下:<br> 定义:<br> Const TV_FIRST = &H1100<br> Const TVM-SETITEMHEIGHT = TV_FIRST + 27<br> Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long<br> 调用:<br> CallSendMessage(TreeView1.hwnd, TVM-SETITEMHEIGHT, 60, 0)<br> 上面的代码将TreeView1的标题行高度设置到60像素高</内容>
</数据>
- <数据>
<名称>为树型列表控件中不同标题行设置不同提示</名称>
<类别>界面</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:19:00</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>树型控件</关键字1>
<关键字2>标题行</关键字2>
<关键字3>提示</关键字3>
<内容简介 />
<内容>在第一期的ListBox控件介绍中,我向大家介绍了如何为列表中的每一个标题行设置不同的提示(ToolTips),在这里为要向大家介绍如何为树型列表控件中的每一个标题设置不同的提示。<br> 同ListBox控件不通,树型列表控件中并没有根据光标位置获得标题行索引的消息,我们需要另外想办法。在TVM类消息中有一个TVM_HITTEST消息,发送该消息可以检测控件表面上的某一点,如果该点位于一个标题上,则返回该标题的句柄。而利用TVM_GETITEM消息,则可以根据标题句柄返回该标题行的文本。所以结合利用这两个消息可以获取光标所在标题行的标题文本。具体的范例代码如下:<br> Option Explicit Private Type TPoint<br> x As Long<br> y As Long<br> End Type<br> Private Type TVHITTESTINFO<br> pt As TPoint<br> flags As Long<br> hItem As Long<br> End Type<br> Private Type TVITEM<br> mask As Long<br> HTreeItem As Long<br> state As Long<br> stateMask As Long<br> pszText As Long<br> cchTextMax As Long<br> iImage As Long<br> iSelectedImage As Long<br> cChildren As Long<br> lParam As Long<br> End Type<br> Const TV-FIRST = &H1100<br> Const TVM_HITTEST = TV-FIRST + 17<br> Const TVM_GETITEM = TV-FIRST + 12<br> Const TVHT-ONITEMLABEL = &H4<br> Const TVIF-TEXT = &H1<br> Const GMEM-FIXED = &H0<br> Private Declare Function Send MessageRef Lib"user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long<br> Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As String,ByVal Source As Long,ByVal Length As Long)<br> Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long<br> Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long<br> Dim hItemPrv As Long<br> Private Sub Form_Load()<br> Dim ndX As Node<br> `加入若干Item<br> Set ndX = TreeView1.Nodes.Add(, , "R", "Root")<br> Set ndX = TreeView1.Nodes.Add("R", tvwChild, "Key1", "Node1")<br> Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey1", "SubNode1")<br> Set ndX = TreeView1.Nodes.Add("SubKey1", tvwChild, "SubKeys1", "SubNode1")<br> Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey2", "SubNode2")<br> Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey3", "SubNode3")<br> Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey4", "SubNode4")<br> End Sub<br> Private Sub TreeView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) <br> Dim ptA As TPoint<br> Dim tf As TVHITTESTINFO<br> Dim tv As TVITEM<br> Dim hStr As Long<br> Dim hItem As Long<br> Dim astr As String * 1024<br> Dim bstr<br> On Error GoTo errLab<br> `获得当前光标所在的位置坐标<br> ptA.x = Int(x / Screen.TwipsPerPixelX)<br> ptA.y = Int(y / Screen.TwipsPerPixelY)<br> tf.pt = ptA<br> tf.flags = TVHT_ONITEMLABEL<br> `获得光标所在的Item的句柄<br> hItem = SendMessageRef(TreeView1.hwnd, TVM_HITTEST, 0, tf)<br> `如果未获得句柄或者同上一次是同一个Item的句柄则退出<br> If ((hItem <= 0) Or (hItem = hItemPrv)) Then Exit Sub<br> hItemPrv = hItem<br> `分配一定的内存空间用以存储Item的标题<br> hStr = GlobalAlloc(GMEM-FIXED, 1024)<br> If hStr > 0 Then<br> tv.mask = TVIF_TEXT <br> `获取标题文本<br> tv.HTreeItem = hItem<br> `Item句柄<br> tv.pszText = hStr<br> tv.cchTextMax = 1023<br> `发送TVM_GETITEM获得标题文本<br> CallSendMessageRef(TreeView1.hwnd, TVM-GETITEM, 0, tv)<br> `将标题文本拷贝到字符串astr中<br> CopyMemory astr, hStr, 1024<br> bstr = Left$(astr, (InStr(astr, Chr(0)) - 1))<br> TreeView1.ToolTipText = bstr<br> `释放分配的内存空间<br> GlobalFree hStr<br> End If<br> Exit Sub<br> errLab:<br> Resume Next<br> End Sub<br> 运行上面的程序,当光标在TreeView1上面移动时,TreeView1的ToolTips就会根据光标所在的不同标题行而变动。<br> 以上程序在Win98、Win2000,VB6下运行通过</内容>
</数据>






泪了,睡觉!
shawls 2002-01-11
  • 打赏
  • 举报
回复




<数据>
<名称>实现网络连通检测</名称>
<类别>网络</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:22:10</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>网络</关键字1>
<关键字2>连通</关键字2>
<关键字3>监测</关键字3>
<内容简介>下面是实现网络连通检测的VB 6代码: </内容简介>
<内容>Private Sub Form_Load() <br> If IsConnected = TRUE Then <br> MsgBox (“您已经连通了Internet!”) <br> End If <br> If IsConnected = FALSE Then <br> MsgBox (“您还没有连通 Internet!”) <br> End If <br> End Sub <br>   <br> Option Explicit <br> /*有关的API声明和定义*/ <br> Public Declare Function RasEnumConnections Lib “RasApi32.dll” Alias “RasEnumConnectionsA” (lpRasCon As Any, lpcb As Long, lpcConnections As Long) As Long <br>   <br> Public Declare Function RasGetConnectStatus Lib “RasApi32.dll” Alias “RasGetConnectStatusA” (ByVal hRasCon As Long, lpStatus As Any) As Long <br>   <br> /*常数和变量的设定*/ <br> Public Const RAS95_MaxEntryName = 256 <br> Public Const RAS95_MaxDeviceType = 16 <br> Public Const RAS95_MaxDeviceName = 32 <br> Public Type RASCONN95 <br> dwSize As Long <br> hRasCon As Long <br> szEntryName(RAS95_MaxEntryName) As Byte <br> szDeviceType(RAS95_MaxDeviceType) As Byte <br> szDeviceName(RAS95_MaxDeviceName) As Byte <br> End Type <br> Public Type RASCONNSTATUS95 <br> dwSize As Long <br> RasConnState As Long <br> dwError As Long <br> szDeviceType(RAS95_MaxDeviceType) As Byte <br> szDeviceName(RAS95_MaxDeviceName) As Byte <br> End Type <br>   <br> /*函数IsConnected返回连通的状态,如果为True则表示已连通*/ <br> Public Function IsConnected() As Boolean <br> Dim TRasCon(255) As RASCONN95 <br> Dim lg As Long <br> Dim lpcon As Long <br> Dim RetVal As Long <br> Dim Tstatus As RASCONNSTATUS95 <br> TRasCon(0).dwSize = 412 <br> lg = 256 * TRasCon(0).dwSize <br> RetVal = RasEnumConnections(TRasCon(0), lg, lpcon) <br> If RetVal <> 0 Then <br> MsgBox “错误” <br> Exit Function <br> End If <br> Tstatus.dwSize = 160 <br> RetVal = RasGetConnectStatus(TRasCon(0) <br> .hRasCon,Tstatus) <br> If Tstatus.RasConnState = &H2000 Then <br> IsConnected = TRUE <br> Else <br> IsConnected = FALSE <br> End If <br> End Function</内容>
</数据>
- <数据>
<名称>启动拨号网络中的连接</名称>
<类别>网络</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:22:57</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>拨号网络</关键字1>
<关键字2>连接</关键字2>
<关键字3>NULL</关键字3>
<内容简介>NULL</内容简介>
<内容>由于拨号网络不是一个可执行文件, 所以要启动拨号网络,需要借助 explorer.exe 。但若是要启动拨号网络中的某一个连接,则要借助rundll.exe 和 rnaui.dll两个文件。启动方法如下(假定此连接名称为163): <br> Shell “rundll rnaui.dll,RnaDial 163”,vbNormalFocus <br> 上面假定了连接名称,但在实际编程中我们是不知道连接名称的。在窗体上放置一个命令按钮(cmdCallConnect),在其单击事件中进行连接处理。下面的代码介绍如何取得默认的连接名称并启动它: <br> Option Explicit <br> /*有关的API声明*/ <br> Private Declare Function RegOpenKeyEx Lib “advapi32” Alias “RegOpenKeyExA” (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long <br>   <br> Private Declare Function RegQueryValueEx Lib “advapi32” Alias “RegQueryValueExA” (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long <br>   <br> Private Declare Function RegCloseKey Lib “advapi32”(ByVal hKey As Long) As Long <br>   <br> /*常数的设定*/ <br> Const HKEY_CURRENT_USER = &H80000001 <br> Const ERROR_SUCCESS = 0 <br> 在命令按钮(cmdCallConnect)中加入如下代码: <br> Private Sub cmdCallConnect_Click() <br> /*启动默认拨号连接*/ <br> Shell “rundll rnaui.dll,RnaDial” + GetConnect, vbNormalFocus <br> End Sub <br>   <br> /*取得连接的函数(GetConnect)*/ <br> Public Function GetConnect() As String <br> Dim hKey As Long <br> Dim SubKey As String <br> /*主键*/ <br> hKey = HKEY_CURRENT_USER <br> /*子键*/ <br> SubKey = “RemoteAccess” <br> /*取得默认连接名*/ <br> GetConnect=GetRegValue(hKey,SubKey, “Default”) <br> End Function <br> /*取得注册的函数(GetRegValue)*/ <br> Public Function GetRegValue(hKey As Long,lpszSubKey As String,szKey As String) As Variant <br> On Error GoTo ErrorRoutineErr: <br> Dim phkResult As Long <br> Dim lResult As Long <br> Dim szBuffer As String <br> Dim lBuffSize As Long <br> /*创建缓冲区*/ <br> szBuffer = Space(255) <br> lBuffSize = Len(szBuffer) <br> /*打开注册键*/ <br> RegOpenKeyEx hKey, lpszSubKey, 0, 1,phkResult <br> /*取得查询结果*/ <br> lResult = RegQueryValueEx(phkResult, szKey, 0, 0, szBuffer, lBuffSize) <br> /*关闭注册键*/ <br> RegCloseKey phkResult <br> /*返回结果*/ <br> If lResult = ERROR_SUCCESS Then <br> GetRegValue = Left(szBuffer, lBuffSize - 1) <br> Else <br> GetRegValue =“” <br> End If <br> Exit Function <br> /*意外处理*/ <br> ErrorRoutineErr: <br> GetRegValue =“” <br> End Function</内容>
</数据>
- <数据>
<名称>设计E-mail的接发送收部分</名称>
<类别>网络</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:25:41</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>Email</关键字1>
<关键字2>接收</关键字2>
<关键字3>发送</关键字3>
<内容简介 />
<内容>设计E-mail的接收部分 <br> 在VB 6菜单上点击“工程/部件...”,弹出“部件”对话框,在对话框的控件卡中选中Microsoft MAPI Controls 6.0控件,点击“确定”按钮后,工具箱上增加了MAPIMessage和MAPISession两个图标。 <br> 在Form上加入一个MAPIMessage控件,取名为MAPIMessage1;再加入一个MAPISession控件,取名为MAPISession1;再加入三个TextBox控件,分别取名为Subject、Content和Indexno, 将它们的Caption分别改为邮件标题、邮件内容和邮件索引号;在TextBox前各加入一个Label控件,将Caption分别改为标题、内容和索引号。 <br> 将MAPIMessage1的各项属性设置如下: <br> ●DownLoadMail=TRUE; <br> ●LogonUI=TRUE; <br> ●NewSession=FALSE; <br> ●UserName=“接收Email”。 <br> 在Form上加入一个按钮(Getmail),将其Caption改为取邮件。 <br> 在 Getmail_Click()事件中加入以下程序代码,程序的功能是使我们接收Email。 <br> MAPIMessage1.Fetch <br> Form1.Caption=MAPIMessage1.MsgCount <br> MAPIMessage1.MsgIndex=CINT(Indexno.text) <br> Subject.Text = MAPIMessage1.MsgNoteText <br> Content.Text = MAPIMessage1.MsgSubject <br> 其中Fetch命令用来将信件抓到系统存储器的inbuffer中。我们将信件抓回来后,可以通过MsgCount属性知道信件数量,接着可以用MsgIndex设置要看哪一封信件的内容、标题等。 <br> 设计E-mail的发送部分 <br> 1.参数设置 <br> 进入Exchange系统,选择新增设置文件后屏幕上会显示所需要的信息服务,选择Internet Mail。 <br> 把设置文件的名称设为test。屏幕会显示两个选项,您可以选择以Modem方式或以Network 方式连接。笔者所用的是Modem方式;假若您是使Internet专线,就要选择Network 方式。 <br> 选择Modem方式后,Exchange会要求我们输入邮件服务器的IP地址。接着将Transform Message的模式设置为Automatic,这样当我们连接到邮件服务器时,新的信息会自动下载到本地端。接下来,将您所使用的Email地址、全名、口令和下载路径等一一设置好。 <br> 2.程序设计 <br> 在Form上加入一个MAPIMessage控件,取名为MAPIMessage1;加入一个MAPISession控件,取名为MAPISession1;并加入三个TextBox控件,取名为Subject、Content和Addr。并在三个TextBox前各加入一个Label,将Caption分别改为标题、内容和地址。 <br> 将MAPIMessage1的各项属性设置如下: <br> ●DownLoadMail=TRUE; <br> ●LogonUI=TRUE; <br> ●NewSession=FALSE; <br> ●UserName=“发送Email”。 <br> 这里将DownLoadMail设置为TRUE,当程序和邮件服务器第一次连接时,会将新的邮件下载到本地端。将LogonUI设置为TRUE,则当您程序中Logon名称输入错误时,系统会显示一个Message Box来让您输入正确的名称。 <br> 由于这个程序仅使用一个Session,所以可将NewSession设置成FALSE。如果您有许多Session要建立的话,则将它设置成TRUE。UserName中所填的,是我们在Exchange中所新增的设置文件名称,如果没有填内容的话,系统将会显示一些Message Box请您输入文件。 <br> 在Form上加入三个按钮,Logon、Logoff和Send,并分别将它们的Caption改为登录、离网和发送。 <br> 在 Logon_Click()事件中加入以下程序代码,程序的功能是使我们登录到邮件服务器: <br> MAPISession1.SignOn <br> MAPIMessage1.SessionID=MAPISession1.SessionID <br> sgBox “Your ID is” + Str <br> (MAPISession1.SessionID) <br> 其中MAPISession1.SignOn是作登录的动作。在登录时,因为已经将MAPIMessage1控件的DownLoadMail属性设置为TRUE,所以可以在屏幕上看到Message Box,显示系统正在下载邮件。登录成功后,系统会传回一个SessionID,将该ID填入MAPIMessage1的SessionID中,这样就可以利用该Session来传送Email,同时用Message Box通知用户发送成功。 <br> 在Logoff_Click()事件中加入以下程序代码,程序的功能是使我们离开邮件服务器: <br> MAPIS1.SignOff <br> 在Send_Click()事件中加入以下程序代码,程序的功能是使我们发送Email: <br> MAPIMessage1.Compose <br> MAPIMessage1.RecipDisplayName = Addr.text <br> MAPIMessage1.AddressResolveUI = TRUE <br> MAPIMessage1.MsgSubject = Subject.text <br> MAPIMessage1.MsgNoteText = Content.text <br> MAPIMessage1.Send <br> MsgBox “您发送成功啦!” <br> 其中Compose命令的主要目的是使您可以改变RecipDisplayName的内容,将所需传送的Email地址、主题和文章内容分别填入RecipDisplayName、MsgSubject和MsgNoteText,接着用Send命令发送出去。</内容>
</数据>
- <数据>
<名称>访问因特网并调用Explorer </名称>
<类别>网络</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:24:57</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>访问</关键字1>
<关键字2>因特网</关键字2>
<关键字3>Explorer</关键字3>
<内容简介>访问Internet并调用Explorer</内容简介>
<内容>1.实现方法和控件介绍 <br>   首先在VB 6菜单上点击“工程/部件...”,弹出“部件”对话框,在对话框的控件卡中选中Microsoft Internet Controls控件,点击“确定”按钮后工具箱上增加一个WebBrowser图标,将它加到Form中。 <br> 该控件有以下几个重要的方法和事件: <br> ●GoHome:装入IE设定的起始页; <br> ●Navigate:装入页面,如Object.Navigate url,其中url为URL地址,如http://www.microsoft.com; <br> ●GoBack:返回上一个页面; <br> ●GoForward:进入下一个页面; <br> ●Stop:停止载入页面; <br> ●BeforeNavigate Event:在每次装入页面前调用该事件; <br> ●StatusTextChange Event:每次浏览器的操作状态改变时调用该事件。 <br> 2.具体的访问方法 <br> 将WebBrowser图标添加到Form中。并在Form上添加4个命令按钮,Name属性分别为:GoButton、BackButton、ForwardButton和StopButton,通过这4个命令按钮可以实现对浏览器的操作。在Form上添加一个TextBox控件,用来输入和显示当前的页面地址。在Form上添加一个Label控件,用来显示当前浏览器操作状态。 <br> /*载入Form*/ <br> Private Sub Form_Load() <br> /*程序装入后进入IE设定的起始页*/ <br> WebBrowser1.GoHome <br> End Sub <br>   <br> /*改变Form尺寸*/ <br> Private Sub Form_Resize() <br> /*改变窗口大小后同时改变控件的大小*/ <br> WebBrowser1.Width = Form1.ScaleWidth <br> WebBrowser1.Height = Form1.ScaleHeight - 900 <br> Label1.Width = Form1.ScaleWidth <br> Label1.Top = Form1.ScaleHeight - 300 <br> End Sub <br>   <br> Private Sub BackButton_Click() <br> /*返回上一个页面*/ <br> WebBrowser1.GoBack <br> End Sub <br>   <br> Private Sub ForwardButton_Click() <br> /*进入下一个页面*/ <br> WebBrowser1.GoForward <br> End Sub <br>   <br> Private Sub GoButton_Click() <br> /*浏览输入的页面*/ <br> WebBrowser1.Navigate (Text1.Text) <br> End Sub <br>   <br> Private Sub StopButton_Click() <br> /*停止浏览*/ <br> WebBrowser1.Stop <br> End Sub <br>   <br> Private Sub Text1_KeyPress(KeyAscii As Integer) <br> /*输入地址后进行浏览*/ <br> If KeyAscii = 13 Then <br> WebBrowser1.Navigate (Text1.Text) <br> End If <br> End Sub <br>   <br> Private Sub WebBrowser1_BeforeNavigate(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Cancel As Boolean) <br> /*将当前显示的页面的URL地址显示在Text1上*/ Text1.Text = URL <br> End Sub <br>   <br> Private Sub WebBrowser1_StatusTextChange(ByVal Text As String) <br> /*Label1显示当前页面装入情况*/ <br> Label1.Caption = Text <br> End Sub</内容>
</数据>
- <数据>
<名称>禁止在TextBox中输入</名称>
<类别>VB文件</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:29:59</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>TextBox</关键字1>
<关键字2>输入</关键字2>
<关键字3>禁止</关键字3>
<内容简介>NULL</内容简介>
<内容>禁止在TextBox中输入<br> 作者:土人 <br> 方法一:(有光标闪烁,输入、删除等操作无效)<br> <br> Text1.Locked = True<br> <br> 方法二:(无光标闪烁,不能输入、删除,界面变色、文字反白)<br> <br> Text1.Enabled = False<br> <br> 方法三:(有光标闪烁,可删除,不能输入)<br> <br> 此法用两个API函数,略为复杂些。请在标准工程添加两个按钮和一个文本框:<br> <br> Option Explicit<br> <br> Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long<br> Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long<br> <br> Const GWL_STYLE = (-16)<br> Const ES_NUMBER = &H2000&<br> <br> Public Sub SetNumber(NumberText As TextBox, Flag As Boolean)<br> <br> Dim CurrentStyle As Long, NewStyle As Long<br> '返回正常样式<br> CurrentStyle = GetWindowLong(NumberText.hwnd, GWL_STYLE)<br> <br> If Flag Then<br> CurrentStyle = CurrentStyle Or ES_NUMBER<br> Else<br> CurrentStyle = CurrentStyle And (Not ES_NUMBER)<br> End If<br> <br> '设置新样式<br> NewStyle = SetWindowLong(NumberText.hwnd, GWL_STYLE, CurrentStyle)<br> NumberText.Refresh '刷新<br> End Sub<br> <br> Private Sub Command1_Click()<br> SetNumber Text1, True<br> Text1.SetFocus<br> End Sub<br> <br> Private Sub Command2_Click()<br> SetNumber Text1, False<br> Text1.SetFocus<br> End Sub<br> <br> Private Sub Form_Load()<br> Command1.Caption = "禁止输入"<br> Command2.Caption = "可以输入"<br> End Sub</内容>
</数据>
- <数据>
<名称>在VB应用程序中巧用DLL上</名称>
<类别>VBDll</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:31:32</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>应用程序</关键字1>
<关键字2>DLL</关键字2>
<关键字3>NULL</关键字3>
<内容简介>NULL</内容简介>
<内容>在使用VB开发多媒体应用程序时,如何合理地存放大量的多媒体资源,是一件十分棘手的事。如果将资源以文件形式存放在磁(光)盘上,使用时再从盘上读取,势必大大影响资源调用的速度。如果将资源直接编译在应用程序的可执行文件中,虽然可以获得令人满意的资源存取速度,但会导致最终的可执行文件尺寸大大膨胀。如何解决这个矛盾呢?笔者从Windows动态链接库的原理中得到启发,找到了一个结合二者优势的解决方法。<br> 动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文件,我们将这类动态库称之为资源动态链接库。制作资源动态库的方法很多,笔者在此提供了一种无需编程、简单有效的方法。该方法利用了Borland C++的资源管理器Resource Workshop的反编译能力,借用现成的动态库,将其改制为自己的资源动态库。具体方法是,拷贝一个现成的资源动态库文件(如windows\system目录下的字体资源文件arial.fot)到应用程序工作目录,更改文件名,如改为DEMO.DLL。然后在Resource Workshop中打开该文件,选择其中原有的资源将其删除,再加入自己的资源,即可制成自己的资源动态库。由于篇幅所限,具体操作过程请读者参阅有关资料。不过有两个关键问题需要提请读者注意,其一,对于声音这类非Windows传统资源,在加入动态库之前,需要用户自定义一个资源类型以存放这类资源,如笔者在DEMO.DLL中为Windows音频文件定义了WAVE资源类型;其二,动态库中每一个资源的资源名十分重要,它是调用资源的关键,建议用户最好在加入资源后为其定义一个有意义的资源名。<br> 通过上面介绍的资源动态库的简单制作方法,即使不熟悉C语言的读者也可以轻松地制作自己的资源动态库了。现在,让我们来看看如何在VB多媒体应用程序中调用资源动态库中的资源。VB本身并没有调用动态库的函数和语句,因此必须借助于Windows API函数。下面笔者将结合一个实例,具体介绍调用方法。实例中使用的是笔者通过上述方法制作的资源动态库DEMO.DLL,其中包含两个BITMAP(.bmp)类型资源B1和B2,两个WAVE(.wav)类型资源S1和S2。<br> 首先,新建一个VB工程,其中包含一个窗体Form1和一个模块Module1。在窗体Form1中加入了一个图片框控件Picture1和四个命令按钮控件,Picture1用于显示动态库中的位图资源,四个命令按钮的属性设置和功能含义如下表:<br> 属性 功能<br> Name Index Caption <br> cmdBitmap 0 BitmapA 在Picture1中显示DEMO.DLL中资源名为B1的位图资源<br> cmdBitmap 1 BitmapB 在Picture1中显示DEMO.DLL中资源名为B2的位图资源<br> cmdSound 0 SoundA 播放DEMO.DLL中资源名为S1的声音资源<br> cmdSound 1 SoundB 播放DEMO.DLL中资源名为S2的声音资源<br> 接着在Module1和Form1中加入下列代码,便可完成实例程序:<br> ※Moudle1.bas清单<br> '声明API函数<br> Declare Function LoadLibrary% Lib "Kernel" (ByVal lpLibFileName$)<br> Declare Sub FreeLibrary Lib "Kernel" (ByVal hLibModule%)<br> Declare Function LoadBitmap% Lib "User" (ByVal hInstance%, ByVal lpBitmapName As Any)<br> Declare Function GetObj% Lib "GDI" Alias "GetObject" (ByVal hObject%, ByVal nCount%, lpObject As Any)<br> Declare Function CreateCompatibleDC% Lib "GDI" (ByVal hDC%)<br> Declare Function SelectObject% Lib "GDI" (ByVal hDC%, ByVal hObject%)<br> Declare Function BitBlt% Lib "GDI" (ByVal hDestDC%, ByVal x%, ByVal y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%, ByVal dwRop&)<br> Declare Function DeleteDC% Lib "GDI" (ByVal hDC%)<br> Declare Function DeleteObject% Lib "GDI" (ByVal hObject%)<br> Declare Function FindResource% Lib "Kernel" (ByVal hInstance%, ByVal lpName$, ByVal lpType As Any)<br> Declare Function LockResource& Lib "Kernel" (ByVal hResData%)<br> Declare Function LoadResource% Lib "Kernel" (ByVal hInstance%, ByVal hResInfo%)<br> Declare Function GlobalUnlock% Lib "Kernel" (ByVal hMem%)<br> Declare Function sndPlaySound% Lib "MMSYSTEM" (ByVal lpszSoundName As Any, ByVal uFlags%)<br> '位图数据结构类型<br> Type BITMAP<br> bmType As Integer<br> bmWidth As Integer<br> bmHeight As Integer<br> bmWidthBytes As Integer<br> bmPlanes As String * 1<br> bmBitsPixel As String * 1<br> bmBits As Long<br> End Type<br> '光栅操作代码常量<br> Public Const SRCCOPY = &HCC0020<br> '声音播放状态常量<br> Public Const SND_SYNC = &H0<br> Public Const SND_MEMORY = &H4</内容>
</数据>
- <数据>
<名称>在VB应用程序中巧用DLL下</名称>
<类别>VBDll</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 15:31:41</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>应用程序</关键字1>
<关键字2>DLL</关键字2>
<关键字3>NULL</关键字3>
<内容简介>NULL</内容简介>
<内容>'调用位图资源子例程<br> Sub load_pic(picName As String)<br> Dim hDLL As Integer<br> Dim hdcMemory, hLoadedbitmap, hOldBitmap As Integer<br> Dim retVal As Integer<br> Dim bmpInfo As BITMAP<br> '安装动态链接库DEMO.DLL<br> hDLL = LoadLibrary(App.Path & "\DEMO.DLL")<br> '根据资源名从动态链接库中加载相应的位图资源<br> hLoadedbitmap = LoadBitmap(hDLL, picName)<br> '获取位图信息<br> retVal = GetObj(hLoadedbitmap, Len(bmpInfo), bmpInfo)<br> '创建一个与图片框控件的设备描述表兼容的内存设备描述表<br> hdcMemory = CreateCompatibleDC(Form1.Picture1.hDC)<br> '将位图选入内存设备描述表<br> hOldBitmap = SelectObject(hdcMemory, hLoadedbitmap)<br> '将位图从内存设备描述表中拷入图片框控件的设备描述表中<br> retVal = BitBlt(Form1.Picture1.hDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, hdcMemory, 0, 0, SRCCOPY)<br> '将原始位图选入内存设备描述表<br> retVal = SelectObject(hdcMemory, hOldBitmap)<br> '删除加载的位图,释放其占用的所有系统资源<br> retVal = DeleteObject(hLoadedbitmap)<br> '删除内存设备描述表<br> retVal = DeleteDC(hdcMemory)<br> '释放动态链接库<br> FreeLibrary (hDLL)<br> End Sub<br> '调用声音资源子例程<br> Sub load_sound(wavName As String)<br> Dim hDLL As Integer<br> Dim hloadwave As Integer<br> Dim hwaveres As Integer<br> Dim hsound As Long<br> Dim hrelease As Integer<br> Dim resVal As Integer<br> hDLL = LoadLibrary(App.Path & "\DEMO.DLL")<br> '在动态链接库中查找资源类型为WAVE,资源名为wavName的资源<br> hwaveres = FindResource(hDLL, wavName, "WAVE")<br> '将该资源装入内存<br> hloadwave = LoadResource(hDLL, hwaveres)<br> '锁定该资源<br> hsound = LockResource(hloadwave)<br> '以同步方式播放内存中的声音资源<br> resVal = sndPlaySound(hsound, SND_SYNC + SND_MEMORY)<br> '释放该资源占用的内存<br> hrelease = GlobalUnlock(hloadwave)<br> FreeLibrary (hDLL)<br> End Sub<br> <br> ※FORM1.FRM代码清单<br> Private Sub cmdBitmap_Click(Index As Integer)<br> Picture1.Picture = LoadPicture("") '清空图片框控件<br> Select Case Index<br> Case 0<br> load_pic ("B1")<br> Case 1<br> load_pic ("B2")<br> End Select<br> End Sub<br> Private Sub cmdSound_Click(Index As Integer)<br> Select Case Index<br> Case 0<br> load_sound ("S1")<br> Case 1<br> load_sound ("S2")<br> End Select<br> End Sub<br> 本实例程序已在Windows 3.X环境下通过测试。程序中的某些参数设置与特定需求(如资源动态库的内容等)有关,读者在开发实际应用时应做相应的改动。</内容>
</数据>
- <数据>
<名称>判断某一个连接是否保存在Cache中上</名称>
<类别>网络</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:11:10</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>连接</关键字1>
<关键字2>Cache</关键字2>
<关键字3>保存</关键字3>
<内容简介>在使用Microsoft IE在网上冲浪时,IE会把你浏览过的网页保存在Cache中以便你可以脱机浏览。下面这个程序可以判断一个URL是否在浏览器的Cache中。 </内容简介>
<内容>判断某一个连接是否保存在Cache中 <br> <br> 在使用Microsoft IE在网上冲浪时,IE会把你浏览过的网页保存在Cache中以便你可以脱机浏览。下面这个程序可以判断一个URL是否在浏览器的Cache中。 <br> <br> 首先建立一个新的VB工程文件,在Form1中加入一个CommandButton控件和一个TextBox控件,然后在Form1的代码窗口中加入以下代码: <br> <br> <br> Option Explicit <br> <br> <br> Private Const ERROR_INSUFFICIENT_BUFFER = 122 <br> <br> Private Const eeErrorBase = 26720 <br> <br> <br> Private Type FILETIME <br> <br> dwLowDateTime As Long <br> <br> dwHighDateTime As Long <br> <br> End Type <br> <br> <br> Private Type INTERNET_CACHE_ENTRY_INFO <br> <br> dwStructSize As Long <br> <br> lpszSourceUrlName As String <br> <br> lpszLocalFileName As String <br> <br> CacheEntryType As String <br> <br> dwUseCount As Long <br> <br> dwHitRate As Long <br> <br> dwSizeLow As Long <br> <br> dwSizeHigh As Long <br> <br> LastModifiedTime As FILETIME <br> <br> ExpireTIme As FILETIME <br> <br> LastAccessTime As FILETIME <br> <br> LastSyncTime As FILETIME <br> <br> lpHeaderInfo As Long <br> <br> dwHeaderInfoSize As Long <br> <br> lpszFileExtension As String <br> <br> dwReserved As Long <br> <br> End Type <br> <br> <br> Private Declare Function GetUrlCacheEntryInfo Lib "wininet.dll" Alias _ <br> <br> "GetUrlCacheEntryInfoA" _ <br> <br> (ByVal sUrlName As String, _ <br> <br> lpCacheEntryInfo As Any, _ <br> <br> lpdwCacheEntryInfoBufferSize As Long _ <br> <br> ) As Long <br> <br> <br> Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100 <br> <br> Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000 <br> <br> Private Const FORMAT_MESSAGE_FROM_HMODULE = &H800 <br> <br> Private Const FORMAT_MESSAGE_FROM_STRING = &H400 <br> <br> Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000 <br> <br> Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200 <br> <br> Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF <br> <br> <br> Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" _ <br> <br> (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, _ <br> <br> ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As _ <br> <br> Long, Arguments As Long) As Long <br> <br> <br> Public Function WinAPIError(ByVal lLastDLLError As Long) As String <br> <br> Dim sBuff As String <br> <br> Dim lCount As Long <br> <br> <br> ’获取错误消息 <br> <br> sBuff = String$(256, 0) <br> <br> lCount = FormatMessage( _ <br> <br> FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, _ <br> <br> 0, lLastDLLError, 0&, sBuff, Len(sBuff), ByVal 0) <br> <br> If lCount Then <br> <br> WinAPIError = Left$(sBuff, lCount) <br> <br> End If <br> <br> End Function </内容>
</数据>
- <数据>
<名称>判断某一个连接是否保存在Cache中下</名称>
<类别>网络</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:11:17</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>连接</关键字1>
<关键字2>Cache</关键字2>
<关键字3>保存</关键字3>
<内容简介>在使用Microsoft IE在网上冲浪时,IE会把你浏览过的网页保存在Cache中以便你可以脱机浏览。下面这个程序可以判断一个URL是否在浏览器的Cache中。 </内容简介>
<内容>Public Function GetCacheEntryInfo(ByVal hWnd As Long, ByVal lpszUrl As String) As Boolean <br> <br> Dim dwEntrySize As Long <br> <br> Dim lpCacheEntry As INTERNET_CACHE_ENTRY_INFO <br> <br> Dim dwTemp As Long <br> <br> Dim lErr As Long <br> <br> <br> If (GetUrlCacheEntryInfo(lpszUrl, ByVal 0&, dwEntrySize)) = 0 Then <br> <br> lErr = Err.LastDllError <br> <br> If (lErr <> ERROR_INSUFFICIENT_BUFFER) Then <br> <br> ’URL没有在Cache中 <br> <br> Err.Raise eeErrorBase + 1, App.EXEName & ".mCacheEntry", WinAPIError(lErr) <br> <br> GetCacheEntryInfo = False <br> <br> Exit Function <br> <br> Else <br> <br> ’URL保存在Cache中 <br> <br> GetCacheEntryInfo = True <br> <br> End If <br> <br> End If <br> <br> End Function <br> <br> <br> Private Sub Command1_Click() <br> <br> On Error GoTo ErrorHandler <br> <br> If (GetCacheEntryInfo(Me.hWnd, Text1.Text)) Then <br> <br> MsgBox "URL 保存在Cache中.", vbInformation <br> <br> Else <br> <br> MsgBox "URL 没有保存在Cache中.", vbInformation <br> <br> End If <br> <br> <br> Exit Sub <br> <br> <br> ErrorHandler: <br> <br> MsgBox "URL 没有保存在Cache中 [" & Err.Description & "]", vbInformation <br> <br> End Sub <br> <br> <br> <br> Private Sub Form_Load() <br> <br> Form1.CurrentX = 150: Form1.CurrentY = 60 <br> <br> Form1.Print "在Text1中输入URL,按Command1检测" <br> <br> Text1.Text = "" <br> <br> Command1.Default = True <br> <br> End Sub <br> <br> <br> 运行程序,在TextBox中输入URL地址(例如http://member.netease.com/~blackcat),然后点击Command1 <br> <br> 按钮,如果URL在Cache中,程序会弹出消息框显示URL 保存在Cache中</内容>
</数据>



shawls 2002-01-11
  • 打赏
  • 举报
回复




继续贴:





<数据>
<名称>模拟Windows的资源回收站</名称>
<类别>系统</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:17:23</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>回收站</关键字1>
<关键字2>Win系统</关键字2>
<关键字3>模拟</关键字3>
<内容简介>NULL</内容简介>
<内容>您现在将屏幕上所有的视窗全部缩小,找到资源回收站,按鼠标右键,选择【属性】,便会出现【资源回收站】的属性问话框。<br> <br> <br> 其中有几个选项如下:<br> <br> 1、不要将文件移到资源回收站,删除时立即移除文件。<br> 2、显示删除确认对话框?<br> <br> 根据以上之状况,文件之删除有三种情形:<br> <br> 1、删除文件,出现确认对话框,文件移到资源回收站。<br> 2、删除文件,出现确认对话框,文件不移到资源回收站。<br> 3、删除文件,不出现确认对话框,文件也不移到资源回收站。<br> <br> 模拟程序如下:<br> <br> ′在模组的声明区中加入以下声明:<br> <br> Public Type SHFILEOPSTRUCT<br> hwnd As Long<br> wFunc As Long<br> pFrom As String<br> pTo As String<br> fFlags As Integer<br> fAnyOperationsAborted As Long<br> hNameMappings As Long<br> lpszProgressTitle As Long<br> End Type<br> <br> Public Declare Function SHFileOperation Lib "shell32.dll" Alias _<br> "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long<br> <br> Public Const FO_DELETE = &H3<br> Public Const FOF_ALLOWUNDO = &H40 ′可以还原<br> Public Const FOF_NOCONFIRMATION = &H10 ′不出现确认对话框<br> Public Const FOF_SILENT = &H4<br> <br> ′在程序中之使用方法如下: <br> ′以下之例子会出现确认对话框,文件也会移到资源回收站。<br> <br> Private Sub Command1_Click()<br> Dim SHop As SHFILEOPSTRUCT<br> Dim strFile As String ′要删除的文件(含全路径)<br> strFile = "c:\test.txt"<br> <br> With SHop<br> .wFunc = FO_DELETE<br> .pFrom = strFile<br> .fFlags = FOF_ALLOWUNDO<br> End With<br> <br> SHFileOperation SHop<br> End Sub<br> <br> ′若要调整,只要更改 fFlags 之值即可,如下:<br> .fFlags = FOF_SILENT ′删除文件,出现确认对话框,文件不移到资源回收站。<br> .fFlags = FOF_NOCONFIRMATION ′删除文件,不出现确认对话框,文件也不移到资源回收站。</内容>
</数据>
- <数据>
<名称>四角形以外其他形状的Form</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:18:39</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>Form</关键字1>
<关键字2>形状</关键字2>
<关键字3>四角形</关键字3>
<内容简介>NULL</内容简介>
<内容>这个问题,您一定无法想像有多容易,您可以产生任何形状的 Form,但必须借助 CreateEllipticRgn 及 SetWindowRgn 二个 API ,例如: <br> <br> Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As _<br> Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long<br> <br> Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd _<br> As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long<br> <br> Private Sub Form_Load()<br> Dim lReturn As Long<br> Me.Show<br> lReturn = SetWindowRgn(hWnd, CreateEllipticRgn(10, 10, 340, 150), True)<br> End Sub<br> <br> 执行结果图片<br> <br> CreateEllipticRgn 之四个参数说明如下:<br> X1:椭圆中心点之X轴位置,但以 Form 的实№边界为限。<br> Y1:椭圆中心点之Y轴位置,但以 Form 的实№边界为限。<br> X2:椭圆长边的长度<br> Y2:椭圆短边的长度的<br> <br> 25、如何让一个 Form 出现在另一个非 MDIForm 的 Form 中?<br> <br> 假设要将 Form2 放在 Form1 中,请在宣告区中宣告: <br> <br> Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, _<br> ByVal hWndNewParent As Long) As Long<br> <br> 在 Form2 中的 Form_Load 中加入 SetParent(Me.hWnd, Form1.hWnd) 即可。<br> <br> 但有一点要注意的是,在 Unload Form1 之前一定要先 Unload Form2</内容>
</数据>
- <数据>
<名称>移除Form右上方之X按钮</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:20:25</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>Form</关键字1>
<关键字2>按钮</关键字2>
<关键字3>关闭</关键字3>
<内容简介>NULL</内容简介>
<内容>其实 Form 右上方之三个按钮分别对应到 Form 左上方控制盒 (ControlBox) 中的几个选项 (缩到最小 / 放到最大 / 关闭),而其中的最大化 (MaxButton) 及最小化 (Minbutton) 都可以直接在 Form 的属性中设定,但是 VB 并没有提供设定『X』按钮的功能!要达到这个功能,必须借助 API: <br> <br> 由于『X』按钮对应到 ControlBox 的关闭选项,所以我们只要移除系统 Menu (就是ControlBox) 的关闭选项即可!您自己可以先看看您现在使用的 Browser 左上方的系统 Menu,【关闭】选项是在第几个,不是第 6 个!是第 7 个,分隔线也算一个!分隔线才是第 6 个!<br> <br> 当我们移除了关闭选项之後,会留下一条很奇怪的分隔线,所以最好连分隔线也一并移除。而 Menu 的 Index 是从 0 开始,分隔线是第 6 个,所以 Index = 5。<br> <br> 修正:为了让程序码在 Windows NT 也能运作正常,将各 Integer 型态改成 Long。 89.05.04<br> <br> ′抓取系统 Menu 的 hwnd<br> Private Declare Function GetSystemMenu Lib "user32" _<br> Alias "GetSystemMenu" (ByVal hwnd As Long, _<br> ByVal bRevert As Long) As Long<br> <br> ′移除系统 Menu 的 API<br> Private Declare Function RemoveMenu Lib "user32" _<br> Alias "RemoveMenu" (ByVal hMenu As Long, _<br> ByVal nPosition As Long, ByVal wFlags As Long) As Long<br> ′第一个参数是系统 Menu 的 hwnd<br> ′第二个参数是要移除选项的 Index</内容>
</数据>
- <数据>
<名称>如何加长加宽ComboBox的下拉选单</名称>
<类别>界面</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:24:22</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>选单</关键字1>
<关键字2>下拉</关键字2>
<关键字3>加长</关键字3>
<内容简介 />
<内容>Combo 预设的下拉长度只有 5,6 个选项,当选项很多时,要卷老半天才能找到资料,很不方便!要加长 ComboBox 的下拉选单,方法如下: <br> <br> 在声明区中放入以下声明及 Subroutine<br> <br> Private Declare Function MoveWindow Lib "user32" _<br> (ByVal hwnd As Long, ByVal x As Long, ByVal y As _<br> Long, ByVal nWidth As Long, ByVal nHeight As Long, _<br> ByVal bRepaint As Long) As Long<br> <br> Public Sub SetComboHeight(oComboBox As ComboBox, lNewHeight As Long)<br> Dim oldscalemode As Integer <br> ′ This procedure does not work with frames: you<br> ′ cannot set the ScaleMode to vbPixels, because<br> ′ the frame does not have a ScaleMode Property.<br> ′ To get round this, you could set the parent control<br> ′ to be the form while you run this procedure.<br> If TypeOf oComboBox.Parent Is Frame Then Exit Sub<br> ′ Change the ScaleMode on the parent to Pixels.<br> oldscalemode = oComboBox.Parent.ScaleMode<br> oComboBox.Parent.ScaleMode = vbPixels<br> ′ Resize the combo box window.<br> MoveWindow oComboBox.hwnd, oComboBox.Left, _<br> oComboBox.Top, oComboBox.Width, lNewHeight, 1<br> ′ Replace the old ScaleMode<br> oComboBox.Parent.ScaleMode = oldscalemode<br> End Sub<br> <br> 在任何时候 (不一定是 Form_Load 或 Combo_DropDown),想要加长 ComboBox 的下拉选单时,只要加入以下程序即可:<br> <br> Call SetComboHeight(Combo1, 270) ′设定的单位是 Pixels<br> 如何加宽 ComboBox 的下拉选单?<br> <br> 和 ListBox 一样, ComboBox 也会有宽度不够的情形, Combo 下拉之后资料看不完整,当 Form 上的物件不多时,还可以拉长一点,但有时候也没办法!这时候,还是得靠 API 了! <br> <br> 在声明区中放入以下声明及 Subroutine<br> <br> Private Declare Function SendMessage Lib "user32" _<br> Alias "SendMessageA" (ByVal hwnd As Long, _<br> ByVal wMsg As Long, ByVal wParam As Long, _<br> lParam As Long) As Long<br> Const CB_SETDROPPEDWIDTH = &H160<br> <br> Public Sub SetComboWidth(oComboBox As ComboBox, lWidth As Long)<br> ′ lWidth 是宽度,单位是 pixels<br> SendMessage oComboBox.hwnd, CB_SETDROPPEDWIDTH, lWidth, 0<br> End Sub<br> <br> 在任何时候 (不一定是 Form_Load 或 Combo_DropDown),想要加宽 ComboBox 的下拉选单时,只要加入以下程序即可 (若设定的宽度小于 Combo 原来的宽度则无效):<br> <br> Call SetComboWidth(Combo1, 270) ′设定的单位是 Pixels</内容>
</数据>
- <数据>
<名称>获得某一台网络打印机有几份等待打印的报表</名称>
<类别>打印</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:29:39</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>打印机</关键字1>
<关键字2>网络</关键字2>
<关键字3>报表</关键字3>
<内容简介>NULL</内容简介>
<内容>当我们要打印报表时,如果打印机是本机的打印机的话,当然马上就会将报表打印出来,反正打印机就只有您一个人在使用而已!但是如果是在一个人数很多的公司或企业时,往往就必须很多人来分享某一部打印机了,而且打印机也不一定就放在举目可及之处!<br> <br> 当您将报表丢到网络打印机之后,由于不一定看得到打印机,您必须特别到摆放打印机的地方去拿报表,这时候您最关心的,就是报表印了没有,如果还没有的话,那还有几份还没打印的报表排在您的报表之前呢?<br> <br> 下面这一段程序,可以让您知道某一台网络打印机尚有几份等待打印的报表?在您的程序丢出报表的同时,您可以告诉您的 User,他的报表排在第几份!<br> <br> ′在 .bas 文件中加入以下声明及模组:<br> <br> ′Constants Definition<br> Public Const CCHDEVICENAME = 32<br> Public Const CCHFORMNAME = 32<br> Public Const PRINTER_ACCESS_ADMINISTER = &H4<br> Public Const PRINTER_ACCESS_USE = &H8<br> <br> ′Types Definition<br> Public Type DEVMODE<br> dmDeviceName As String * CCHDEVICENAME<br> dmSpecVersion As Integer<br> dmDriverVersion As Integer<br> dmSize As Integer<br> dmDriverExtra As Integer<br> dmFields As Long<br> dmOrientation As Integer<br> dmPaperSize As Integer<br> dmPaperLength As Integer<br> dmPaperWidth As Integer<br> dmScale As Integer<br> dmCopies As Integer<br> dmDefaultSource As Integer<br> dmPrintQuality As Integer<br> dmColor As Integer<br> dmDuplex As Integer<br> dmYResolution As Integer<br> dmTTOption As Integer<br> dmCollate As Integer<br> dmFormName As String * CCHFORMNAME<br> dmUnusedPadding As Integer<br> dmBitsPerPel As Long<br> dmPelsWidth As Long<br> dmPelsHeight As Long<br> dmDisplayFlags As Long<br> dmDisplayFrequency As Long<br> End Type<br> <br> Public Type PRINTER_DEFAULTS<br> pDatatype As String<br> pDevMode As DEVMODE<br> DesiredAccess As Long<br> End Type<br> <br> ′API Declarations<br> Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" _<br> (ByVal pPrinterName As String, phPrinter As Long, _<br> pDefault As PRINTER_DEFAULTS) As Long<br> <br> Public Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" _<br> (ByVal HPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, _<br> ByVal Level As Long, pJob As Byte, ByVal cdBuf As Long, _<br> pcbNeeded As Long, pcReturned As Long) As Long<br> <br> Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long <br> <br> ′取得指定的打印机,目前有多少 Jobs (最大值为 128)<br> ′打印机的名称可以是 mapping 的网络路径名称,例如: "\\myserver\myprinter"<br> Function GetPrinterQueue(PrinterName As String) As Long<br> Dim PrinterStruct As PRINTER_DEFAULTS<br> Dim HPrinter As Long<br> Dim ret As Boolean<br> Dim JobStruct(0 To 127) As Byte<br> Dim pcbNeeded As Long<br> Dim pcReturned As Long<br> Dim TempByte As Byte<br> <br> ′设定 Printer structure 初值<br> PrinterStruct.pDatatype = vbNullString<br> PrinterStruct.pDevMode.dmSize = Len(PrinterStruct.pDevMode)<br> PrinterStruct.DesiredAccess = PRINTER_ACCESS_USE<br> ′取得打印机的 Handle<br> ret = OpenPrinter(PrinterName, HPrinter, PrinterStruct)<br> ′取得打印机的 active jobs<br> ret = EnumJobs(HPrinter, 0, 127, 1, TempByte, 0, pcbNeeded, pcReturned)<br> If pcbNeeded = 0 Then<br> GetPrinterQueue = 0<br> Else<br> ret = EnumJobs(HPrinter, 0, 127, 1, JobStruct(0), pcbNeeded, pcbNeeded, pcReturned)<br> GetPrinterQueue = pcReturned<br> End If<br> ′关闭打印机<br> ret = CloseHandle(HPrinter)<br> End Function <br> <br> ′在表单中放一个 CommandButton,程序码如下:<br> <br> Private Sub Command1_Click()<br> ′测试预设打印机的 Queue (Printer.DeviceName)<br> Msgbox "打印机中尚有 " & GetPrinterQueue(Printer.DeviceName) & " 份报表", 64, "讯息"<br> End Sub</内容>
</数据>
- <数据>
<名称>ZOrder的使用</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:32:33</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>ZOrder</关键字1>
<关键字2>坐标</关键字2>
<关键字3>使用</关键字3>
<内容简介>NULL</内容简介>
<内容>ZOrder 拆开以后就是 Z 及 Order,其意义说明如下:<br> Z:这里是指三度空间中的 Z 座标轴 (注一),而不是指英文字母的第 26 个字母。<br> Order:排列顺序。<br> 所以 ZOrder 就是指在 Z 座标轴上的排列顺序!<br> <br> ZOrder 语法如下:<br> <br> object.ZOrder position <br> <br> ---------------------------------------------------------------------------<br> <br> object 选择性引数。物件运算式,用来指定「适用于」清单中的物件。<br> 如果省略 object,则假设具有驻点的 Form 物件为 object。 <br> Position 选择性引数。整数,用以指示 object 相对于同一 object 其它执行个体的位置。<br> 如果 position 为 0 或省略,则 object 放置在 z- 顺序前面 (上方)。<br> 如果 position 为 1,则 object 放置在 z- 顺序后面 (下方)。 <br> <br> ---------------------------------------------------------------------------<br> <br> 在设计阶段选取快显功能表中的「移至顶层」或「移至底层」功能表指令,可以设定物件的 z- 顺序。<br> <br> ZOrder 用在不同的地方,有二种不同的意义:<br> 1、用于 MDIForm 中的 Child Form 时,指的是每一个 Child Form 的上下位置关系。<br> 2、用于每一个 Form 中的所有控制项时,指的是每一个控制项间的上下位置关系。 (注二)<br> <br> 注一:一般我们的二度平面座标轴是指 X 座标轴 (东西向)及 Y 座标轴 (南北向),<br>    二个轴构成一个平面,再加上垂直的 Z 座标轴,就构成了三度立体空间了!<br>    所以 ZOrder 指的就是物件在垂直的 Z 座标轴上的上下位置关系。<br> <br> 注二:虽然 ZOrder 指的是物件在垂直的 Z 座标轴上的上下位置关系。<br>    但是很多人搞不清楚,为什么他已经设定了 ZOrder 了,为什么在某些控制项中是无效的?<br> <br>    原因是对单一 Form 或 单一 Container 而言,在垂直的 Z 座标轴上又分成三个层次:<br>    最下一层:显示图形方法结果的绘图空间。<br>    中间一层:用来显示图形物件(例如 Image) 和 Label 控制项。<br>    上面一层:显示所有非图形控制项,例如 CommandButton、CheckBox 或 ListBox。<br>    而 ZOrder 只对单一层次内的控制项有效而已!<br> <br>    例如:您如果设定 Label 及 Image 的 ZOrder 是有效的,因为它们都在中间一层!<br>       您如果设定 Label 及 CommandButton 的 ZOrder 是无效的,因为它们在不同层!<br> <br>    最重要的是:不管 ZOrder 如何设定,<br>          在上面一层的物件永远会在中间一层的物件的上方!<br>          在中间一层的物件永远会在最下一层的物件的上方! </内容>
</数据>
- <数据>
<名称>算出TextBox中目前光标位置</名称>
<类别>文本处理</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:34:53</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>光标</关键字1>
<关键字2>位置</关键字2>
<关键字3>TextBox</关键字3>
<内容简介>NULL</内容简介>
<内容>在很多文字编辑器中,都可以告诉您,目前您的光标是在文字编辑器的第几行,我们也来实作一下!<br> <br> 在 Form 中放入一个 TextBox 并将 Multiline 属性设为 True,放入一个 Label 用来显示目前光标所在的行数,在表单声明区中加入以下声明及模组:<br> <br> Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _<br> (ByVal hwnd As Long, _<br> ByVal wMsg As Long, _<br> ByVal wParam As Long, _<br> ByVal lParam As Long) As Long<br> <br> Const EM_LINEFROMCHAR = &HC9<br> <br> Function LineNo(txthwnd As Long) As Long<br> On Local Error Resume Next<br> LineNo = SendMessageLong(txthwnd, EM_LINEFROMCHAR, -1&, 0&) + 1<br> LineNo = Format$(lineno, "##,###")<br> End Function<br> <br> ′呼叫这个模组时要导入的是 TextBox 的 hwnd<br> ′实际使用时,必须在 TextBox 的以下几个事件中呼叫这个模组,才会完全正确:<br> ′1. Change事件:输入资料时可侦测计算<br> ′2. Click 事件:用鼠标移动光标时可侦测计算<br> ′3. KeyUp 事件:用上下左右键移动光标时可侦测计算<br> <br> Sub Text1_Change()<br> Label1 = LineNo(Text1.hwnd)<br> End Sub<br> <br> Private Sub Text1_Click()<br> Label1 = LineNo(Text1.hwnd)<br> End Sub<br> <br> Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)<br> Label1 = LineNo(Text1.hwnd)<br> End Sub</内容>
</数据>
- <数据>
<名称>动态新增、移除ODBC DSN</名称>
<类别>数据库</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:37:06</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>动态</关键字1>
<关键字2>DSN</关键字2>
<关键字3>新增移除</关键字3>
<内容简介>NULL</内容简介>
<内容>一般我们建立 Client 端 DSN 都是在使用者的机器上进入【控制台】【ODBC 资料来源管理员】去建立,但是如果我们开发的 APP 使用者很多时,这就有点累人了,所以我们可以将这个动作放在程序中!<br> <br> 新增 DSN 的方法有二种:<br> 1、使用 DBEngine 物件的 RegisterDatabase 方法<br> 2、呼叫 SQLConfigDataSource API<br> <br> 不管使用以上任何一种方法新增 DSN,一共会写入二个地方,一个是注册表,一个是 ODBC.INI。<br> <br> 而删除 DSN 的方法同上面的第二种方法,呼叫 SQLConfigDataSource API。<br> <br> 以下之模组以 Oracle73 Ver 2.5 为例,在 Form 的声明区中加入以下声明及模组:<br> <br> Private Const ODBC_ADD_DSN = 1 ′ Add data source<br> Private Const ODBC_CONFIG_DSN = 2 ′ Configure (edit) data source<br> Private Const ODBC_REMOVE_DSN = 3 ′ Remove data source<br> Private Const vbAPINull As Long = 0& ′ NULL Pointer<br> <br> Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _<br> (ByVal hwndParent As Long, ByVal fRequest As Long, _<br> ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long<br> <br> Public Sub CreateDSN(sDSN As String)<br> Dim nRet As Long<br> Dim sDriver As String<br> Dim sAttributes As String<br> sDriver = "Oracle73 Ver 2.5"<br> sAttributes = "Server=Oracle8" & Chr$(0)<br> sAttributes = sAttributes & "DESCRIPTION=" & sDSN & Chr$(0)<br> ′sAttributes = sAttributes & "DSN=" & sDSN & Chr$(0)<br> sAttributes = sAttributes & "DATABASE=DBFinance" & Chr$(0)<br> sAttributes = sAttributes & "Userid=Scott" & Chr$(0)<br> ′sAttributes = sAttributes & "PWD=myPassword" & Chr$(0)<br> DBEngine.RegisterDatabase sDSN, sDriver, True, sAttributes ′注一<br> ′nRet = SQLConfigDataSource(vbAPINull, ODBC_ADD_DSN, sDriver, sAttributes) ′注二<br> End Sub<br> <br> Public Sub DeleteDSN(sDSN As String)<br> Dim nRet As Long<br> Dim sDriver As String<br> Dim sAttributes As String<br> sDriver = "Oracle73 Ver 2.5"<br> sAttributes = sAttributes & "DSN=" & sDSN & Chr$(0)<br> nRet = SQLConfigDataSource(vbAPINull, ODBC_REMOVE_DSN, sDriver, sAttributes)<br> End Sub<br> <br> ′假设要产生的 DSN 为 Test,实际使用范例如下:<br> <br> Private Sub Command1_Click()<br> CreateDSN "Test"<br> End Sub<br> <br> Private Sub Command2_Click()<br> DeleteDSN "Test"<br> End Sub<br> <br> ′而写到系统的资料如下:<br> <br> 1、ODBC.INI<br> <br> [ODBC 32 bit Data Sources]<br> Test=Oracle73 Ver 2.5 (32 bit)<br> <br> [Test]<br> Driver32=C:\ORAWIN95\ODBC250\sqo32_73.dll<br> <br> 2、注册表<br> <br> 机码:HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources<br> 名称:Test 资料:Oracle73 Ver 2.5<br> <br> 机码:HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Test<br> 名称:Description 资料:Test<br> 名称:Driver 资料:C:\ORAWIN95\ODBC250\sqo32_73.dll<br> 名称:Server 资料:Oracle8<br> 名称:UserId 资料:Scott<br> <br> ※注一及注二可任选一种,只要将不使用的方法 Mark 起来即可!<br> ※若您想使用其他之资料库,只要将以上模组稍作修改即可!</内容>
</数据>
- <数据>
<名称>取消TextBox鼠标右键的弹出菜单功能</名称>
<类别>界面</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:41:09</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>TextBox</关键字1>
<关键字2>PopupMenu</关键字2>
<关键字3>鼠标</关键字3>
<内容简介>NULL</内容简介>
<内容>自从 Microsoft Windows 进入 Windows95 之后,有一个很方便的功能,很多软件都有提供,就是鼠标右键的 PopupMenu 功能,它确实很方便,但是有时却是梦魇,那就是您不需要它的时候,它还是会自动出现!本例中的 TextBox 就是明显的例子。<br> <br> 但是这个梦魇从 VB5.0 以后就可以解决了,因为 VB5.0 提供了 AdressOf 这个运算子,可以做回呼(callback)处理!<br> <br> 请将以下的程序码放在 .bas 模组中,呼叫 Hook 这个 Sub 并传入 TextBox 的 hWnd 当作参数,但是切记您在 Unload Form 之前一定要呼叫 UnHook 这个 Sub,否则会产生一个 General Protection Fault!<br> <br> Declare Function CallWindowProc Lib "user32" Alias _<br> "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _<br> ByVal hWnd As Long, ByVal Msg As Long, _<br> ByVal wParam As Long, ByVal lParam As Long) As Long<br> <br> Declare Function SetWindowLong Lib "user32" Alias _<br> "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex _<br> As Long, ByVal dwNewLong As Long) As Long<br> <br> Public Const GWL_WNDPROC = -4<br> Public Const WM_RBUTTONUP = &H205<br> Public lpPrevWndProc As Long<br> Private lngHWnd As Long<br> <br> Public Sub Hook(hWnd As Long)<br> lngHWnd = hWnd<br> lpPrevWndProc = SetWindowLong(lngHWnd, GWL_WNDPROC, _<br> AddressOf WindowProc)<br> End Sub<br> <br> Public Sub UnHook()<br> Dim lngReturnValue As Long<br> lngReturnValue = SetWindowLong(lngHWnd, GWL_WNDPROC, _<br> lpPrevWndProc)<br> End Sub<br> <br> Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _<br> ByVal wParam As Long, ByVal lParam As Long) As Long<br> Select Case uMsg<br> Case WM_RBUTTONUP<br> ′Do nothing<br> ′Or popup you own menuCase Else<br> WindowProc = CallWindowProc(lpPrevWndProc, _<br> hw, uMsg, wParam, lParam)<br> End Select<br> End Function<br> <br> 在 Form_Load 事件中加入以下程序码:<br> <br> Call Hook(Text1.hWnd)<br> <br> 在 Form_Unload 中加入以下程序码:<br> <br> Call UnHook</内容>
</数据>
- <数据>
<名称>让ComboBox自动下拉</名称>
<类别>控件特效</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 17:43:52</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>ComboBox</关键字1>
<关键字2>自动</关键字2>
<关键字3>API</关键字3>
<内容简介>NULL</内容简介>
<内容>以下状况假设我在 Form_Load 中自动下拉 Combo1. <br> <br> ′以下声明用于16位<br> Const WM_USER = &H400<br> Const CB_SHOWDROPDOWN = (WM_USER + 15)<br> Private Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, _<br> ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long <br> <br> ′以下声明用于32位<br> Const CB_SHOWDROPDOWN = &H14F<br> Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _<br> (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _<br> lParam As Any) As Long <br> <br> Private Sub Form_Load()<br> Combo1.AddItem "11111"<br> Combo1.AddItem "22222"<br> Combo1.AddItem "33333"<br> Combo1.AddItem "44444"<br> Combo1.AddItem "55555"<br> Combo1.AddItem "66666"<br> ′Form_Load 即自动下拉 Combo1<br> Dim nret As Long<br> nret = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)<br> End Sub</内容>
</数据>

yxgsb 2002-01-11
  • 打赏
  • 举报
回复
好像是用记事本打开了一个PowerPoint文件吧!
32572 2002-01-10
  • 打赏
  • 举报
回复

up
jett 2002-01-10
  • 打赏
  • 举报
回复
好东西
up
cpplus 2002-01-10
  • 打赏
  • 举报
回复
我帮你U P 一下,你就可以接着发了,要不发到我信箱里

cpplus@163.com
shawls 2002-01-10
  • 打赏
  • 举报
回复

















总共是6xx kb

可惜没有办法写了







shawls 2002-01-10
  • 打赏
  • 举报
回复

- <数据>
<名称>制作垂直标题栏的窗体下</名称>
<类别>窗体</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-10 12:36:46</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>垂直</关键字1>
<关键字2>窗体</关键字2>
<关键字3>标题栏</关键字3>
<内容简介 />
<内容>Form1 <br> <br> Private Sub Form_Load()<br> prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)<br> SetWindowLong Picture1.hwnd, GWL_WNDPROC, AddressOf WndProc<br> End Sub<br> <br> Private Sub Form_Unload(Cancel As Integer)<br> SetWindowLong Picture1.hwnd, GWL_WNDPROC, prevWndProc<br> End Sub<br> <br> Private Sub Picture1_Paint()<br> Dim font As LOGFONT, hOldFont As Long, hFont As Long<br> Dim w As Integer, h As Integer, r As RECT<br> <br> With Picture1<br> <br> RtlMoveMemory font.lfFaceName(0), _<br> ByVal CStr(.font.Name), _<br> LenB(StrConv(.font.Name, vbFromUnicode)) + 1<br> font.lfHeight = (.font.Size * -20) / Screen.TwipsPerPixelY<br> font.lfEscapement = 2700<br> font.lfWeight = IIf(.font.Bold, 700, 400)<br> font.lfItalic = .font.Italic<br> font.lfUnderline = .font.Underline<br> font.lfStrikeOut = .font.Strikethrough<br> font.lfCharSet = DEFAULT_CHARSET<br> hFont = CreateFontIndirect(font)<br> hOldFont = SelectObject(.hDC, hFont)<br> <br> r.Left = 0: r.Top = 0<br> DrawText Me.hDC, .Tag, LenB(StrConv(.Tag, vbFromUnicode)), r, DT_CALCRECT<br> w = r.Right<br> h = r.Bottom<br> <br> .Cls<br> <br> .CurrentX = .ScaleWidth - h / 2<br> .CurrentY = cmdClose.Height + 15<br> Picture1.Print .Tag<br> <br> SelectObject .hDC, hOldFont<br> DeleteObject hFont<br> End With<br> End Sub</内容>
</数据>
- <数据>
<名称>用API函数控制光驱的开关</名称>
<类别>VBAPI</类别>
<数据来源>yesky</数据来源>
<来源时间>2001-11-24 22:09:12</来源时间>
<保存时间>2002-01-05 22:14:01</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>光驱</关键字2>
<关键字3>开关</关键字3>
<内容简介>NULL</内容简介>
<内容>使用API函数CDdoor 来控制光驱门的开和关程序十分简单,由于 CDdoor 函数自身包含了对异常错误的处理机制,因此这个程序的通用性很高,你可以把这段代码移植到你的程序中,实现某些多媒体播放器所常用的开关光驱的功能。 <br> 以下是源代码:<br> <br>   -------------------------------------------<br>    利用API函数控制光驱的开和关<br>   -------------------------------------------<br>   程序说明:<br>    本例使用API函数 CDdoor 来控制光驱门的开和关<br>   程序十分简单,由于 CDdoor 函数自身包含了对异常<br>   错误的处理机制,因此这个程序的通用性很高,你可<br>   以把这段代码移植到你的程序中,实现某些多媒体播<br>   放器所常用的开关光驱的功能。<br>   -------------------------------------------<br> <br> Option Explicit<br> <br>   说明:CDdoor函数是安装WINDOWS时所自带的winmm.dll文件中包含的函数<br> <br> Private Declare Function CDdoor Lib "winmm.dll" Alias "mciSendStringA" _<br> ( _<br> ByVal lpstrCommand As String, _<br> ByVal lpstrReturnString As String, _<br> ByVal uReturnLength As Long, _<br> ByVal hwndCallback As Long _<br> ) As Long <br> <br>   CDOpen用来标示光驱开与关的状态<br> <br> Dim CDOpen As Boolean<br> <br> Private Sub Command1_Click()<br> On Error Resume Next<br>  <br> <br>   如果关闭则打开,并且按钮做相应变化<br> <br> If CDOpen = False Then<br> Call CDdoor("set CDAudio door open", 0, 0, 0)<br> CDOpen = True<br> Command1.Caption = "点击关闭光驱"<br> Else <br> <br>   否则关闭<br> <br> Call CDdoor("set CDAudio door closed", 0, 0, 0)<br> CDOpen = False<br> Command1.Caption = "点击打开光驱"<br> End If<br> End Sub<br> <br> Private Sub Form_Load()<br> CDOpen = False<br> Call CDdoor("set CDAudio door closed", 0, 0, 0)<br> End Sub<br>  <br> <br>   CDdoor函数是安装WINDOWS时所自带的winmm.dll文件中包含的函数,我们只须先加入如下的声明后就能引用这个API函数:<br> <br>   Private Declare Function CDdoor Lib "winmm.dll" Alias "mciSendStringA" _ <br>    ( _ <br>    ByVal lpstrCommand As String, _       String,这是控制命令参数<br>    ByVal lpstrReturnString As String, _    String,这是返回值<br>    ByVal uReturnLength As Long, _       Long,返回值长度参数<br>    ByVal hwndCallback As Long _<br>    ) As Long<br> <br>   引用的语法是:Call CDdoor("set CDAudio door closed", 0, 0, 0)  用以关闭光驱门          Call CDdoor("set CDAudio door open", 0, 0, 0)   用以打开光驱门<br>  <br> <br>   程序中使用了一个布尔型变量来标示当前光驱门开与关的状态。<br> <br>   如果配合检测光驱是否存在的函数一起使用,此程序的通用性会更高。而关于检测驱动器信息的函数请参看 GetDriveType,GetLogicalDrives的用法。</内容>
</数据>
- <数据>
<名称>如何映射/中断网络磁盘</名称>
<类别>网络</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-05 23:13:34</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>映射</关键字1>
<关键字2>网络磁盘</关键字2>
<关键字3>中断</关键字3>
<内容简介 />
<内容>下面的程序段可以模拟【网上邻居】及【我的电脑】中的【映射 / 中断网络磁盘】,就是出现【映射 / 中断网络磁盘】的问话框,让使用者根据自己电脑的情形,来决定要连接的网络磁盘要映射到自己的那一个磁盘?要中断的又是那一个对应的磁盘?<br> <br>   请在声明区中加入以下声明及模组:<br> <br> Private Declare Function WNetConnectionDialog Lib "mpr.dll" _<br> (ByVal hwnd As Long, ByVal dwType As Long) As Long<br> Private Declare Function WNetDisconnectDialog Lib "mpr.dll" _<br> (ByVal hwnd As Long, ByVal dwType As Long) As Long<br> <br> Sub ShowMapDrives(hwnd As Long)<br>  WNetConnectionDialog hwnd, 1<br> End Sub<br> <br> Sub ShowUnMapDrives(hwnd As Long)<br>  WNetDisconnectDialog hwnd, 1<br> End Sub<br> <br> '程序中使用方式如下:<br> <br> Private Sub Command1_Click()<br>  '出现 映射网络磁盘 问话框<br>  ShowMapDrives Me.hwnd <br> End Sub<br> <br> <br> Private Sub Command2_Click()<br>  '出现 中断网络磁盘 问话框<br>  ShowUnMapDrives Me.hwnd <br> End Sub</内容>
</数据>
- <数据>
<名称>制作垂直标题栏的窗体上</名称>
<类别>窗体</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-10 16:12:52</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>垂直</关键字1>
<关键字2>窗体</关键字2>
<关键字3>标题栏</关键字3>
<内容简介 />
<内容>源代码如下:<br> <br> <br> Module1<br> <br> Option Explicit <br> Public Const GWL_WNDPROC = (-4)<br> <br> Public Const WM_LBUTTONDOWN = &H201<br> Public Const WM_NCHITTEST = &H84<br> Public Const WM_NCLBUTTONDOWN = &HA1<br> Public Const HTCLIENT = 1<br> Public Const HTCAPTION = 2<br> <br> Public Const LF_FACESIZE = 32<br> Public Const DEFAULT_CHARSET = 1<br> Public Const DT_CALCRECT = &H400<br> <br> Type LOGFONT<br> lfHeight As Long<br> lfWidth As Long<br> lfEscapement As Long<br> lfOrientation As Long<br> lfWeight As Long<br> lfItalic As Byte<br> lfUnderline As Byte<br> lfStrikeOut As Byte<br> lfCharSet As Byte<br> lfOutPrecision As Byte<br> lfClipPrecision As Byte<br> lfQuality As Byte<br> lfPitchAndFamily As Byte<br> lfFaceName(0 To LF_FACESIZE - 1) As Byte<br> End Type<br> <br> Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long<br> Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long<br> Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long<br> Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)<br> Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long<br> <br> Type RECT<br> Left As Long<br> Top As Long<br> Right As Long<br> Bottom As Long<br> End Type<br> <br> Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long<br> Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long<br> <br> 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<br> Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long<br> Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long<br> Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long<br> <br> Public prevWndProc As Long<br> <br> Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long<br> If Msg = WM_LBUTTONDOWN Then<br> SendMessage Form1.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, ByVal 0&<br> Else<br> WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)<br> End If<br> End Function</内容>
</数据>
- <数据>
<名称>实现隐藏和显示桌面图标</名称>
<类别>VBAPI</类别>
<数据来源>NULL</数据来源>
<来源时间>NULL</来源时间>
<保存时间>2002-01-05 22:30:34</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>隐藏和显示</关键字2>
<关键字3>桌面图标</关键字3>
<内容简介>NULL</内容简介>
<内容>源代码如下: <br> <br> Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br> Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long<br> Private Const SW_HIDE = 0<br> Private Const SW_RESTORE = 9  <br> <br> 隐藏桌面图标<br> <br> Private Sub Command1_Click()<br> Dim Hwd As Long<br> Dim rtn As Long<br> Hwd = FindWindow("Progman", vbNullString)<br> rtn = ShowWindow(Hwd, SW_HIDE)<br> End Sub <br> <br> 显示桌面图标<br> <br> <br> <br> Private Sub Command2_Click()<br> Dim Hwd As Long<br> Dim rtn As Long<br> Hwd = FindWindow("Progman", vbNullString)<br> rtn = ShowWindow(Hwd, SW_RESTORE)<br> End Sub</内容>
</数据>
- <数据>
<名称>VB托盘程序详解下</名称>
<类别>界面</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-05 23:10:32</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>托盘</关键字2>
<关键字3 />
<内容简介 />
<内容>这样我们就取得并处理了来自托盘图标的消息,现在的问题是在鼠标右键菜单弹出后,怎么控制程序主窗体的状态,这时我们需要用到SendMessage函数来向主窗体发送最大化、最小化、关闭、移动等消息,具体的代码实现如下,其中HWnd是主窗体的句柄,WM_SYSCOMMAND表示发送的是系统控制类的消息,SC_MOVE、SC_SIZE、SC_RESTORE便是要发送的消息了:<br> <br>    '托盘图标右键菜单上的“移动”项被点击时<br>    Private Sub mnuTrayMove_Click() <br>      SendMessage HWnd, WM_SYSCOMMAND, SC_MOVE, 0& <br>    End Sub <br>    '托盘图标右键菜单上的“恢复”项被点击时 <br>    Private Sub mnuTrayRestore_Click() <br>      SendMessage HWnd, WM_SYSCOMMAND, SC_RESTORE, 0& <br>    End Sub <br>    '托盘图标右键菜单上的“退出”项被点击时 <br>    Private Sub mnuTraySize_Click() <br>      SendMessage HWnd, WM_SYSCOMMAND, SC_SIZE, 0& <br>    End Sub  <br> <br>   最后要提醒你,在程序退出时一定要把窗口过程的地址恢复为默认值,同时把托盘图标移去哦。</内容>
</数据>
- <数据>
<名称>妙用GetSystemMetrics函数</名称>
<类别>VBAPI</类别>
<数据来源>yesky</数据来源>
<来源时间>2001-11-24 22:09:12</来源时间>
<保存时间>2002-01-05 22:15:17</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>函数</关键字2>
<关键字3>NULL</关键字3>
<内容简介>NULL</内容简介>
<内容>在Windows9x编程过程中,我们经常需要了解当前系统的运行状态。例如,如果Win9x运行于安全模式,那么多媒体等部件可能无法正确运行。程序中有必要对此做相应处理,以提高程序安全性,增强系统的适应能力。VB中没有直接提供此类控制或函数,但是我们可以通过API函数GetSystemMetrics轻松地实现对Win运行模式的判断。<br> <br>   GetSystemMetrics函数原型如下:<br>   <br> <br> <br> <br>   Public Declare Function GetSystemMetrics Lib “user32” (ByVal nIndex As Long) As Long<br> <br>   其中nIndex的不同取值可以使该函数实现不同的功能。例如返回Win桌面中各种显示单元的宽度和高度、是否安装了鼠标、是否调换了鼠标左右键的定义等。<br> <br>   当nIndex = 67(SM_CLEANBOOT)时,该函数的返回值表示Windows9x的当前运行模式。<br> <br>   在以下的示例中我们可以看到GetSystemMetrics函数的用法和作用。首先在BAS模块文件中做如下说明:<br> <br>   Option Explicit<br>   Public Const SM_CLEANBOOT = 67<br>   Public Declare Function GetSystemMetrics Lib “user32” (ByVal nIndex As Long) As Long <br> <br>   在窗体中添加标签Label1和命令按钮Command1,设置如下代码:<br> <br>   Private Sub Command1_Click()<br>    Select Case GetSystemMetrics(SM_CLEANBOOT) <br> <br>    Case 0:Label1=“系统运行于正常模式”<br>    Case 1:Label1=“系统运行于安全模式”<br>    Case 2:Label1=“系统运行于网络环境下的安全模式”<br>    End Select<br>   End Sub</内容>
</数据>
- <数据>
<名称>利用API和注册表获取系统信息上</名称>
<类别>DelphiAPI</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 12:01:30</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>注册表</关键字2>
<关键字3>系统信息</关键字3>
<内容简介 />
<内容>在开发应用程序时,增加一项显示计算机系统信息的功能,例如已安装的软盘、硬盘、光驱、网络驱动器,硬盘的容量和剩余空间,显示器分辨率、键盘类型、鼠标的键数,内存大小、CPU类型,Windows的版本号、产品标识、注册用户单位名和用户名、当前操作用户名等(见运行图示),当然还有更多的信息,这样会使你的程序更友好。其实,有很多应用程序就是这样做的。<br> <br>   通过调用Windows的API函数和访问Windows注册表,可以获取大量的系统信息。Delphi为绝大多数WindowsAPI函数提供了调用接口(可参见DELPHI3\SOURCE\RTL\WIN\windows.pas文件),并提供了一个功能全面的TRegistry类,使我们可以方便的调用WindowsAPI函数和访问注册表,例如:<br> <br>   1、function GetDriveType(lpRootPathName: PChar): UINT;返回指定驱动器的类型。<br> <br>   2、function GetDiskFreeSpace(lpRootPathName: PChar; var lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL;返回指定驱动器的总簇数、剩余簇数及每簇扇区数、每扇区字节数,从而可以计算出总容量和剩余空间。<br> <br>   3、function GetSystemMetrics(SM_CXSCREEN或 SM_CYSCREEN): Integer;返回显示器分辨率。<br> <br>   4、function GetSystemMetrics(SM_CMOUSEBUTTONS): Integer;返回鼠标的按键数目。<br> <br>   5、 在windows 注 册 表 的HKEY_LOCAL_MACHINE\ software\microsoft\windows\currentversion \RegisteredOwner主键下存放着Windows安装时输入的用户名,可用以下语句读取。 <br> <br> myreg:=Tregistry.Create; <br> file://必须在程序单元的uses部分加入Registry<br> myreg.RootKey:=HKEY_LOCAL_MACHINE;<br> if myreg.openkey('software\microsoft \windows\currentversion',false) then<br>  memo1.lines.add(' 注册用户名: '+myreg.readstring('RegisteredOwner'));<br>  myreg.closekey; <br> <br>   以上仅举几例,获取其他一些信息的方法与此类似,详见源程序。<br> <br>   本程序在Pwin95、Delphi3下调试通过。<br> <br>   附:源程序清单。<br> <br> unit Unit1;<br> interface<br> uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Registry;<br> <br> type<br> TForm1 = class(TForm)<br> Button1: TButton;<br> Memo1: TMemo;<br> procedure Button1Click(Sender: TObject);<br> private<br> { Private declarations }<br> public<br> { Public declarations }<br> end;<br> <br> var<br> Form1: TForm1;<br> <br> implementation<br> {$R *.DFM}</内容>
</数据>
- <数据>
<名称>利用API和注册表获取系统信息中</名称>
<类别>DelphiAPI</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 12:01:39</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>注册表</关键字2>
<关键字3>系统信息</关键字3>
<内容简介 />
<内容>procedure TForm1.Button1Click(Sender: TObject);<br> var <br> i,x,y:integer;<br> ch:char; file://驱动器字符'A'~'Z'<br> buffer:string;<br> cpuinfo:TSYSTEMINFO; file://存放系统信息的记录类型,在Windows.pas中查到详细内容。<br> meminfo:TMemoryStatus; file://存放系统内存信息的记录类型。<br> computername,username:pchar; file://计算机名称、用户名<br> spc,bps,nofc,tnoc:longint; file://用于存放磁盘容量的变量<br> myreg:Tregistry; file://用于访问注册表的TRegistry变量<br> begin<br> memo1.Lines.Clear;<br> <br> for ch:='A' to 'Z' do begin<br> i:=getdrivetype(pchar(ch+':\'));<br> buffer:=' '+ch+': ';<br> case i of<br> DRIVE_UNKNOWN : buffer:=buffer+'未知类型';<br> DRIVE_REMOVABLE: buffer:=buffer+'软盘';<br> DRIVE_FIXED : begin<br> buffer:=buffer+'硬盘';<br> if getdiskfreespace(pchar(ch+':\'),spc,bps,nofc,tnoc) then <br> begin<br> buffer:=buffer+'总容量: '+inttostr((spc*bps*tnoc) div (1024*1024))+'MB';<br> buffer:=buffer+'剩余: '+inttostr((spc*bps*nofc) div (1024*1024))+'MB';<br> end;<br> end;<br> DRIVE_REMOTE : buffer:=buffer+'网络驱动器';<br> DRIVE_CDROM :buffer:=buffer+'CD-ROM驱动器';<br> DRIVE_RAMDISK:buffer:=buffer+'RAM虚拟驱动器';<br> end;<br> if (ch >'D') and (i=1) then break;<br> if i< >1 then memo1.Lines.Add(buffer);<br> end;<br> <br> case getkeyboardtype(0) of file://获取键盘类型<br> 1: buffer:=' 键盘: IBM PC/XT或兼容类型(83键)';<br> 2: buffer:=' 键盘: Olivetti "ICO"(102键)';<br> 3: buffer:=' 键盘: IBM PC/AT(84键)';<br> 4: buffer:=' 键盘: IBM增强型(101或102键)';<br> 5: buffer:=' 键盘: Nokia 1050';<br> 6: buffer:=' 键盘: Nokia 9140';<br> 7: buffer:=' 键盘: Japanese';<br> end;<br> memo1.lines.add(buffer);<br> <br> file://获取键盘功能键数目<br> memo1.lines.add(' 功能键数目: '+inttostr(getkeyboardtype(2)));<br> <br> memo1.Lines.add('显示器分辨率: '+inttostr(getsystemmetrics(SM_CXSCREEN)) +'x'+<br> inttostr(getsystemmetrics(SM_CYSCREEN)));<br> file://获取鼠标按键数目<br> memo1.Lines.add(' 鼠标: '+inttostr(getsystemmetrics(SM_CMOUSEBUTTONS))+'键');<br> <br> globalmemorystatus(meminfo); file://获取系统内存数量<br> memo1.lines.add(' 物理内存: '+inttostr(meminfo.dwTotalPhys div 1024)+' KB');<br> <br> i:=getsystemmetrics(SM_CLEANBOOT);<br> case i of<br> 0:buffer:='系统启动模式:正常模式';<br> 1:buffer:='系统启动模式:保护模式';<br> 2:buffer:='系统启动模式:网络保护模式';<br> end;<br> memo1.lines.add(buffer);<br> <br></内容>
</数据>
- <数据>
<名称>利用API和注册表获取系统信息下</名称>
<类别>DelphiAPI</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 12:01:46</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>注册表</关键字2>
<关键字3>系统信息</关键字3>
<内容简介 />
<内容>x:=getsystemmetrics(SM_ARRANGE); <br> file://获取系统最小化窗口的起始位置和排列方式<br> y:=x;<br> x:=x and 3;<br> y:=y and 12;<br> case x of<br> ARW_BOTTOMLEFT : buffer:=' 最小化窗口:自左下角';<br> ARW_BOTTOMRIGHT : buffer:=' 最小化窗口:自右下角';<br> ARW_TOPLEFT : buffer:=' 最小化窗口:自左上角';<br> ARW_TOPRIGHT : buffer:=' 最小化窗口:自右上角';<br> end;<br> case y of<br> ARW_LEFT : buffer:=buffer+'横向排列';<br> ARW_UP : buffer:=buffer+'纵向排列';<br> ARW_HIDE : buffer:=buffer+'隐藏';<br> end;<br> memo1.lines.add(buffer);<br> <br> getmem(computername,255); file://获取计算机名称和用户名<br> getmem(username,255);<br> i:=255;<br> getcomputername(computername,i);<br> memo1.lines.add(' 计算机名称: '+computername);<br> getusername(username,i);<br> memo1.lines.add(' 用户名: '+username);<br> freemem(computername);<br> freemem(username);<br> <br> getsysteminfo(cpuinfo); file://获取CPU类型<br> case cpuinfo.dwProcessorType of<br> 386 : buffer:=' CPU类型: 386';<br> 486 : buffer:=' CPU类型: 486';<br> 586 : buffer:=' CPU类型: Pentium';<br> end;<br> memo1.Lines.add(buffer);<br> <br> file://从注册表中获取CPU标识,Windows版本,<br> 产品标识,注册单位名称及用户名<br> myreg:=Tregistry.Create;<br> myreg.RootKey:=HKEY_LOCAL_MACHINE;<br> if myreg.OpenKey('hardware\descriptionsystem\centralprocessor\0',false) then<br> memo1.lines.add(' CPU标识:<br> '+myreg.ReadString('VendorIdentifier'));<br> myreg.closekey;<br> if myreg.openkey('software\microsoft\ windows\currentversion',false) then <br> begin<br> memo1.lines.add(' windows版本: '+myreg.ReadString('Version'));<br> memo1.lines.add(' 版本号: '+myreg.ReadString('VersionNumber')+' '+myreg.ReadString('Subversionnumber'));<br> memo1.lines.add(' 产品标识: '+myreg.Readstring('ProductID'));<br> memo1.lines.add('注册单位名称: '+myreg.readstring('RegisteredOrganization'));<br> memo1.lines.add(' 注册用户名: '+myreg.readstring('RegisteredOwner'));<br> end;<br> myreg.CloseKey;<br> myreg.Free;<br> end;<br> end</内容>
</数据>
- <数据>
<名称>百叶窗图形特效</名称>
<类别>动画</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-05 23:09:56</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>图形特效</关键字2>
<关键字3>百叶窗</关键字3>
<内容简介 />
<内容>在Powerpoint这样的软件中,各种各样的图形特效层出不穷,其中“百叶窗”的切换效果尤为新颖奇特。在VB中实现这样的图形特效十分简单方便。其方法是调用WINDOWS的API函数Bitblt。BitBlt函数就类似于C语言中的getimage、putimage两个函数的组合运用。BitBlt原意是“Bit Block Transfer”,其主要用途是位图的复制。用BitBlt函数显示图形特效,其原理十分简单,制作时先在表单中绘制两个图片框,将图片存入一个图片框,同时将另一个图片框设为空,然后调用BitBlt函数将第一个图片框中的图形一部分一部分地复制到第二个图片框中,这样就可以实现千奇百怪的图形特效。其步骤如下:<br> <br>   在VB环境中新建一个窗体,绘制两个图片框picSour和picDest,两个命令按钮cmdShow和cmdExit。首先在窗体的通用过程中声明BitBlt函数即所需要的常量名,在载入窗体同时在picSour中载入图片,在按钮cmdShow的事件中调用BitBlt函数。程序如下:<br> API函数声明:<br> <br> Declare Function BitBlt Lib″GDI″(ByVal hDestDC As Integer,ByVal X As Integer,ByVal Y As Integer,ByVal nWidth AS Integer,ByVal nHeight As Integer,ByVal hSrcDC As Integer,ByVal xSrc As Integer,ByVal ySrc As Integer,ByVal dwRop As Long)As Integer <br> <br>   Const COPY-PUT=&HCC0020′BitBlt的15种算法之一,表示直接拷贝<br>   载入图片:<br> <br> Sub Form-Load()<br> picsour.Picture=LoadPicture(″c:\windows\LEAVES.bmp″)<br> picsour.ScaleMode=3′以象素为单位<br> End Sub <br> <br> 显示“百叶窗”的切换效果:<br> <br> Sub Comshow-Click()<br> H%=picsour.ScaleHeight<br> W%=picsour.ScaleWidth<br> scanlines=4<br> For i=0 To(scanlines-1)<br> For j=i To H% Step scanlines<br> s%=BitBlt%(picdest.hDC,0,j,W%,1,picsour.hDC,0,j,copy-Put)<br> delay 500′延时<br> Next j<br> Next i<br> End Sub <br> <br>   其中delay是一个通用子过程,用于延时,以便于能看清楚切换效果。代码如下: <br> <br> Sub delay(delaytime As Integer)<br> For i=1 To delaytime<br> Next i<br> End Sub <br> <br>   通过这样简单的程序就可以实现“百叶窗”的切换特效,其实,只要有合适的算法,运用BitBlt函数能够实现的图形特效是无穷的。有兴趣的读者可以查阅有关VB的参考书。</内容>
</数据>
- <数据>
<名称>实现平面工具栏下</名称>
<类别>控件特效</类别>
<数据来源 />
<来源时间>NULL</来源时间>
<保存时间>2002-01-08 18:13:17</保存时间>
<删除>False</删除>
<删除时间>NULL</删除时间>
<关键字1>API</关键字1>
<关键字2>工具栏</关键字2>
<关键字3>平面</关键字3>
<内容简介 />
<内容>【参数表】<br> hWnd1 ---------- Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) <br> <br> hWnd2 ---------- Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 <br> <br> lpsz1 ---------- String,欲搜索的类名。零表示忽略 <br> <br> lpsz2 ---------- String,欲搜索的类名。零表示忽略 <br> <br> Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _<br> (ByVal hWnd1 As Long, _<br> ByVal hWnd2 As Long, _<br> ByVal lpsz1 As String, _<br> ByVal lpsz2 As String) As Long <br> <br> <br> 【VB声明】 <br> <br> Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long  <br> <br> 【说明】<br> 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum,<br> SendMessageByString是该函数的“类型安全”声明形式 <br> <br> 【返回值】<br> Long,由具体的消息决定 <br> <br> 【参数表】<br> hwnd ----------- Long,要接收消息的那个窗口的句柄 <br> <br> wMsg ----------- Long,消息的标识符 <br> <br> wParam --------- Long,具体取决于消息 <br> <br> lParam --------- Any,具体取决于消息 <br> <br> Private Declare Function SendMessage Lib "user32" Alias _<br> "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _<br> ByVal wParam As Integer, ByVal lParam As Any) As Long <br> 设置工具栏为新的样式 <br> <br> Private Sub SetToolbar(tBar As Toolbar)<br> Dim lngResult As Long<br> Dim lngHWND As Long<br> Dim lngStyle As Long  <br> <br> 得到Toolbar的句柄 <br> <br> lngHWND = FindWindowEx(tBar.hwnd, 0&, "ToolbarWindow32", vbNullString) <br> <br> 得到原有的Toolbar的样式<br> <br> lngStyle = SendMessage(lngHWND, TB_GETSTYLE, 0&, 0&)  <br> <br> 设置一个图形在上、文字在下的平面工具栏 <br> <br> lngStyle = lngStyle Or TBSTYLE_FLAT  <br> <br> 用API函数实现工具栏的新样式 <br> <br> lngResult = SendMessage(lngHWND, TB_SETSTYLE, 0, lngStyle)  <br> <br> 刷新工具栏 <br> <br> tBar.Refresh<br> End Sub <br> <br> Private Sub exitfile_Click()<br> Unload Me<br> End Sub <br> <br> Private Sub Form_Load()  <br> <br> 调用函数改变工具栏 <br> <br> Call SetToolbar(Me.Toolbar1) <br> <br> End Sub</内容>
</数据>

741

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧