VB6打开文件速度慢

如题,我用VB做上位机,于单片机232通讯,但是用VB打开HEX文件时,速度很慢,才10多K的一个HEX文件,居然花了差不多一分钟,以下是VB代码,请各位DX拍砖!

'模块级变量,用于本窗体所有过程
Private Slave_Is_Ready As Byte
Private Write_Is_Doing As Byte
Private Timer1_Ovf_Count As Integer



'一些进制转换函数
'字符串转十六进制
Function String_To_Hex(a As String)
Dim b As String
Dim Data As Integer
b = Mid(a, 1, 1)

'取高4位
If Asc(b) > 64 And Asc(b) < 71 Then 'A-F
String_To_Hex = (Asc(b) - 55) * 16
ElseIf Asc(b) > 47 And Asc(b) < 58 Then '0-9
String_To_Hex = (Asc(b) - 48) * 16
End If
'取低4位
b = Mid(a, 2, 1)
If Asc(b) > 64 And Asc(b) < 71 Then 'A-F
String_To_Hex = String_To_Hex + (Asc(b) - 55)
ElseIf Asc(b) > 47 And Asc(b) < 58 Then '0-9
String_To_Hex = String_To_Hex + (Asc(b) - 48)
End If
String_To_Hex = Hex(String_To_Hex)
End Function

'字符串转十进制数
Function String_To_Dec(a As String)
Dim b As String
Dim Data As Integer
b = Mid(a, 1, 1)

'取高4位
If Asc(b) > 64 And Asc(b) < 71 Then 'A-F
String_To_Dec = (Asc(b) - 55) * 16
ElseIf Asc(b) > 47 And Asc(b) < 58 Then '0-9
String_To_Dec = (Asc(b) - 48) * 16
End If
'取低4位
b = Mid(a, 2, 1)
If Asc(b) > 64 And Asc(b) < 71 Then 'A-F
String_To_Dec = String_To_Dec + (Asc(b) - 55)
ElseIf Asc(b) > 47 And Asc(b) < 58 Then '0-9
String_To_Dec = String_To_Dec + (Asc(b) - 48)
End If
End Function





'菜单事件

'菜单关于
Private Sub about_Click()
Dim Ret_Val As Integer
Ret_Val = MsgBox("Bootloader Ver1.0.0", 4096, "关于")
End Sub




'命令按钮控件

'清除发送文本框按钮
Private Sub Cmd_ClrSendbox_Click()
Sendbox.Text = ""
End Sub


'打开文件按钮
Private Sub Cmd_Openfile_Click()
Dim File_Name As String
Dim Read_Buff As String
Dim Data_String As String
Dim Total_Bytes As Integer
'先清空文本框显示的内容
Sendbox.Text = ""
Total_Bytes = 0

'打开文件
Dlg_Openfile.CancelError = True
On Error GoTo ErrHandler
Dlg_Openfile.Filter = "十六进制文件(*.hex)|*.hex" '| 所有文件(*.*) | *.* " '设置文件过滤器
Dlg_Openfile.FilterIndex = 3 '指定默认过滤器
Dlg_Openfile.Flags = &H4& '对话框含有帮助按钮
Dlg_Openfile.ShowOpen '显示对话框
File_Name = Dlg_Openfile.FileName

'显示待写入数据
Open File_Name For Input As #1
While Not EOF(1)
Line Input #1, Read_Buff 'line input #1, 变量名 从#1文件中读出一行并赋值给变量

Data_String = Mid(Read_Buff, 2, 2)
Length = String_To_Dec(Data_String) '取本行字节数
Total_Bytes = Total_Bytes + Length
For i = 0 To Length - 1 Step 1
If i = Length - 1 Then
Sendbox.Text = Sendbox.Text + Mid(Read_Buff, 10 + i * 2, 2) + vbCrLf
Else
Sendbox.Text = Sendbox.Text + Mid(Read_Buff, 10 + i * 2, 2) + " "
End If
Next i

Wend
Close #1
Data_String = Str(Total_Bytes)
Mesg_Clew.Caption = "总共 " + Data_String + " 字节"
ErrHandler:
Exit Sub
End Sub


'打开串口按钮
Private Sub Open_Comm_Click()
If Open_Comm.Caption = "打开串口" Then
'获取串口设置参数
'一定要首先关闭通信端口才能进行设置

'获得波特率
MSComm1.Settings = Combo_Baudrate.Text
'取得端口号
Select Case Combo_Comm.Text
Case "COM1"
MSComm1.CommPort = 1
Case "COM2"
MSComm1.CommPort = 2
Case "COM3"
MSComm1.CommPort = 3
Case "COM4"
MSComm1.CommPort = 4
Case "COM5"
MSComm1.CommPort = 5
Case "COM6"
MSComm1.CommPort = 6
Case "COM7"
MSComm1.CommPort = 7
Case "COM8"
MSComm1.CommPort = 8
End Select
'一定不要忘了开通信端口
MSComm1.PortOpen = True

'上位机指示状况改变
Combo_Baudrate.Enabled = False
Combo_Comm.Enabled = False
Cmd_Write.Enabled = True
Open_Comm.MaskColor = &HFF&
Open_Comm.Caption = "关闭串口"
Shape1.FillColor = &HC0&
ElseIf Open_Comm.Caption = "关闭串口" Then
'关闭通信端口
MSComm1.PortOpen = False
Combo_Baudrate.Enabled = True
Combo_Comm.Enabled = True
Cmd_Write.Enabled = False
Shape1.FillColor = &HC000&
Open_Comm.Caption = "打开串口"
End If
End Sub

'烧写程序按钮
'
Private Sub Cmd_Write_Click()
'首先发送一个字符'w'或者'W'到下位机,等待下位机发回"W"字符
MSComm1.Output = "W"
If Slave_Is_Ready Then

End If

' Slave_Is_Ready = 0
' Do While Slave_Is_Ready = 0
' If Timer1_Ovf_Count >= 100 Then '5s的超时允许
' Timer1_Ovf_Count = 0
' Exit Do
' End If
' Loop
'
' Write_Is_Doing = 1
' Do While Write_Is_Doing = 1
' If Timer1_Ovf_Count >= 3600 Then '3分钟的超时允许
' Timer1_Ovf_Count = 0
' Exit Do
' End If
' Loop


End Sub






'窗体初始化
Private Sub Form_Load()
'初始化界面
'初始化下拉菜单
Combo_Baudrate.AddItem "2400"
Combo_Baudrate.AddItem "4800"
Combo_Baudrate.AddItem "9600"
Combo_Baudrate.AddItem "19200"
Combo_Baudrate.AddItem "38400"
Combo_Baudrate.AddItem "56000"
Combo_Baudrate.AddItem "57600"
Combo_Baudrate.AddItem "115200"
Combo_Comm.AddItem "COM1"
Combo_Comm.AddItem "COM2"
Combo_Comm.AddItem "COM3"
Combo_Comm.AddItem "COM4"
Combo_Comm.AddItem "COM5"
Combo_Comm.AddItem "COM6"
Combo_Comm.AddItem "COM7"
Combo_Comm.AddItem "COM8"
'初始化命令按钮
Cmd_Write.Enabled = False
'初始化输出框

'初始化定时器
Timer1.Enabled = True
'初始化串口
MSComm1.InputLen = 1 '设置一次从接收缓冲区读取字节数,0表示一次读取所有数据
MSComm1.InputMode = comInputModeText '设置input属性,以文本方式取回传入的数据
MSComm1.InBufferSize = 512 '设置或返回接收缓冲区的字节数
MSComm1.InBufferCount = 0
MSComm1.OutBufferSize = 512 '
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1 '设置为1,则接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件;设置为0,则不产生OnComm事件
MSComm1.SThreshold = 1 '设置为1,则当传输缓冲区完全空时,数据传输事件不会产生OnComm事件;设置为0,则不会产生OnComm事件

End Sub









'串口MSComm事件
Private Sub MSComm1_OnComm()
'MSComm控件把17个事件归并为一个事件OnComm,用属性CommEvent的17个值来区分不同触发
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive

Select Case MSComm1.Input

Case "W":
'下位机请求上位机发送数据块
'一个数据块格式: 0x01 + 数据块编号+数据块编号反码+128字节数据+2字节的CRC校验码
'以下是将原始数据转成十六进制发送出去, 这样做觉得VB真的恶心
'开始发送数据块

Case " ":
Case Else
End Select

Case Else
End Select
End Sub



Private Sub Timer1_Timer()
Time_Disp.Caption = Now
End Sub
...全文
534 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
tbage2008 2012-07-07
  • 打赏
  • 举报
回复
学习了...
AddDark 2011-10-18
  • 打赏
  • 举报
回复
占位留名,需时便取
橘子皮... 2011-07-21
  • 打赏
  • 举报
回复
可有这样的读写文件的模块???
可西哥 2008-07-10
  • 打赏
  • 举报
回复
哈,老马提到偶,偶也改了改代码

Public Sub Main()
Debug.Print GetHexText2("C:\test.dat")

End Sub
Private Function GetHexText(ByVal theFileName As String) As String()
Dim Buff As String, LineBuff() As String, OutBuff() As String
Dim tmpI As Long, tmpJ As Long, tmpK As Long, tmpStr() As String

Open theFileName For Binary As #1
Buff = Space(LOF(1)) '一次性读入.只要文件不大于50M的话就比较快
Get #1, , Buff
Close #1

ReDim OutBuff(0)
LineBuff = Split(Buff, vbCrLf) '先按行拆分

For tmpI = 0 To UBound(LineBuff) '对每行进行循环处理
If Len(LineBuff(tmpI)) > 12 Then '有效行应该不会小于12个字符
ReDim tmpStr(15)
ReDim Preserve OutBuff(UBound(OutBuff) + 1)
tmpK = 0

Buff = Mid(LineBuff(tmpI), 9, 32) '从第9个字符开始的32个字符,貌似也不变
For tmpJ = 1 To 31 Step 2
tmpStr(tmpK) = Mid(Buff, tmpJ, 2) '每两个字符放到一个数组元素中去
tmpK = tmpK + 1
Next tmpJ
OutBuff(UBound(OutBuff)) = Join(tmpStr, " ") '用JOIN一次性填好
End If
Next tmpI
GetHexText = OutBuff
End Function

Private Function GetHexText2(ByVal theFileName As String) As String
Dim Buff() As Byte '原始数据
Dim lngLen As Long '数据长度
Dim OutBuff() As Byte '目标数组
Dim tmpI As Long '源数据指针
Dim tmpJ As Long '临时变量
Dim tmpK As Long '复制到目标位置指针
Dim tmpStr() As String

Open theFileName For Binary As #1
lngLen = LOF(1) - 1
ReDim Buff(lngLen) '一次性读入.只要文件不大于50M的话就比较快
Get #1, , Buff
Close #1

ReDim OutBuff(lngLen) '估计生成的数据跟原始的差不多,因为中间有加空格
tmpI = 0
tmpK = 0
Do While tmpI <= lngLen '对数据进行处理
'判断是否一行的开始,判断":"号
If Buff(tmpI) = 58 Then
'跳过前面8位的地址
tmpI = tmpI + 9
'开始复制8个数据,一个数据占2位
For tmpJ = 1 To 16 Step 2
OutBuff(tmpK) = Buff(tmpI)
OutBuff(tmpK + 1) = Buff(tmpI + 1)
OutBuff(tmpK + 2) = 32 '加一个空格
tmpI = tmpI + 2 '源指针移2
tmpK = tmpK + 3 '目标指针向后移3
Next
'加个回车换行
OutBuff(tmpK) = 10
OutBuff(tmpK + 1) = 13
tmpK = tmpK + 2
'直接到下一行
Call GoNextLine(Buff, tmpI)
Else
'不是":"号,再继续找
tmpI = tmpI + 1
End If
Loop
GetHexText2 = StrConv(OutBuff, vbUnicode)
End Function


'定位到下一行
Private Sub GoNextLine(dat() As Byte, ByRef i As Long)
Dim lngT As Long

lngT = UBound(dat)

Do While i < lngT
If dat(i) = &HD Then
If i + 1 <= lngT Then
If dat(i + 1) = &HA Then
i = i + 1
Exit Do
End If
End If
End If
i = i + 1
Loop

End Sub

GetHexText2是偶的函数
没有大文件,让老马帮偶测测
嗷嗷叫的老马 2008-07-10
  • 打赏
  • 举报
回复
最新测试结果........真的好快-_-

服啊,N次倒在XMXOXO的剑下-_-

Option Explicit

Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Public Sub Main()
Dim i As String, J As Long

J = GetTickCount
i = GetHexText("d:\temp\1.txt") '我的方法,8秒左右
MsgBox GetTickCount - J
Debug.Print i

J = GetTickCount
i = GetHexText2("d:\temp\1.txt") 'XMXOXO的方法,1.6秒左右-_-
MsgBox GetTickCount - J
Debug.Print i
End Sub

Private Function GetHexText(ByVal theFileName As String) As String
Dim Buff As String, LineBuff() As String, OutBuff() As String
Dim tmpI As Long, tmpJ As Long, tmpK As Long, tmpStr() As String

Open theFileName For Binary As #1
Buff = Space(LOF(1)) '一次性读入.只要文件不大于50M的话就比较快
Get #1, , Buff
Close #1

ReDim OutBuff(0)
LineBuff = Split(Buff, vbCrLf) '先按行拆分

For tmpI = 0 To UBound(LineBuff) '对每行进行循环处理
If Len(LineBuff(tmpI)) > 12 Then '有效行应该不会小于12个字符
ReDim tmpStr(15)
ReDim Preserve OutBuff(UBound(OutBuff) + 1)
tmpK = 0

Buff = Mid(LineBuff(tmpI), 9, 32) '从第9个字符开始的32个字符,貌似也不变
For tmpJ = 1 To 31 Step 2
tmpStr(tmpK) = Mid(Buff, tmpJ, 2) '每两个字符放到一个数组元素中去
tmpK = tmpK + 1
Next tmpJ
OutBuff(UBound(OutBuff)) = Join(tmpStr, " ") '用JOIN一次性填好
End If
Next tmpI
GetHexText = Join(OutBuff, vbCrLf)
End Function
'************* 可爱的分割条

Private Function GetHexText2(ByVal theFileName As String) As String
Dim Buff() As Byte '原始数据
Dim lngLen As Long '数据长度
Dim OutBuff() As Byte '目标数组
Dim tmpI As Long '源数据指针
Dim tmpJ As Long '临时变量
Dim tmpK As Long '复制到目标位置指针
Dim lngDats As Long '数据个数


Open theFileName For Binary As #1
lngLen = LOF(1) - 1
ReDim Buff(lngLen) '一次性读入.只要文件不大于50M的话就比较快
Get #1, , Buff
Close #1

ReDim OutBuff(lngLen) '估计生成的数据跟原始的差不多,因为中间有加空格
tmpI = 0
tmpK = 0
lngDats = 0
Do While tmpI <= lngLen '对数据进行处理
'判断是否一行的开始,判断":"号
If Buff(tmpI) = 58 Then
'跳过前面8位的地址
tmpI = tmpI + 9
'开始复制8个数据,一个数据占2位
For tmpJ = 1 To 16 Step 2
OutBuff(tmpK) = Buff(tmpI)
OutBuff(tmpK + 1) = Buff(tmpI + 1)
OutBuff(tmpK + 2) = 32 '加一个空格
tmpI = tmpI + 2 '源指针移2
tmpK = tmpK + 3 '目标指针向后移3
lngDats = lngDats + 1
Next
'输出多少个数据后需要换行?
If lngDats Mod 16 = 0 Then
'加个回车换行
OutBuff(tmpK) = &HD
OutBuff(tmpK + 1) = &HA
tmpK = tmpK + 2
End If
'直接到下一行
Call GoNextLine(Buff, tmpI)
Else
'不是":"号,再继续找
tmpI = tmpI + 1
End If
Loop
ReDim Preserve OutBuff(tmpK)
GetHexText2 = StrConv(OutBuff, vbUnicode)
End Function

'定位到下一行
Private Sub GoNextLine(dat() As Byte, ByRef i As Long)
Dim lngT As Long

lngT = UBound(dat)

Do While i < lngT
If dat(i) = &HD Then
If i + 1 <= lngT Then
If dat(i + 1) = &HA Then
i = i + 1
Exit Do
End If
End If
End If
i = i + 1
Loop
End Sub
可西哥 2008-07-10
  • 打赏
  • 举报
回复
老马要求还挺高,差一点都不行,又改了改:

Private Function GetHexText2(ByVal theFileName As String) As String
Dim Buff() As Byte '原始数据
Dim lngLen As Long '数据长度
Dim OutBuff() As Byte '目标数组
Dim tmpI As Long '源数据指针
Dim tmpJ As Long '临时变量
Dim tmpK As Long '复制到目标位置指针
Dim lngDats As Long '数据个数


Open theFileName For Binary As #1
lngLen = LOF(1) - 1
ReDim Buff(lngLen) '一次性读入.只要文件不大于50M的话就比较快
Get #1, , Buff
Close #1

ReDim OutBuff(lngLen) '估计生成的数据跟原始的差不多,因为中间有加空格
tmpI = 0
tmpK = 0
lngDats = 0
Do While tmpI <= lngLen '对数据进行处理
'判断是否一行的开始,判断":"号
If Buff(tmpI) = 58 Then
'跳过前面8位的地址
tmpI = tmpI + 9
'开始复制8个数据,一个数据占2位
For tmpJ = 1 To 16 Step 2
OutBuff(tmpK) = Buff(tmpI)
OutBuff(tmpK + 1) = Buff(tmpI + 1)
OutBuff(tmpK + 2) = 32 '加一个空格
tmpI = tmpI + 2 '源指针移2
tmpK = tmpK + 3 '目标指针向后移3
lngDats = lngDats + 1
Next
'输出多少个数据后需要换行?
If lngDats Mod 16 = 0 Then
'加个回车换行
OutBuff(tmpK) = &HD
OutBuff(tmpK + 1) = &HA
tmpK = tmpK + 2
End If
'直接到下一行
Call GoNextLine(Buff, tmpI)
Else
'不是":"号,再继续找
tmpI = tmpI + 1
End If
Loop
ReDim Preserve OutBuff(tmpK)
GetHexText2 = StrConv(OutBuff, vbUnicode)
End Function


'定位到下一行
Private Sub GoNextLine(dat() As Byte, ByRef i As Long)
Dim lngT As Long

lngT = UBound(dat)

Do While i < lngT
If dat(i) = &HD Then
If i + 1 <= lngT Then
If dat(i + 1) = &HA Then
i = i + 1
Exit Do
End If
End If
End If
i = i + 1
Loop

End Sub
嗷嗷叫的老马 2008-07-09
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim I() As String, J As Long

I = GetHexText("D:\calendar.hex")
text1.text=join(i,vbcrlf)
End Sub

看看速度怎样
  • 打赏
  • 举报
回复
帅,成了,很快!
  • 打赏
  • 举报
回复
呵呵,真的不错,myjian,不过你的代码是把内容打开再输出到立即窗口,我用下面这种方法把内容输入到文本框,但是效果跟之前的差不多了,一个字慢
这就是我的代码
Private Sub Command1_Click()
Dim I() As String, J As Long

I = GetHexText("D:\calendar.hex")
For J = 1 To UBound(I)
Text1.Text = Text1.Text & I(J) & vbCrLf
Next J
End Sub
lingshao0909 2008-07-08
  • 打赏
  • 举报
回复
学习了,以后肯定有用的着的时候,呵呵。虽然来这里混了不久,还是学到了很多东西啊
  • 打赏
  • 举报
回复
哇噻,是吗?太棒了,我试下去
嗷嗷叫的老马 2008-07-08
  • 打赏
  • 举报
回复
测试了一个12.3M的文件,用你那段文件片断不断复制而成.

我这里花了约7.3秒,应该还未做到最优,但于你的应用,是足够了吧.

记得以前XMXOXO处理一个70M的文件,最快花了4.5秒......
嗷嗷叫的老马 2008-07-08
  • 打赏
  • 举报
回复
'添加一个按钮,改一下你HEX文件的路径,就可以测试了.在我这里速度还可以.
Option Explicit

Private Sub Command1_Click()
Dim I() As String, J As Long

I = GetHexText("D:\temp\1.txt")
For J = 1 To UBound(I)
Debug.Print I(J)
Next J
End Sub

Private Function GetHexText(ByVal theFileName As String) As String()
Dim Buff As String, LineBuff() As String, OutBuff() As String
Dim tmpI As Long, tmpJ As Long, tmpK As Long, tmpStr() As String

Open theFileName For Binary As #1
Buff = Space(LOF(1)) '一次性读入.只要文件不大于50M的话就比较快
Get #1, , Buff
Close #1

ReDim OutBuff(0)
LineBuff = Split(Buff, vbCrLf) '先按行拆分

For tmpI = 0 To UBound(LineBuff) '对每行进行循环处理
If Len(LineBuff(tmpI)) > 12 Then '有效行应该不会小于12个字符
ReDim tmpStr(15)
ReDim Preserve OutBuff(UBound(OutBuff) + 1)
tmpK = 0

Buff = Mid(LineBuff(tmpI), 9, 32) '从第9个字符开始的32个字符,貌似也不变
For tmpJ = 1 To 31 Step 2
tmpStr(tmpK) = Mid(Buff, tmpJ, 2) '每两个字符放到一个数组元素中去
tmpK = tmpK + 1
Next tmpJ
OutBuff(UBound(OutBuff)) = Join(tmpStr, " ") '用JOIN一次性填好
End If
Next tmpI
GetHexText = OutBuff
End Function


函数GetHexText是封装好了的,直接就把你要的那部分内容格式化后返回了,每个元素就是一个有效行.
  • 打赏
  • 举报
回复
老马出马了,呵呵,期待中
  • 打赏
  • 举报
回复
10楼的朋友是说myjian是这方面的行家吗?
嗷嗷叫的老马 2008-07-08
  • 打赏
  • 举报
回复
我来写写.
lingshao0909 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shawn309155886 的回复:]
对,就是那个东东,不知道楼上的这位朋友搞过单片机烧写上位机或者bootloader没,这个东东就是它们最基本的一部分
[/Quote]
楼上的朋友是搞这个的行家
  • 打赏
  • 举报
回复
对,就是那个东东,不知道楼上的这位朋友搞过单片机烧写上位机或者bootloader没,这个东东就是它们最基本的一部分
  • 打赏
  • 举报
回复
我程序中是采用逐行读出再逐行处理后,逐行输出到文本框中的
嗷嗷叫的老马 2008-07-08
  • 打赏
  • 举报
回复
就是你的HEX文件-_-......
加载更多回复(6)
由本人第一次尝试制作的录像视频教程,由于电脑速度,播放时间较,请谅解。 本录像讲解最基础的VB封装ASP代码生成DLL的制作教程,适合初级学习者参考。也是本人学习VB制作ASP组件的第一个尝试,录像基本成功。 用vb编写asp组件(dll)示例 下面,将演示如何使用vb制作asp的dll组件... 1. 启动你的vb,选择activex dll图标,然后在点击菜单的工程>>引用,接 着在弹出的"引用"窗口从中选择 microsoft active server pages object library. 2. 给工程和类重命名,在asp中调用时,就全靠它了^_^!我们的工程名改 为aspdll,类名为demo.在asp中调用的方法是: set objreference = server.createobject("工程名.类名") 本例调用的相应代码如下: set objreference = server.createobject("aspdll.demo") 调用的方法和一般常见的,比如fso等组件的方法一模一样. 心动了吧,呵呵,下面我们继续.... 3. 接着,我们开始编写代码,打开我们刚才新建工程类窗口,第一步,先声 明我们要用到的变量.主要是在vb声明替代asp几大对象的变量名,定义这 asp的几大对象后,我们就可以像在asp环境中调用类似request,server等 这样的几大对象了.(声明的变量名完全可以和asp对象名一样)代码如下: '********************************************** private mys criptingcontext as s criptingcontext private myapplication as application private myrequest as request private myresponse as response private myserver as server private mysession as session '********************************************** 4. 声明完变量后,我们必须在类中写onstartpage子函数.本函数的作用是 当用户访问一个带有本组件的asp文件时,iis就会把s criptingcontext传 送给我们vb组件对象.这个s criptingcontext包括了全部的asp方法和属性 .这样,就使得我们有能力访问所有asp的对象.代码如下: '***************************************************************** public sub onstartpage(passeds criptingcontext as s criptingcontext) set mys criptingcontext = passeds criptingcontext set myapplication = mys criptingcontext.application set myrequest = mys criptingcontext.request set myresponse = mys criptingcontext.response set myserver = mys criptingcontext.server set mysession = mys criptingcontext.session end sub '***************************************************************** 通过上面的函数,我们在asp中调用本组件后,上面的几大对象就完全可以 像平时我们在asp使用一样了,举个例子: 在asp中实现接收提交的表单值并输出屏幕: <% formvalue=request.form("username") response.write ("你提交的用户名是"&myformvalue&",欢迎您!") %> 在vb中实现方法是: formvalue=myrequest.form("username") myresponse.write ("你提交的用户名是"&myformvalue&",欢迎您!") 5. 相对应于onstartpage函数,我们还要编写一个关闭onstartpage中对象 的onendpage函数,代码如下: '********************************* public sub onendpage() set mys criptingcontext = nothing set myapplication = nothing set myrequest = nothing set myresponse = nothing set myserver = nothing set mysession = nothing end sub '******************************** 6.通过编写上面的代码,我们在vb中编写asp组件实例的环境已经具备了, 下面,我就尝试写两个与asp中基本相类似的函数,也就是说,关键部位就在 这里了,你完全可以把你所有的asp源码封装在这里... 先写个最简单的输出屏幕信息函数: '******************************************** public sub welcomeinfo() myresponse.write ("阿里西西_web开发,欢迎访www.alixixi.com!") end sub '******************************************** 再写个带参数传递及显示now()现在时间的函数: '********************************** public sub setinfo(content as string) myresponse.write content & "
" myresponse.write "现在的时间是:" & now() end sub '********************************** 通过上面的asp代码实例,你会发现其实这和asp源码基本没有区别^_^ 7. 好了,整个类就编写完了,我们开始打包封装成dll.我们先保存工程, 这里我们保存到e:\vbdll,接着选择菜单上的文件>>生成aspdll.dll,很 快的dll组件就封装并生成完毕了. 8. 生成dll文件后,我们开始调试和使用.在系统运行栏输入cmd,进入dos 命令行状态,我们要注册刚才生成的dll组件,注册方法是可以直接输入 regsvr32 e:\vbdll\aspdll.dll ,为了安装方便,你同时可以写个批处理 文件,这里不一一举例了...好,注册成功! 9.注册完dll组件后,我们针对刚才的组件,按照上面介绍过的方法编写一 个asp文件来调试.代码如下: <% set redll = server.createobject("aspdll.demo") redll.welcomeinfo response.write "
" redll.setinfo("传递参数到服务器组件,并返回值及当前日期now()!") response.write "
" set redll = nothing %> 在iis中打开文件,屏幕显示:
概述 网际畅游 (MyIE)是一款精巧的基于IE为内核(需IE5.0或IE5.5的支持),在同一窗口可以打开多个页面,且没有数量限制,对系统资源占有率较少的浏览器。 网际畅游 (MyIE)是一个完全免费的软件,你可以免费使用,并且可以以任何形式传播该软件。 操作系统 支持Win9x/Win NT/Win2000/Win XP。 安装 MyIE属于免费的绿色软件,没有广告条,无需安装,解压到文件夹后可以直接使用。 现有主要功能(MyIE除IE5.0标准功能外,有自己的特色功能) 浏览功能: 多窗口浏览:你可以在MyIE内同时打开多个页面进行浏览,但对系统资源的占用率极少。 标签栏:当你打开多个网页时,却只使用一个窗口,你可以通过单击标签快速方便地切换网页。标签的位置可以在上部,也可在下部。(MyIE选项对话框/标签/标签位置/上部或下部) Tips:使用Ctrl-Tab可快速切换标签。 标签栏有三种形式:单行, 多行, 自适应。自适应标签会根据标签数量自动调整标签的宽度,使他们尽量保持在一行内。 图标化的进度显示: 在浏览时每个标签旁都有一个小图标来显示该页当前的下载进度。 当图标为白色时进度在0%-25%之间,当蓝色区域占四分之一时进度在25%-50%之间,以此类推。当图标消失时说明该页已经下载完毕了。红色图标说明下载完毕但你尚未看过。 关闭广告窗口:在你浏览网站时,你是否会经常遇到一些不请自来的广告窗口?现在你只要点击鼠标右键将不喜欢的窗口列入“加入窗口过滤器”来节省你上网的时间。 你也可以将某个Frame或IFrame的URL加入窗口过滤器,这个Frame或IFrame以后就不会下载了。 使用*过滤窗口:在过滤广告窗口时可以在URL中使用*来过滤一批相似的地址。但你可不要用*把所有的窗口都过滤掉哦! 使用自动窗口过滤:在编辑窗口过滤器中选择使用自动窗口过滤,MyIE会自动禁止那些不必要的广告窗口而不必把URL加入过滤列表中。每个窗口也可分别设置是否使用自动过滤弹出窗口功能而不影响其他窗口。 过滤重复窗口:在编辑窗口过滤器中选择过滤重复窗口,MyIE会自动重用已打开的相同URL的窗口,避免资源浪费。 下载控制:你可以为每个页面设置是否需要在网页中载入图片,声音,Script文件, Java Applet, ActiveX。你可以关闭图片来加快下载的速度。 脱机浏览:使用文件/脱机工作 可以在未联网的情况下浏览以前访问过的历史网页。 保存网页:MyIE可以保存网页中的所有内容, 也可以以原文件名保存网页的HTML代码(Alt-S),给喜欢简洁的网友。 快速保存:快速地保存浏览的网页,包括其中的图片等。 自动保存:类似于保存功能,但页面将自动保存到预先设定好的目录中而不再需要保存对话框。自动保存有4种方式可以选择:WEB页面为html, WEB页面为mht, 仅HTML,快速保存。可以在Myie选项的保存页面中选择默认的方式。同时还可以选择以站点分类保存到不同目录。页面将保存在以站点主名命名的子目录中。预先设定的保存目录也可在Myie选项的保存页面中设置。 域名完成:在地址栏输入网址时可以用Ctrl+Enter, Shift+Enter, Ctrl+Shift+Enter来帮你完成这个网址。他会为你加上http://www.及相应的后缀如:.com, .net, .com.cn。你可以在MyIE选项中修改它们。 一次打开窗口的最大值:在 MyIE选项中可设置这个值, 他规定了在批量打开窗口时, 每次的最大值。可根据你的习惯和电脑配置来调整,从而避免因失误而打开过多的窗口。 不弹出脚本错误提示框:在浏览某些网页时会出现脚本错误,要避免这个问题可以在MyIE选项中选中“不弹出脚本错误对话框”. 本地文件浏览:在工具栏上选择文件按钮,会出现一个类似文件管理器的窗口,其中列出了你的目录和文件, 双击文件即可进行浏览了。你可改变下部的文件类型列表以显示不同的文件类型。改变后可按旁边的刷新按钮刷新显示。如需禁止该功能可在myie.ini文件的Settings中加入Secure=1即可。 浏览用户资源:在工具栏上选择用户资源按钮,将出现用户资源窗口, 缺省的包括MyIE最新版本信息,股票查询,网络字典,免费邮件。该窗口的内容存放于resource.htm文件中, 大家可以修改他,放入你需要的网上资源。 自动滚屏:使用自动滚屏可帮助你浏览小说文章等较长的页面,滚屏适用于没有框架的网页。滚屏的速度有高中低三种,如果你觉得太快或太可以在ini文件中的[settings]下加入SpeedSeed = nn,nn为一数字,缺省为100。 越小则速度越快。建议不要小于50。 浏览模式:浏览模式为MyIE中的设置的一种组合,大家可在不同的时候使用不同的模式。目前设有自定义,标准,和新闻三种。使用中对设置的修改会自动保存在自定义模式中。 设置页面背景色:可改变页面的背景色方便阅读长文章。 为所有窗口设置背景色:可为所有的窗口设置当前的默认背景色。 自动设背景色:页面下载后自动设置为预设的背景色。 发送:可把页面或链接通过EMAIL发送给你的朋友。 活动标题图标:当MyIE正在下载页面时MyIE的窗口图标会持续转动。 支持下载工具。可以在MyIE选项中选择所使用的下载工具,这样当点击下载文件时可以调用该工具来下载。目前内置了NetAnts和FlashGet。 鼠标控制功能:可通过在页面空白处按住右键并移动鼠标来实现一些功能。目前有: 向下: 打开新窗口 向左: 后退 向右: 前进 先上再下: 刷新 右左右 或 先下再右: 关闭窗口 窗口管理: 激活新窗口:当你选择了激活新窗口, 每当新建一个窗口它就会成为当前的活动窗口。 否则新窗口将不会被激活。 当你在浏览新闻站点时就可以一次点好想要看的所有新闻, 它们将会在后面的窗口中依次打开打开新窗口:可选择在输入新地址,点收藏夹,历史,本地文件,页面内链接时打开新窗口而不影响当前窗口。 多窗口同时浏览:选择窗口/垂直平铺 可使你打开的所有浏览窗口平铺在主窗口内,使你一览无遗。 新建窗口: MyIE有4种新建窗口的方法, 新建空白窗口, 新建主页, 新建当前页, 从剪贴板新建。可在MyIE选项中选择默认的新建方法。 锁定窗口: 在标签上点右键, 选锁定该标签可锁定一个窗口。 当一个窗口被锁定,它就不会在关闭所有窗口时被关闭。且点链接时会在新窗口中打开。 关闭所有窗口: 可以关闭除了锁定窗口之外的所有窗口。 全屏浏览:使用全屏浏览(F11)将使MyIE占据整个桌面, 提供最大的浏览空间。 自动重用空窗口:当你在新窗口中打开网页的时候MyIE会在自动重用已存在的空窗口, 以节约系统的资源。 在新窗口中打开网页:如果你没有使用始终打开新窗口的功能但想在新窗口中打开一个网页,可在点收藏夹,链接,和历史中的网址时按住Ctrl键,则该网页将在新窗口中打开。 顺序切换窗口:当你打开了一个以上的窗口时,你可以用右上角的两个箭头按钮来顺序的切换当前窗口。 你还可用快捷键Ctrl+ <- 和Ctrl+ -> 或F2, F3来作顺序的切换。 同时Ctrl+Tab 仍可以默认的窗口次序切换当前窗口。快捷键F2 = Ctrl <-, F3 = Ctrl ->, Ctrl-1...Ctrl-9,Ctrl-0 代表窗口1 到 窗口10. 顺序激活窗口:当你关闭一个窗口的时候,下一个被激活的不一定是他旁边的窗口,有时会给浏览带来麻烦。 现在使用 MyIE选项/窗口/激活顺序 就可以解决这个问题。使用 向前 可在关闭当前窗口后激活他前面的一个窗口。使用 向后 可在关闭当前窗口后激活他后面的一个窗口。 为窗口改名:右击窗口标签,选择设置固定标签名。 你可输入一个新名字,他将代替原来的窗口名称。 若要恢复原名,只要删掉固定名字即可。 窗口保护:右击窗口标签,选择保护该窗口。 你可输入保护口令,以后若要访问该窗口必须有口令才行。 隐藏MyIE:用Alt+` 可隐藏或调出MyIE。 拖动链接到地址栏:可将页面上的连接拖动到地址栏上,从而在新窗口中打开这个连接。 拖动链接到标签栏:可将页面上的连接拖动到标签栏上的某个标签上, 在这个指定的窗口中打开链接 设置双击和中键击标签的动作:可在Myie选项的标签页面中为双击和中键击标签选择对应的功能。 目前可选的功能有:关闭窗口,保存当前页面,保存HTML,自动保存。 页面自动刷新功能,可定时刷新非活动窗口,如果是当前窗口则不刷新。刷新频率可在工具菜单或标签的右键菜单中设置。 撤消关闭窗口的列表。可撤消最近关闭的多个窗口。 拖动链接在新窗口中打开。通过拖动一个链接就可以将这个链接在新窗口中打开。 拖动标签:可用鼠标左键拖动标签重新排列标签的位置。 代理服务器: 使用代理服务器:代理服务器可使你突破网络的限制畅游Internet. 如果你已经设置了一个代理服务器, 就可以选“选项/使用代理服务器”来使用或关闭代理服务器。 该设置对所有的网页都有效。 使用Web代理: 网上有不少网站提供基于Web的代理服务, 它速度较快且比较稳定。 你可以为每个网页分别设置不同的Web代理或不使用代理。 可以选“选项/使用Web代理服务”来使用或关闭代理服务。 MyIE已经预先内置了一个代理了。当你为一个窗口选择了使用web代理后,在输入新网址或点了收藏夹中的网址时,就会通过该代理来访问了。 设置代理: 使用“选项/快速代理设置” 可以新增/修改/删除 代理服务器和Web代理服务。代理服务器的格式为:地址: 端口,如202.96.233.13:3128。 大家可以在网上找到不少免费的代理服务器。Web代理中可使用%s和%S来表示插入网址的位置,否则网址将插在代理末尾。MyIE可分类管理不同的代理,你可自行增加或删除代理种类。不过必须保留一个web代理。 使用多个代理服务器:你可以在一个MyIE浏览器中使用一个代理服务器, 然后再开一个MyIE浏览器使用别的代理服务器或不用。 这样你可以一边浏览国内的网站, 一边用代理服务器浏览国外的网站。 设置速度标签: 为了方便代理服务器和web代理的管理,你可以为每个代理设置一个速度标签来加以区分。速度标签有:很快,快速,一般,较,很,无效共6级。你可以在快速代理设置对话框中用右键菜单来设置。 使用工具条的按钮:工具条上有两个按钮:代理服务器和web代理。使用它们可以方便的选择和使用代理,效果和用菜单一样。 你刚用过的代理将作为缺省的设置,当你直接按按钮时就将使用这个缺省设置的代理了。 编辑Bypass 网址: 使访问那些地址时不通过代理服务器。每个地址以空格分开。 导出/导入代理服务器:使用导入导出功能可以和代理猎手配合使用,方便验证代理服务器。 快捷功能: 设置启动组:在收藏夹栏的收藏夹目录上的右键菜单中选设为启动组菜单,将该目录设为启动组。启动组将以粗体表示,可用于MyIE的第四种启动模式。这样你等于是拥有了一组Homepages了。 Tips: 不妨把目录“链接”设为启动组 打开启动组:打开你的启动组中的所有连接。你可把你的最精华的网址放在里面以方便随时打开它们。 网页缩写:打入长长的URL是不是很麻烦?或许你不想记住那些地址。那么你就需要缩写的功能。你可以为网址定义一个中文或英文的缩写,当你在地址栏中象输入URL一样输入缩写,它将被自动翻译成相应的网址。 一键通:为使你能更快捷的浏览喜欢的网页,你可以使用一键通为F2-F12键定义一个网址。只要你一按F*就可访问对应的网页。但这时F键所对应的其他快捷键将被屏蔽。 3721中文网址:选中 快捷/3721中文网址,就可使用3721中文网址了。不须使用其他客户端软件,只要在地址栏输入“电脑报”即可到电脑报网站了。 快捷组:应网友的要求加入了和Netcaptor兼容的快捷组。 只需将Netcaptor的*.cgp文件拷贝到MyIE目录下的groups目录中即可。双击组内网址可打开该网页。 将当前所有窗口另存为组:可将当前所打开的窗口网址另存为一个新的组。 自动填表:使用Alt-Q可自动填写当前页面中的表单,在填表前需用Alt-1来收集表单的数据,也可以用Alt-2把表单的数据保存为通用表单。当填表时如果没有相应的表单数据则使用通用表单的数据。注:该功能不适合多人共用的电脑,以免重要数据的泄露。 快捷搜索:只要在地址栏中输入如 yahoo keyword 就可以用yahoo来搜索该keyword。 使用设置快捷搜索可以定制所需要的搜索引擎的快捷名称。 状态栏的快捷按钮。状态栏上设置了四个快捷按钮,依次为脱机浏览,当前窗口使用自动过滤,激活新窗口,简易文本搜集面版。 简易搜集面版。用来暂存文本信息和图片。可拖放文本图片到状态栏按钮或搜集面版 上将文本图片保存起来。图片会保存到预设的图片保存目录中,方便收集图片。 收藏夹和链接: 收藏夹: MyIE具有和IE一致的添加到收藏夹,组织收藏夹,导出/导入收藏夹。 打开本层链接:收藏夹菜单中每级都有一项打开本层链接的菜单。 使用它可以打开这一层收藏夹的所有链接。 打开所有链接:链接栏上的第一个按钮是打开所有链接, 它可以打开链接中的所有网址。 收藏夹栏: 点击工具条上的收藏夹就会出现收藏夹栏。使用收藏夹栏的右键菜单可以删除,复制,在新窗口中打开网址。以及打开所有网址。 最爱网页:如果你的收藏夹有许多网址使你无从下手,你可以将其中最喜欢的网址设为最爱网页,他们将会以红色的图标表示出来。它将帮你提高上网的效率。 最爱目录:你可以将你最喜欢的收藏目录设为最爱目录,他们将会以红色的图标表示出来。它将帮你提高上网的效率。双击一个目录可打开所有网址。 打开本层我的最爱:收藏夹菜单中每级都有一项打开本层我的最爱的菜单。 使用它可以打开这一层收藏夹中所有最爱的网页。 使用单列的收藏菜单:如果你有一个很大的收藏夹,如果你使用Win98,建议你使用单列菜单。你可在 MyIE选项中选择。使用后如果菜单超过一屏的长度则会出现滚动按钮,可用来滚动菜单。 收藏条:将收藏夹中的目录以工具条的方式显示,方便你随时取用。如果你的目录很多可使用紧凑模式以去掉小图标。方法是:在ini文件的[settings]下加入CompactFavBar = 1 收藏夹排序:在收藏夹栏中可拖动收藏条目或目录来排序。 加入到当前收藏菜单:在收藏菜单的每个子菜单中增加了一个加入连接到当前目录的菜单项,可将当前页面的网址直接加入到当前的收藏目录中。 增强功能: 内置多种搜索引擎:MyIE内置了近100种中英文分类搜索引擎(查看/浏览栏/搜索),可以轻松查找你需要的资料。你只要输入关键字,然后选择所要用的搜索引擎。搜索结果将在不同的窗口中显示。 而且搜索引擎列表可以很方便的升级。 外部工具管理器:MyIE为用户所想,可以把用户上网经常用到的一些软件放在工具管理器内(如:Net vampire,IP工具包, 甚至拨号网络)方便你使用。使你不用离开MyIE就可以完成大部分上网功能. 而且你可以让工具随MyIE自动启动并自动关闭,可在外部工具管理器中设置。 清除历史记录:可以方便地清除你不需要的一些浏览记录(如Cookies,Cache和历史)。 设为缺省浏览器:选择 选项/设置为缺省浏览器, 回答"是"将MyIE设为缺省浏览器, "否"恢复上一次的设置。 六种启动模式: 打开空白页, 打开主页, 继续最后浏览的页面, 打开收藏夹的启动组(需预先在收藏夹中设定一个启动目录),打开收藏夹的启动组中的最爱网页,打开启动快捷组(需要预先设定). 让你一打开MyIE就看到你最喜欢的网站. 显示上网的IP地址: 选择工具/显示本机IP地址, 在状态栏上显示当前的IP地址。 设置皮肤:MyIE支持与IE兼容的皮肤。 将BMP图形文件复制到MyIE所在目录的myieskin子目录中,然后在工具/设置MyIE皮肤中选择相应的皮肤即可。 自定义工具条:应网友的要求加入了可自定义工具条按钮的功能。 MyIE选项:可让你修改一些MyIE的属性,使你更好的控制和使用MyIE. 系统资源:在Win98系统上,状态栏上会显示当前系统的资源数量。 空闲内存:在WinNT和Win2000下显示空闲的内存数。 Modem下载速度:在Win98系统上,状态栏上会显示当前modem的下载速度。 最小化到系统托盘:在MyIE选项中选择最小化到系统托盘即可使MyIE最小化到系统托盘中。 禁止状态栏上的滚动字符:选中 选项/禁止状态栏滚动字符 可以去掉那些干扰视线的滚动字符。 链接列表。使用查看中的页面链接可以列出当前页面内的所有链接,并可用过滤功能列出相应的链接。 锁定主页:可防止有的网页随便的修改你的主页,只有通过MyIE中的Internet选项才可以修改主页。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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