frmBrowser.frm
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:74k
源码类别:

浏览器

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Begin VB.Form frmBrowser 
  3.    BackColor       =   &H00800000&
  4.    Caption         =   " "
  5.    ClientHeight    =   6105
  6.    ClientLeft      =   1740
  7.    ClientTop       =   3270
  8.    ClientWidth     =   6300
  9.    BeginProperty Font 
  10.       Name            =   "宋体"
  11.       Size            =   9
  12.       Charset         =   0
  13.       Weight          =   400
  14.       Underline       =   0   'False
  15.       Italic          =   0   'False
  16.       Strikethrough   =   0   'False
  17.    EndProperty
  18.    HasDC           =   0   'False
  19.    Icon            =   "frmBrowser.frx":0000
  20.    LinkTopic       =   "Form1"
  21.    MDIChild        =   -1  'True
  22.    NegotiateMenus  =   0   'False
  23.    ScaleHeight     =   6105
  24.    ScaleWidth      =   6300
  25.    ShowInTaskbar   =   0   'False
  26.    Begin VB.CommandButton cmdScale 
  27.       Appearance      =   0  'Flat
  28.       Height          =   600
  29.       Left            =   240
  30.       MaskColor       =   &H00FF00FF&
  31.       Style           =   1  'Graphical
  32.       TabIndex        =   0
  33.       Top             =   240
  34.       UseMaskColor    =   -1  'True
  35.       Visible         =   0   'False
  36.       Width           =   600
  37.    End
  38. End
  39. Attribute VB_Name = "frmBrowser"
  40. Attribute VB_GlobalNameSpace = False
  41. Attribute VB_Creatable = False
  42. Attribute VB_PredeclaredId = True
  43. Attribute VB_Exposed = False
  44. '---------------------------------------------------------------------------------------
  45. ' Module    : frmBrowser
  46. ' DateTime  : <<2005-7-31 23:13
  47. ' Author    : Lingll
  48. ' Purpose   :
  49. '---------------------------------------------------------------------------------------
  50. '2005-7-31 23:13:25 添加 GetAllDocument ,主要供script使用
  51. Option Explicit
  52. Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
  53. Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
  54. 'Public lpPrevFormProc As Long
  55. Public nTimer As Single
  56. '自动过滤,0表示不过滤,1-3代表不同等级
  57. Public mPvnPop As Long
  58. '自动过滤的等级
  59. Private pvnPopTime(0 To 3) As Single
  60. '前进后退状态
  61. Public mCanBack As Boolean
  62. Public mCanForward As Boolean
  63. Public WithEvents webMe As SHDocVw.WebBrowser
  64. Attribute webMe.VB_VarHelpID = -1
  65. Public WithEvents vCWebMe As cWebBrowser
  66. Attribute vCWebMe.VB_VarHelpID = -1
  67. 'webbstate中的index
  68. Public tagIndex As Long
  69. '是否url过滤
  70. Public isFiltrate As Boolean
  71. Dim isUnloading As Boolean
  72. Dim historyLength As Long
  73. Public widthPixel As Long, heightPixel As Long
  74. '是否可以显示,如果是在过滤的范围则不能显示
  75. 'Public CanNotShow As Boolean
  76. '"自动阻隔",是否阻隔
  77. Private mAutoCanNew As Single
  78. 'web "Shell Embedding" hwnd
  79. Private mHWeb As Long
  80. '页面的url
  81. Private mWebUrl As String
  82. '页面title
  83. Private mWebTitle As String
  84. '调用此窗口的窗口index,及url
  85. Private mPreIndex As Long
  86. Private mPreUrl As String
  87. '下载控制本地变量
  88. Private mDownloadCtrl As DownloadCtrlFlags
  89. Private mDL_Image As Boolean
  90. Private mDL_BgSound As Boolean
  91. Private mDL_Video As Boolean
  92. Private mDL_Script As Boolean
  93. Private mDL_ActiveX As Boolean
  94. Private mDL_JavaApplet As Boolean
  95. Private mDl_DlActiveX  As Boolean
  96. '本页面属性,如,记录下载控制,是否自动阻隔
  97. Private Type mTypPageProperty
  98.     DLCtrl As Long      '下载控制
  99.     PvnPop As Long      '自动过滤
  100.     ParentIndex As Long 'New自己的窗口的Index
  101. End Type
  102. '是否图片
  103. Private mIsImage As Boolean
  104. '是否第一次连接,
  105. Private mFirstNav As Boolean
  106. '是否独立新开的窗口(从收藏夹,收藏栏,地址栏新开的窗口)
  107. '主要用以判断是否由别的窗口"newwindow"而来,对"页面规则"有用
  108. Private mIsSingleWindow As Boolean
  109. '判断是否已经做过DoPageRule
  110. '主要作用是用于 Public Sub Navigate(Url As String)
  111. '避免重复操作
  112. Private mIsDoPageRule As Boolean
  113. '"总是在新页面打开"
  114. Public IsAllOpenNew As Long
  115. '在后面打开新窗口
  116. Public NewWindowInBack As Long
  117. '========前进后退相关=====================
  118. Private Stg As olelib.ITravelLogStg
  119. 'Private Titles() As String
  120. 'Private TitleCnt As Long
  121. '
  122. 'Private preTitle As String
  123. '
  124. 'Private preStep As Long
  125. 'Private preTotalStep As Long
  126. 'Private preForeStep As Long
  127. '==========================================
  128. '拖拽中,在<input>中的光标位置
  129. 'Private mDDChrPos As Long
  130. Private mPreProgressIcon As Long
  131. '是否自身的script新开的窗口
  132. Public newInSelfScript As Boolean
  133. '保存TranslateURL
  134. Private mTransUrl As String
  135. '后台打开,并且最大化时使用
  136. Public NoActive As Boolean
  137. '脚本设定的长宽
  138. Private mSetWebWidth As Long
  139. Private mSetWebHeight As Long
  140. Private Sub Form_Initialize()
  141. mPreProgressIcon = -1
  142. 'CanNotShow = False ' True
  143. mFirstNav = True
  144. mIsSingleWindow = True
  145. mIsDoPageRule = False
  146. isFiltrate = False
  147. 'firstLoseFocus = True
  148. mPvnPop = PreventPopWindow
  149. mCanBack = False
  150. mCanForward = False
  151. historyLength = 1
  152. pvnPopTime(1) = 0.7
  153. pvnPopTime(2) = 0.3
  154. pvnPopTime(3) = 0.1
  155. Call IniVar
  156. Call IniDownloadControl
  157. 'mHWeb = FindWindowEx(Me.hwnd, 0&, "Shell Embedding", vbNullString)
  158. End Sub
  159. 'Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  160. ''If Shift = vbCtrlMask Then
  161. ''    Select Case KeyCode
  162. ''        Case vbKeyN
  163. ''            Dim tmpI As Integer
  164. ''            tmpI = gActiveWebIndex
  165. ''            Call gMainForm.NewWebbrowser(webMe.LocationURL)
  166. ''
  167. ''            'wbbMe(gActiveWebIndex).Navigate wbbMe(tmpI).LocationURL
  168. ''            KeyCode = 0
  169. ''        'Case vbKeyF4:
  170. ''            'Call unloadBrowser(gActiveWebIndex)
  171. ''            'KeyCode = 0
  172. ''    End Select
  173. ''End If
  174. '
  175. 'End Sub
  176. Private Sub Form_Load()
  177. Set vCWebMe = New cWebBrowser
  178. vCWebMe.HostInfo = vCWebMe.HostInfo Or hfFlatScroll Or hfNo3DBorder
  179. vCWebMe.DownloadCtrl = mDownloadCtrl ' DLCTL_Default Or DLCTL_SILENT
  180. 'vCWebMe.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)"
  181. vCWebMe.INIAll Me
  182. Set webMe = vCWebMe.WBCtrl
  183. 'mHookAllForms.Add Me, Str(Me.hwnd)
  184. 'Call WebformHook(Me.hwnd, lpPrevFormProc)
  185. Call WebformHook(Me.hWnd, Me)
  186. '前进后退历史记录相关
  187. 'TitleCnt = 0
  188. 'ReDim Titles(0 To TitleCnt)
  189. Call LogConnect
  190. '===========================
  191. End Sub
  192. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  193. On Error GoTo due:
  194. 'Debug.Print "queryunload", CanNotShow
  195. 'If Not CanNotShow Then
  196. WebformUnhook Me.hWnd
  197.     isUnloading = True
  198.     If Not webMe.Document Is Nothing Then
  199.         Set webMe.Document.body.onunload = Nothing
  200.         webMe.Document.Open
  201.         webMe.Document.Clear
  202.         webMe.Document.Close
  203.     End If
  204.     
  205.     
  206.     If (Not isUnloadByFunction) And (Not isExit) Then
  207.         Call gMainForm.UnloadBrowser(ByVal tagIndex)
  208.     End If
  209.     isUnloadByFunction = False
  210.     If loadedBrowserCount < 1 Then gActiveWebIndex = 0
  211. 'End If
  212. 'mHookAllForms.Remove Str(Me.hwnd)
  213. 'WebformUnhook Me.hwnd, lpPrevFormProc
  214. 'WebformUnhook Me.hWnd
  215. Exit Sub
  216. due:
  217. ErrorLog.AddLog Err.Description & Str(Err.Number) & Chr(9) & "WebForm Unload"
  218. Resume Next
  219. End Sub
  220. Private Sub Form_Resize()
  221. widthPixel = Me.ScaleWidth / 15
  222. heightPixel = Me.ScaleHeight / 15
  223. If isUnloading Then Exit Sub
  224. 'Call OrgWeb
  225. End Sub
  226. Private Sub vCWebMe_DownloadBegin(url As String, Cancel As Long)
  227. 'Debug.Print "download url:", Url
  228. Dim tFrm As frmDownloadDlg
  229. If gShowDownDlg = 1 Then
  230.     Set tFrm = New frmDownloadDlg
  231.     Load tFrm
  232.     tFrm.IniMe url
  233.     tFrm.Show vbModal
  234.     Cancel = BooleanToBool(tFrm.IsCancel)
  235.     Unload tFrm
  236.     Set tFrm = Nothing
  237.     
  238.     If Cancel = 0 Then
  239.         If gUseDownTool = 1 Then
  240.             ShellExecute 0, "open", AppPath & "DownManager" & gDownTools(gDownToolIndex).url, _
  241.                     """" & url & """ """" """ & mWebUrl & """", _
  242.                     AppPath & "DownManager", SW_SHOW
  243.             Cancel = 1
  244.         End If
  245.     End If
  246. Else
  247.     If gUseDownTool = 1 Then
  248.         ShellExecute 0, "open", AppPath & "DownManager" & gDownTools(gDownToolIndex).url, _
  249.                 """" & url & """ """" """ & mWebUrl & """", _
  250.                 AppPath & "DownManager", SW_SHOW
  251.         Cancel = 1
  252.     End If
  253. End If
  254. End Sub
  255. 'Private Sub tmrReSetWebEvent_Timer()
  256. 'Call SetWebEvent
  257. 'tmrReSetWebEvent.Enabled = False
  258. 'End Sub
  259. 'Public Sub EnableSetWebEvent()
  260. 'tmrReSetWebEvent.Enabled = True
  261. 'End Sub
  262. 'Private Sub tmrUnload_Timer()
  263. ''If CanNotShow Then
  264. '    If loadedBrowserCount > 0 Then
  265. '        'webbState(gActiveWebIndex).webForm.SetFocus
  266. '        'DoEvents
  267. '    End If
  268. ''End If
  269. 'Unload Me
  270. 'End Sub
  271. Private Sub vCWebMe_GetExternal(External As Object)
  272. Set External = Me
  273. End Sub
  274. Private Sub vCWebMe_KeyDown(KeyCode As Integer, Shift As Integer)
  275. If Shift = vbCtrlMask Then
  276.     Select Case KeyCode
  277.         Case vbKeyN
  278.             Dim tmpI As Integer
  279.             tmpI = gActiveWebIndex
  280.             Call gMainForm.NewWebbrowser(webMe.LocationURL)
  281.             
  282.             'wbbMe(gActiveWebIndex).Navigate wbbMe(tmpI).LocationURL
  283.             KeyCode = 0
  284.         'Case vbKeyF4:
  285.             'Call unloadBrowser(gActiveWebIndex)
  286.             'KeyCode = 0
  287.     End Select
  288. End If
  289. End Sub
  290. Private Sub vCWebMe_OLEDragDrop(ByVal Data As DataObjectWB, ByVal KeyState As Long, ByVal x As Long, ByVal y As Long, Effect As Long)
  291. Dim turl$
  292. Dim tDir&
  293. Dim tFiles As Collection
  294. Debug.Print Data.GetImageUrl()
  295. Set tFiles = Data.Files
  296. If DoOrgDrop(Data, x, y) Then
  297.     If KeyState = MK_CONTROL Then
  298.         Effect = DROPEFFECT_COPY
  299.     Else
  300.         Effect = DROPEFFECT_MOVE
  301.     End If
  302.     'Effect = DROPEFFECT_COPY Or DROPEFFECT_MOVE
  303. Else
  304.     If gSelfDrag.SelfDraging Then
  305.         turl = gSelfDrag.SrcStr
  306.         If turl <> "" Then
  307.             If gSelfDrag.DragFormIndex = tagIndex Then  '判断是否来自本页
  308.                 If EnableDragLink = 1 Then
  309.                     tDir = GetDragDropDir(gSelfDrag.dragX, gSelfDrag.dragY, x, y)
  310.                     If tDir >= 0 And tDir < 4 Then
  311.                         If (Effect And DROPEFFECT_LINK) = DROPEFFECT_LINK Then
  312.                             gSelfDrag.SrcType = "url"
  313.                         End If
  314.                         Select Case gSelfDrag.SrcType
  315.                             Case "img"
  316.                                 If tFiles.Count > 0 Then
  317.                                     gSelfDrag.SrcFilePath = tFiles(1)
  318.                                 End If
  319.                                 gDDEventImage(tDir).Execute
  320.                             Case "url"
  321.                                 gDDEventLink(tDir).Execute
  322.                             Case Else
  323.                                 gDDEventText(tDir).Execute
  324.                         End Select
  325.                     End If
  326.                 End If
  327.             Else
  328.                 Call Navigate(turl, False)
  329.             End If
  330.         End If
  331.     Else
  332.         turl = Trim(Data.GetText)
  333.         If turl = "" Then
  334.             If tFiles.Count > 0 Then
  335.                 turl = Trim(tFiles(1))
  336.             End If
  337.         End If
  338.         If turl <> "" Then
  339.             Call Navigate(turl, False)
  340.         End If
  341.     End If
  342. End If
  343. End Sub
  344. Private Function GetDragDropDir(sX&, sY&, dx&, dy&) As Long
  345. Dim cx&, cy&
  346. Dim rtn&
  347. rtn = -1
  348. cx = dx - sX: cy = -(dy - sY)
  349. If cx > 0 And Abs(cy) <= cx Then
  350.     rtn = 0
  351. ElseIf cy > 0 And Abs(cx) <= cy Then
  352.     rtn = 1
  353. ElseIf cx < 0 And Abs(cy) <= Abs(cx) Then
  354.     rtn = 2
  355. ElseIf cy < 0 And Abs(cx) <= Abs(cy) Then
  356.     rtn = 3
  357. End If
  358. GetDragDropDir = rtn
  359. End Function
  360. Private Sub vCWebMe_OLEDragEnter(ByVal Data As DataObjectWB, ByVal KeyState As Long, ByVal x As Long, ByVal y As Long, Effect As Long)
  361. gSelfDrag.dragX = x: gSelfDrag.dragY = y
  362. On Error Resume Next
  363. If GetForegroundWindow() = gMainForm.hWnd Then
  364.     If GetWindow(Me.hWnd, GW_HWNDFIRST) = Me.hWnd Then
  365.         With gSelfDrag
  366.             .Reset
  367.             .SelfDraging = True
  368.             .DragFormIndex = tagIndex
  369.             .SrcType = Data.GetHtmlDragDropType
  370.             
  371.             If .SrcType = "img" Then
  372.                 .SrcStr = Data.GetImageUrl
  373.             Else
  374.                 .SrcType = "text"
  375.                 .SrcStr = Data.GetText
  376.             End If
  377.             
  378.             .SrcHtmlText = Data.GetFragment(Data.GetCFHtml)
  379.             
  380.             Set gSelfDrag.SelRange = GetSelection
  381.         End With
  382.     End If
  383. Else
  384.     gSelfDrag.Reset
  385. End If
  386. End Sub
  387. '---------------------------------------------------------------------------------------
  388. ' Procedure : GetSelection
  389. ' DateTime  : 2005-5-12 12:08
  390. ' Author    : Lingll
  391. ' Purpose   : 获取页面上首个selection
  392. '---------------------------------------------------------------------------------------
  393. Public Function GetSelection() As Object
  394. On Error Resume Next
  395.     Dim objResult As Object
  396.     Dim tWeb As SHDocVw.WebBrowser
  397.     Dim tCol As New Collection
  398.     
  399.     tCol.Add webMe
  400.     EnumFrames webMe, tCol
  401.     
  402.     For Each tWeb In tCol
  403.         Set objResult = Nothing
  404.         Set objResult = tWeb.Document.Selection.createRange
  405.         If Not objResult Is Nothing Then
  406.             If LenB(objResult.htmlText) <> 0 Then
  407.                 Exit For
  408.             End If
  409.         End If
  410.     Next tWeb
  411.     
  412.     
  413.     Set GetSelection = objResult
  414.     Set objResult = Nothing
  415. End Function
  416. Private Sub vCWebMe_OLEDragOver(ByVal Data As DataObjectWB, ByVal KeyState As Long, ByVal x As Long, ByVal y As Long, Effect As Long)
  417. 'Dim tDoc As MSHTML.HTMLDocument
  418. Dim tpt  As POINTAPI
  419. Dim e As Object, tTag$
  420. tpt.x = x: tpt.y = y
  421. Set e = GetWindowPoint(tpt.x, tpt.y)
  422. 'Set tDoc = webMe.Document
  423. 'Set e = tDoc.elementFromPoint(tpt.x, tpt.y)
  424. If Not e Is Nothing Then
  425.     tTag = LCase(e.tagName)
  426. '    Debug.Print tTag, tpt.x, tpt.y
  427.     Select Case tTag
  428.         Case "textarea"
  429.             Call OverWebEdit(e, tpt.x, tpt.y)
  430.             If IsInSelection(webMe.Document) Then
  431.                 Effect = DROPEFFECT_NONE
  432.             Else
  433.                 If (KeyState And MK_CONTROL) = MK_CONTROL Then
  434.                     'Effect = Effect Xor DROPEFFECT_MOVE
  435.                 Else
  436.                     If (Effect And DROPEFFECT_MOVE) = DROPEFFECT_MOVE Then
  437.                         Effect = Effect Xor DROPEFFECT_COPY
  438.                     End If
  439.                 End If
  440.             End If
  441.         Case "input"
  442.             If LCase(e.Type) = "text" Then
  443.                 Call OverWebEdit2(e, tpt.x, tpt.y)
  444.                 If IsInSelection(webMe.Document) Then
  445.                     Effect = DROPEFFECT_NONE
  446.                 Else
  447.                     'Effect = Effect Or DROPEFFECT_COPY Or DROPEFFECT_MOVE
  448.                     If (KeyState And MK_CONTROL) = MK_CONTROL Then
  449.                         'Effect = Effect Xor DROPEFFECT_MOVE
  450.                     Else
  451.                         If (Effect And DROPEFFECT_MOVE) = DROPEFFECT_MOVE Then
  452.                             Effect = Effect Xor DROPEFFECT_COPY
  453.                         End If
  454.                     End If
  455.                 End If
  456.             End If
  457.     End Select
  458. End If
  459. End Sub
  460. '###############################################################
  461. '######  begin  拖拽相关函数 #########
  462. '####################################
  463. '模拟ie原本的拖放(drop部分)
  464. Private Function DoOrgDrop(ByVal Data As DataObjectWB, ByVal x As Long, ByVal y As Long) As Boolean
  465. 'Dim tDoc As MSHTML.HTMLDocument
  466. Dim tpt  As POINTAPI
  467. Dim e As Object, tTag$
  468. Dim rtn As Boolean
  469. rtn = False
  470. tpt.x = x: tpt.y = y
  471. Set e = GetWindowPoint(tpt.x, tpt.y)
  472. 'Set tDoc = webMe.Document
  473. 'Set e = tDoc.elementFromPoint(tpt.x, tpt.y)
  474. If Not e Is Nothing Then
  475.     tTag = LCase(e.tagName)
  476.     Select Case tTag
  477.         Case "textarea"
  478.             If e.ReadOnly Then
  479.             Else
  480.                 Call DropWebEdit(e, tpt.x, tpt.y, Data.GetText)
  481.                 rtn = True
  482.             End If
  483.         Case "input"
  484.             If LCase(e.Type) = "text" Then
  485.                 If e.ReadOnly Then
  486.                 Else
  487.                     Call DropWebEdit2(e, tpt.x, Data.GetText)
  488.                     rtn = True
  489.                 End If
  490.             End If
  491.     End Select
  492. End If
  493. DoOrgDrop = rtn
  494. End Function
  495. Private Function IsInSelection(nDoc As MSHTML.HTMLDocument) As Boolean
  496. On Error Resume Next
  497. Dim tSel As Object
  498. Dim tRc As RECT, tRc2 As RECT
  499. Dim rtn As Boolean
  500. rtn = False
  501. Set tSel = nDoc.Selection.createRange
  502. If Not tSel Is Nothing Then
  503.     If Not gSelfDrag.SelRange Is Nothing Then
  504.         With tSel
  505.             tRc.Left = .boundingLeft
  506.             tRc.Top = .boundingTop
  507.             tRc.Right = tRc.Left + .boundingWidth
  508.             tRc.Bottom = tRc.Top + .boundingHeight
  509.         End With
  510.         
  511.         With gSelfDrag.SelRange
  512.             tRc2.Left = .boundingLeft
  513.             tRc2.Top = .boundingTop
  514.             tRc2.Right = tRc2.Left + .boundingWidth
  515.             tRc2.Bottom = tRc2.Top + .boundingHeight
  516.         End With
  517.         
  518.         rtn = tRc.Left > tRc2.Left And tRc.Right < tRc2.Right And _
  519.             tRc.Top >= tRc2.Top And tRc.Bottom <= tRc2.Bottom
  520. '        Debug.Print "left", tRc.Left, tRc2.Left
  521. '        Debug.Print "right", tRc.Right, tRc2.Right
  522. '        Debug.Print "rtn", rtn
  523.         
  524.     End If
  525. End If
  526. IsInSelection = rtn
  527. End Function
  528. '获得页面中对应的坐标,参数x,y为屏幕坐标
  529. Private Function GetWindowPoint(x&, y&) As Object ' POINTAPI
  530. Dim rtn As POINTAPI
  531. Dim tWin As MSHTML.HTMLWindow2
  532. Set tWin = FindFrameFromPoint(x, y)
  533. rtn.x = x: rtn.y = y
  534. ScreenToClient Me.hWnd, rtn
  535. 'Set GetWindowPoint = webMe.Document.elementFromPoint(rtn.x, rtn.y)
  536. If tWin Is Nothing Then
  537.     Set GetWindowPoint = webMe.Document.body
  538. Else
  539. '    Debug.Print tWin.screenLeft, tWin.screenTop
  540.     rtn.x = rtn.x - (tWin.screenLeft - webMe.Document.parentWindow.screenLeft)
  541.     rtn.y = rtn.y - (tWin.screenTop - webMe.Document.parentWindow.screenTop)
  542.     Set GetWindowPoint = tWin.Document.elementFromPoint(rtn.x, rtn.y)
  543. End If
  544. x = rtn.x: y = rtn.y
  545. End Function
  546. '模拟ie原本的拖放(over部分)
  547. Private Sub OverWebEdit(e As Object, x As Long, y As Long)
  548. On Error Resume Next
  549. Dim r As MSHTML.IHTMLTxtRange
  550. Set r = e.createTextRange
  551. Call r.moveToPoint(x, y)
  552. Call r.Select
  553. End Sub
  554. Private Sub DropWebEdit(e As Object, x&, y&, ByVal InsertTxt$)
  555. Dim r As Object
  556. Set r = e.createTextRange
  557. If e.Value <> "" Then
  558.     Call r.moveToPoint(x, y)
  559.     r.Text = ""
  560.     r.Text = InsertTxt
  561. Else
  562.     e.Value = InsertTxt
  563. End If
  564. 'Call r.MoveStart("character", -Len(InsertTxt))
  565. 'Call r.MoveEnd("character", Len(InsertTxt))
  566. Call r.Select
  567. End Sub
  568. 'just for <input>
  569. Private Sub OverWebEdit2(e As Object, x As Long, y As Long)
  570. Dim r As Object
  571. Dim cx As Long, tPos As Long
  572. Set r = e.createTextRange
  573. cx = x - r.boundingLeft - e.scrollLeft
  574. tPos = GetWebEditPos(r, cx)
  575. 'mDDChrPos = tPos
  576. Call r.Collapse(True)
  577. Call r.Move("character", tPos)
  578. Call r.Select
  579. End Sub
  580. Private Sub DropWebEdit2(e As Object, x&, ByVal InsertTxt$)
  581. Dim tPos&, cx&
  582. Dim r As Object
  583. Set r = e.createTextRange
  584. cx = x - r.boundingLeft - e.scrollLeft
  585. tPos = GetWebEditPos(r, cx)
  586. Call r.Move("character", tPos)
  587. InsertTxt = Replace(InsertTxt, Chr(0), "")
  588. InsertTxt = Replace(InsertTxt, Chr(13), "")
  589. InsertTxt = Replace(InsertTxt, Chr(10), "")
  590. r.Text = InsertTxt
  591. End Sub
  592. '主要是为OverWebEdit2服务,获得鼠标指针所在字符位置
  593. Private Function GetWebEditPos(Rng As Object, x As Long) As Long
  594. Dim i&, tLen&
  595. Dim nBw&, preBw&
  596. tLen = Len(Rng.Text)
  597. Call Rng.Collapse(True)
  598. For i = 1 To tLen
  599.     Call Rng.MoveEnd("character", 1)
  600.     nBw = Rng.boundingWidth
  601.     If nBw >= x Then
  602.         If (nBw - x) > (x - preBw) Then
  603.             GetWebEditPos = i - 1
  604.             Exit Function
  605.         Else
  606.             GetWebEditPos = i
  607.             Exit Function
  608.         End If
  609.     Else
  610.         preBw = nBw
  611.     End If
  612. Next i
  613. GetWebEditPos = tLen
  614. End Function
  615. '####################################
  616. '######  end  拖拽相关函数 ###########
  617. '#############################################################
  618. Private Sub vCWebMe_TranslateURL(url As String)
  619. 'Debug.Print "translateurl", URL, tagIndex
  620. mTransUrl = url
  621. End Sub
  622. Private Sub webme_BeforeNavigate2(ByVal pDisp As Object, url As Variant, flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
  623. mTransUrl = ""
  624. On Error GoTo due
  625. If tagIndex = 0 Then Exit Sub
  626. Dim newIndex As Long
  627. Dim i&, turl$
  628. Dim doRtn& 'DoPageRule return value
  629. turl = LCase(url)
  630. 'If CanNotShow Then
  631. ''    If mAutoCanNew Then
  632. ''        If EnableUrlFilter = 1 Then
  633. ''            For i = 1 To UrlFilterCount
  634. ''                If MatchUrl(UrlFilter(i), tUrl) Then
  635. ''                    FiltratePages.Add mPreUrl, tUrl
  636. ''                    Cancel = True
  637. ''                    tmrUnload.Enabled = True 'Unload Me
  638. ''                    Exit Sub
  639. ''                End If
  640. ''            Next i
  641. ''        End If
  642. '        doRtn = DoPageRule(Url, pDisp Is webMe, 0)
  643. '        Select Case doRtn
  644. ''            Case 1
  645. ''                Cancel = True
  646. ''                tmrUnload.Enabled = True
  647. ''                Exit Sub
  648. '            Case 0, -1
  649. '                CanNotShow = False
  650. ''                newIndex = gMainForm.NewWebbrowser(, Me, , , webbState(mPreIndex).TabBtn.index + 1)
  651. '                'gMainForm.MoveTab newIndex, GetNextTab(mPreIndex)
  652. '        End Select
  653. ''    Else
  654. ''        FiltratePages.Add mPreUrl, tUrl
  655. ''        Cancel = True
  656. ''        tmrUnload.Enabled = True 'Unload Me
  657. ''        Exit Sub
  658. ''    End If
  659. 'Else
  660.     If Not mIsDoPageRule Then
  661.         
  662.         doRtn = DoPageRule(url, pDisp Is webMe)
  663.         Select Case doRtn
  664.             Case 1
  665.                 Cancel = True
  666.                 Exit Sub
  667. '                If mFirstNav Then
  668. '                    Cancel = True
  669. '                    Call gMainForm.UnloadBrowser(ByVal tagIndex)
  670. '                    Exit Sub
  671. '                Else
  672. '                    Cancel = True
  673. '                    Exit Sub
  674. '                End If
  675.             Case Else
  676.                 '
  677.         End Select
  678.     End If
  679. 'End If
  680. 'If Not CanNotShow Then
  681.     If AllwaysNewWindow(pDisp, url) Then
  682.         Cancel = True
  683.     Else
  684.         '前进后退历史记录
  685.         'Call SetTitles(mWebTitle)
  686.         
  687.         If pDisp Is webMe Then
  688.             If mWebTitle = "" Then mWebTitle = url
  689.             Call ChangeTabTitle
  690.             vCWebMe.DownloadCtrl = mDownloadCtrl
  691.         End If
  692.     End If
  693. 'End If
  694. mIsDoPageRule = False
  695. mFirstNav = False
  696. Exit Sub
  697. due:
  698.     ErrorLog.AddLog "webme_BeforeNavigate2" & Chr(9) & Err.Description
  699.     Resume Next
  700. End Sub
  701. Private Function AllwaysNewWindow(nObj As Object, ByVal nUrl As String) As Boolean
  702. Dim rtn As Boolean
  703. 'Dim i&
  704. rtn = False
  705. 'If IsAllOpenNew = 1 Then
  706. '    For i = 1 To mWebObjCnt
  707. '        With mWebObjects(i)
  708. '            If Not .IsEmpty And Not .FirstLoad Then
  709. '                If nObj Is .WebObject Then
  710. '                    gMainForm.NewWebbrowser nUrl
  711. '                    rtn = True
  712. '                End If
  713. '            End If
  714. '        End With
  715. '    Next i
  716. 'End If
  717. On Error Resume Next
  718. Dim alllength As Long
  719. If IsAllOpenNew = 1 Then
  720.     alllength = 0
  721.     alllength = nObj.Document.All.Length
  722.     rtn = (alllength > 0)
  723.     If rtn Then gMainForm.NewWebbrowser nUrl
  724. End If
  725. AllwaysNewWindow = rtn
  726. End Function
  727. Private Sub webMe_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
  728. On Error Resume Next
  729. 'Dim t_length As Long
  730. Select Case Command
  731.     Case 2 'CSC_NAVIGATEBACK
  732.         mCanBack = Enable
  733.         Call BackAndForwardState
  734.         
  735. '        preStep = GetStep(TLEF_RELATIVE_INCLUDE_CURRENT)
  736.     Case 1 ' CSC_NAVIGATEFORWARD
  737.         mCanForward = Enable
  738.         Call BackAndForwardState
  739.         
  740. '        preStep = GetStep(TLEF_RELATIVE_INCLUDE_CURRENT)
  741. '        preForeStep = GetStep(TLEF_RELATIVE_FORE)
  742. End Select
  743. End Sub
  744. Private Sub webMe_DocumentComplete(ByVal pDisp As Object, url As Variant)
  745. On Error Resume Next
  746. Dim tScaleImage As cScaleWebImage
  747. Dim tDoc As MSHTML.HTMLDocument
  748. If Not mIsImage Then
  749.     If pDisp Is webMe Then
  750.         Set tDoc = webMe.Document
  751.         If tDoc.body.All.Length = 1 Then
  752.             If LCase(tDoc.body.All(0).tagName) = "img" Then
  753.                 mIsImage = True
  754.             End If
  755.         End If
  756.     End If
  757. End If
  758. If mIsImage Then
  759.     If pDisp Is webMe Then
  760.         Set tScaleImage = New cScaleWebImage
  761.         Set tDoc = webMe.Document
  762.         tScaleImage.IniMe tDoc, Me
  763.         Set tDoc.images(0).onmouseover = tScaleImage
  764.         Set tDoc.images(0).onmouseout = tScaleImage
  765.     End If
  766. End If
  767. '========      progress icon    =====================
  768. If tagIndex > 0 Then
  769.     If gActiveWebIndex = tagIndex Then
  770.         'Set webbState(tagIndex).webTab.PictureIN = Nothing
  771.         If Not webbState(tagIndex).TabBtn Is Nothing Then
  772.             Set webbState(tagIndex).TabBtn.ImageNormal = Nothing
  773.             mPreProgressIcon = -1
  774.         End If
  775.     Else
  776.         'Set webbState(tagIndex).webTab.PictureIN = ProgressIcon(4)
  777.         If Not webbState(tagIndex).TabBtn Is Nothing Then
  778.             Set webbState(tagIndex).TabBtn.ImageNormal = ProgressIcon(4)
  779.             mPreProgressIcon = 4
  780.         End If
  781.     End If
  782. End If
  783. '======================================================
  784. 'On Error GoTo due: ' Resume Next
  785. 'Dim tDrag As cOpenDragLink
  786. 'Set tDrag = New cOpenDragLink
  787. 'tDrag.SetDoc pDisp.Document
  788. 'pDisp.Document.body.ondrag = tDrag
  789. 'pDisp.Document.body.ondragleave = tDrag
  790. 'pDisp.Document.body.ondragend = tDrag
  791. ''pDisp.Document.body.ondragstart = tDrag
  792. '
  793. ''If Not pDisp Is webMe.Object Then
  794. ''    If Not (TypeOf webMe.Object.Document.body.ondrag Is cOpenDragLink) Then
  795. ''        Set tDrag = New cOpenDragLink
  796. ''        tDrag.SetDoc webMe.Document
  797. ''        webMe.Document.body.ondrag = tDrag
  798. ''        webMe.Document.body.ondragleave = tDrag
  799. ''        webMe.Document.body.ondragend = tDrag
  800. ''    End If
  801. ''End If
  802. 'Call OrgWeb
  803. 'Exit Sub
  804. '
  805. 'due:
  806. '    ErrorLog.AddLog "DocumentComplete" & Chr(9) & Err.Description
  807. '    Resume Next
  808. End Sub
  809. Private Sub webme_NavigateComplete2(ByVal pDisp As Object, url As Variant)
  810. On Error Resume Next
  811. 'Dim tObj As cActiveWebEvent
  812. Dim i&
  813. If pDisp Is webMe Then
  814.     mWebUrl = url
  815.     mIsImage = UrlIsImage(mWebUrl)
  816.     
  817.     
  818.     If mWebTitle = "" Then mWebTitle = url
  819.     mWebUrl = url
  820.     Call ChangeTabTitle
  821.     If gActiveWebIndex = tagIndex And (Not addbarGetFocus) Then
  822.         gMainForm.LocationURLText = url
  823.     End If
  824. Else
  825. '    For i = 1 To UrlFilterCount
  826. '        If MatchUrl(UrlFilter(i), CStr(Url)) Then
  827. '            pDisp.Document.Open
  828. '            pDisp.Document.Clear
  829. '            'pDisp.Document.Write "hwhw"
  830. '            pDisp.Document.Close
  831. '            Exit For
  832. '        End If
  833. '    Next i
  834. End If
  835. 'Set tObj = New cActiveWebEvent
  836. 'tObj.pDisp = pDisp
  837. 'tObj.ParentForm = Me
  838. 'Set pDisp.Document.ondragstart = tObj
  839. If gActiveWebIndex = tagIndex Then
  840.     gMainForm.LocationURLText = mWebUrl
  841. End If
  842. 'progress icon
  843. If pDisp Is webMe Then
  844.     mPreProgressIcon = 0
  845.     'Set webbState(tagIndex).webTab.PictureIN = ProgressIcon(mPreProgressIcon)
  846.     If Not webbState(tagIndex).TabBtn Is Nothing Then
  847.         Set webbState(tagIndex).TabBtn.ImageNormal = ProgressIcon(mPreProgressIcon)
  848.     End If
  849.     
  850. End If
  851. End Sub
  852. Private Sub webMe_NavigateError(ByVal pDisp As Object, url As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean)
  853. Debug.Print "NavigateError", StatusCode
  854. End Sub
  855. Private Sub webme_NewWindow2(ppDisp As Object, Cancel As Boolean)
  856. Dim tTransUrl As String
  857. Dim i&
  858. tTransUrl = mTransUrl
  859. mTransUrl = ""
  860. 'If isUnloading Then Cancel = True: Exit Sub
  861. 'If tagIndex = 0 Then Exit Sub
  862. If loadedBrowserCount >= browserCount Then
  863.     Cancel = True
  864.     Exit Sub
  865. End If
  866.     
  867. Dim tTimer As Single, tAutoCanNew As Boolean
  868. tTimer = Timer - nTimer
  869. tAutoCanNew = True
  870. If mPvnPop > 0 And Not newInSelfScript Then
  871.     If tTimer > pvnPopTime(mPvnPop) Then
  872.         If (GetAsyncKeyState(VK_RETURN) And &H8000) = 0 Then
  873.             tAutoCanNew = False
  874.         End If
  875.     End If
  876. End If
  877. If isUnloading Then Cancel = True: Exit Sub
  878. If tagIndex = 0 Then Exit Sub
  879. If loadedBrowserCount > browserCount + 1 Then Cancel = True: Exit Sub
  880. 'Dim newIndex As Integer
  881. '
  882. 'newIndex = gMainForm.NewWebbrowser
  883. 'DoEvents
  884. 'Set ppDisp = webbState(newIndex).webForm.webMe.Object
  885. If tAutoCanNew Then
  886.     If EnableUrlFilter = 1 Then
  887.         For i = 1 To UrlFilterCount
  888.             If MatchUrl(UrlFilter(i), tTransUrl) Then
  889.                 FiltratePages.Add mWebUrl, tTransUrl
  890.                 Cancel = True
  891.                 Exit Sub
  892.             End If
  893.             If DoPageRule(tTransUrl, False, 1) = 1 Then
  894.                 Cancel = True
  895.                 Exit Sub
  896.             End If
  897.         Next i
  898.     End If
  899. Else
  900.     FiltratePages.Add mWebUrl, tTransUrl
  901.     Cancel = True
  902.     Exit Sub
  903. End If
  904. Dim newMe As New frmBrowser
  905. Dim tProperty As mTypPageProperty
  906. With tProperty
  907.     .DLCtrl = mDownloadCtrl ' vCWebMe.DownloadCtrl
  908.     .PvnPop = mPvnPop
  909.     .ParentIndex = tagIndex
  910. End With
  911. Load newMe
  912. 'DoEvents
  913. Set ppDisp = newMe.IniNewWeb(tAutoCanNew, tagIndex, VarPtr(tProperty))
  914. ' = newMe.webMe.Object
  915. End Sub
  916. Private Sub webme_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
  917. Dim tDiv As Double
  918. Dim tProgressIcon As Integer
  919. If Progress <> -1 Then Call vCWebMe.ResizeWeb 'OrgWeb
  920. 'If tagIndex = 0 Or CanNotShow Then Exit Sub
  921. If tagIndex = 0 Then Exit Sub
  922. If ProgressMax <> 0 Then
  923.     If Progress = -1 Then
  924.         tDiv = 1
  925.     Else
  926.         tDiv = Progress / ProgressMax
  927.         If Progress > ProgressMax Then
  928.             tDiv = tDiv / 100
  929.         End If
  930.     End If
  931.     
  932.     '============  progress icon  ==================
  933.     If tagIndex > 0 Then
  934.         tProgressIcon = Int(tDiv * 4)
  935.         If tProgressIcon >= 0 And tProgressIcon <= 4 Then
  936.             If mPreProgressIcon <> tProgressIcon Then
  937.                 'Set webbState(tagIndex).webTab.PictureIN = ProgressIcon(tProgressIcon)
  938.                 If Not webbState(tagIndex).TabBtn Is Nothing Then
  939.                     Set webbState(tagIndex).TabBtn.ImageNormal = ProgressIcon(tProgressIcon)
  940.                     mPreProgressIcon = tProgressIcon
  941.                 End If
  942.                 
  943.                 If mPreProgressIcon = 4 Then
  944.                     If gActiveWebIndex = tagIndex Then
  945.                         'Set webbState(tagIndex).webTab.PictureIN = Nothing
  946.                         If Not webbState(tagIndex).TabBtn Is Nothing Then
  947.                             Set webbState(tagIndex).TabBtn.ImageNormal = Nothing
  948.                             mPreProgressIcon = -1
  949.                         End If
  950.                     End If
  951.                 End If
  952.     
  953.             End If
  954.         End If
  955.     End If
  956.     '==============================================
  957.     
  958.     
  959.     webbState(tagIndex).Progress = Format(LTrim$(Str$(100 * (tDiv))), "#0") + "%"
  960. End If
  961. If ProgressMax <> 0 And gActiveWebIndex = tagIndex Then
  962.     gMainForm.ChangeStatusText webbState(tagIndex).Progress, 1
  963. End If
  964. End Sub
  965. Private Sub webme_StatusTextChange(ByVal Text As String)
  966. 'If tagIndex = 0 Or CanNotShow Then Exit Sub
  967. If tagIndex = 0 Then Exit Sub
  968. webbState(tagIndex).StatusText = Text
  969. If tagIndex = gActiveWebIndex Then    'gMainForm.stabMe.Panels(1).Text = Text
  970.     'SendMessage gMainForm.stabMe.Hwnd, SB_SETTEXTA, 0, ByVal Text
  971.     gMainForm.ChangeStatusText Text
  972. End If
  973. End Sub
  974. Private Sub webme_TitleChange(ByVal Text As String)
  975. On Error GoTo due:
  976. 'If tagIndex = 0 Or isUnloading Or CanNotShow Then Exit Sub
  977. If tagIndex = 0 Or isUnloading Then Exit Sub
  978. Dim nTitle As String
  979. If webMe.LocationURL = "about:blank" Then
  980.     nTitle = "about:blank"
  981. ElseIf Not (webMe.Document Is Nothing) Then
  982.     nTitle = webMe.Document.Title
  983. Else
  984.     nTitle = Text
  985. End If
  986. If Trim(nTitle) = "" Then
  987.     nTitle = mWebUrl
  988. End If
  989. 'Dim tmpStr  As String
  990. mWebTitle = nTitle
  991. 'tmpStr = StrConv(nTitle, vbFromUnicode)
  992. 'If LenB(tmpStr) > 14 Then
  993. '    webbState(tagIndex).webTab.Caption = Replace(StrConv(LeftB$(tmpStr, TabsTitleLength), vbUnicode), Chr(0), "") & ".."
  994. 'Else
  995. '    webbState(tagIndex).webTab.Caption = mWebTitle
  996. 'End If
  997. '
  998. 'webbState(tagIndex).webTab.TipText = mWebTitle & vbNewLine & mWebUrl
  999. 'Me.Caption = nTitle
  1000. Call ChangeTabTitle
  1001. Exit Sub
  1002. due:
  1003. ErrorLog.AddLog "webme_TitleChange" & Chr(9) & Err.Description
  1004. End Sub
  1005. Private Sub webMe_WindowClosing(ByVal IsChildWindow As Boolean, Cancel As Boolean)
  1006. Cancel = True
  1007. Call gMainForm.UnloadBrowser(ByVal tagIndex)
  1008. End Sub
  1009. ''=========================================
  1010. ''找到ms webbrwoser control的hwnd
  1011. 'Private Function SeekWindow(ByVal hOwner As Long) As Long
  1012. 'Dim tHwnd As Long
  1013. 'Dim tCN As String
  1014. 'Dim tFC As Long
  1015. 'Do
  1016. '    tCN = Space(255)
  1017. '    tHwnd = FindWindowEx(hOwner, tHwnd, vbNullString, vbNullString)
  1018. '    If tHwnd <> 0 Then
  1019. '        GetClassName tHwnd, tCN, 255
  1020. '        If Trim(Replace(tCN, Chr(0), " ")) = "Internet Explorer_Server" Then
  1021. '            SeekWindow = tHwnd
  1022. '            Exit Function
  1023. '        End If
  1024. '        tFC = SeekWindow(tHwnd)
  1025. '        If tFC <> 0 Then
  1026. '            SeekWindow = tFC
  1027. '            Exit Function
  1028. '        End If
  1029. '    End If
  1030. 'Loop Until tHwnd = 0
  1031. '
  1032. 'End Function
  1033. ''========================================
  1034. Public Sub OrgWeb()
  1035. If mHWeb <> 0 Then
  1036.     MoveWindow mHWeb, 0, 0, widthPixel, heightPixel, True
  1037. End If
  1038. End Sub
  1039. Public Sub BackAndForwardState()
  1040. On Error Resume Next
  1041. If gActiveWebIndex = tagIndex Then
  1042.     gMainForm.m_cTbrMain.EnableButton TbrID_Main_Back, mCanBack
  1043.     gMainForm.m_cTbrMain.EnableButton TbrID_Main_Forward, mCanForward
  1044. '    gMainForm.tlbMe.Buttons(TbrK_Main_Back).Enabled = mCanBack
  1045. '    gMainForm.tlbMe.Buttons(TbrK_Main_Forward).Enabled = mCanForward
  1046.     
  1047. End If
  1048. End Sub
  1049. Public Sub FormActive()
  1050. If isExit Then Exit Sub
  1051. Dim preIndex As String
  1052. Dim i As Long
  1053. Dim tRc As RECT, tRc2 As RECT, tRc3 As RECT
  1054. Dim tpt As POINTAPI
  1055. 'Debug.Print "form active ", tagIndex
  1056. With gMainForm
  1057.     If mPvnPop > 0 Then
  1058.         .SetTbrBtnState_AutoPvntPop 1 'tbrPressed
  1059.     Else
  1060.         .SetTbrBtnState_AutoPvntPop 0 ' tbrUnpressed
  1061.     End If
  1062.     
  1063.     Call .m_cTbrSmall.CheckButton(TbrID_Small_LockNew, (IsAllOpenNew = 1))
  1064.         
  1065.     .CheckTab webbState(tagIndex).TabBtn.Index
  1066.     
  1067.     .ChangeStatusText webbState(tagIndex).StatusText
  1068.     .ChangeStatusText webbState(tagIndex).Progress, 1
  1069.     .LocationURLText = mWebUrl
  1070.     
  1071.     
  1072.     preIndex = LTrim$(Str$(tagIndex))
  1073.     
  1074.     
  1075.     '改变标题
  1076.     .ChangeCaption mWebTitle
  1077.     
  1078.     If Me.WindowState = 2 Then
  1079.         
  1080.         GetClientRect .hMDIClient, tRc
  1081.         GetWindowRect Me.hWnd, tRc2
  1082.         GetClientRect Me.hWnd, tRc3
  1083.         tpt.x = tRc2.Left: tpt.y = tRc2.Top
  1084.         ScreenToClient .hMDIClient, tpt
  1085.         MoveWindow Me.hWnd, tpt.x, tpt.y, _
  1086.             (tRc.Right - tRc.Left) + (tRc2.Right - tRc2.Left) - (tRc3.Right - tRc3.Left), _
  1087.             (tRc.Bottom - tRc.Top) + (tRc2.Bottom - tRc2.Top) - (tRc3.Bottom - tRc3.Top), 1
  1088.     End If
  1089. End With
  1090. gActiveWebIndex = tagIndex
  1091. Call BackAndForwardState
  1092. Call ActiveMe(1)
  1093. '================  progress icon   ================
  1094. If tagIndex > 0 Then
  1095.     If mPreProgressIcon = 4 Then
  1096.         'Set webbState(tagIndex).webTab.PictureIN = Nothing
  1097.         If Not webbState(tagIndex).TabBtn Is Nothing Then
  1098.             Set webbState(tagIndex).TabBtn.ImageNormal = Nothing
  1099.             mPreProgressIcon = -1
  1100.         End If
  1101.     End If
  1102. End If
  1103. '=================================================
  1104. End Sub
  1105. Public Sub callGo(ByVal Length As Integer)
  1106. On Error GoTo due
  1107. Select Case Length
  1108.     Case -1
  1109.         If mCanBack Then webMe.GoBack
  1110.     Case 1
  1111.         If mCanForward Then webMe.GoForward
  1112. End Select
  1113. Exit Sub
  1114. due:
  1115.     ErrorLog.AddLog Err.Description
  1116. End Sub
  1117. '不显示漂浮物
  1118. Public Sub NoShowFloat()
  1119. On Error Resume Next
  1120. 'Call EnumFrame(webMe.Document.parentwindow, "NoShowFloat2")
  1121. Dim i&, tWb As Object, tObj As Object
  1122. Dim tWbs As Collection
  1123. Set tWbs = New Collection
  1124. tWbs.Add webMe
  1125. Call EnumFrames(webMe, tWbs)
  1126. For Each tWb In tWbs
  1127.     Set tObj = Nothing
  1128.     Set tObj = tWb.Document
  1129.     If Not tObj Is Nothing Then
  1130.         Call NoShowFloat2(tObj)
  1131.     End If
  1132. Next tWb
  1133. 'For i = 1 To mWebObjCnt
  1134. '    If Not mWebObjects(i).IsEmpty Then
  1135. '        Set tObj = Nothing
  1136. '        Set tObj = mWebObjects(i).WebObject.Document
  1137. '        If Not tObj Is Nothing Then
  1138. '            Call NoShowFloat2(tObj)
  1139. '        End If
  1140. '    End If
  1141. 'Next i
  1142. End Sub
  1143. Public Sub NoShowFloat2(nDoc As Object)
  1144. On Error GoTo due
  1145. Dim i&, aLeng&
  1146. Dim tObj As Object
  1147. Dim tTagName$
  1148. If Not nDoc Is Nothing Then
  1149.     aLeng = nDoc.All.Length
  1150.     For i = aLeng - 1 To 0 Step -1
  1151.         Set tObj = nDoc.All(i)
  1152.         tTagName = LCase(tObj.tagName)
  1153.         Select Case tTagName
  1154.             Case "div", "span"
  1155.                 If LCase(tObj.Style.position) = "absolute" Then
  1156.                     tObj.Style.display = "none"
  1157.                     'tObj.Style.visibility = "hidden"
  1158.                     tObj.innerHTML = ""
  1159.                     'tObj.outerHTML = ""
  1160.                 End If
  1161.         End Select
  1162.     Next i
  1163. End If
  1164. Exit Sub
  1165. due:
  1166.     ErrorLog.AddLog "NoShowFloat2" & Chr(9) & Err.Description
  1167. End Sub
  1168. '不显示Object
  1169. Public Sub NoShowObject()
  1170. On Error Resume Next
  1171. 'Call EnumFrame(webMe.Document.parentwindow, "NoShowObject2")
  1172. Dim i&, tObj As Object, tWb As Object
  1173. Dim tWbs As Collection
  1174. Set tWbs = New Collection
  1175. tWbs.Add webMe
  1176. Call EnumFrames(webMe, tWbs)
  1177. For Each tWb In tWbs
  1178.     Set tObj = Nothing
  1179.     Set tObj = tWb.Document
  1180.     If Not tObj Is Nothing Then
  1181.         Call NoShowObject2(tObj)
  1182.     End If
  1183. Next tWb
  1184. 'For i = 1 To mWebObjCnt
  1185. '    If Not mWebObjects(i).IsEmpty Then
  1186. '        Set tObj = Nothing
  1187. '        Set tObj = mWebObjects(i).WebObject.Document
  1188. '        If Not tObj Is Nothing Then
  1189. '            Call NoShowObject2(tObj)
  1190. '        End If
  1191. '    End If
  1192. 'Next i
  1193. 'Exit Sub
  1194. 'due:
  1195. '    Debug.Print Err.Description
  1196. End Sub
  1197. Public Sub NoShowObject2(nDoc As Object)
  1198. On Error GoTo due
  1199. Dim i&, aLeng&
  1200. Dim tObj As Object
  1201. Dim tTagName$
  1202. If Not nDoc Is Nothing Then
  1203.     aLeng = nDoc.All.Length
  1204.     For i = aLeng - 1 To 0 Step -1
  1205.         Set tObj = nDoc.All(i)
  1206.         tTagName = LCase(tObj.tagName)
  1207.         Select Case tTagName
  1208.             Case "object"
  1209.                 'tObj.Style.display = "none"
  1210.                 tObj.outerHTML = ""
  1211.             Case "embed"
  1212.                 If LCase(Right(tObj.src, 4)) = ".swf" Then
  1213.                     'tObj.Style.display = "none"
  1214.                     tObj.outerHTML = ""
  1215.                 End If
  1216.         End Select
  1217.     Next i
  1218. End If
  1219. Exit Sub
  1220. due:
  1221.     ErrorLog.AddLog "NoShowObject2" & Chr(9) & Err.Description
  1222. End Sub
  1223. Public Sub ClearMouseLimit()
  1224. Attribute ClearMouseLimit.VB_Description = "清除右键限制"
  1225. On Error Resume Next
  1226. Dim i&, tObj As MSHTML.HTMLDocument
  1227. Dim tWb As Object, tWbs As Collection
  1228. Set tWbs = New Collection
  1229. tWbs.Add webMe
  1230. Call EnumFrames(webMe, tWbs)
  1231. For Each tWb In tWbs
  1232.     Set tObj = Nothing
  1233.     Set tObj = tWb.Document
  1234.     If Not tObj Is Nothing Then
  1235.         With tObj
  1236.             .onmousedown = ""
  1237.             .onmouseup = ""
  1238.             .oncontextmenu = ""
  1239.             .onselectstart = ""
  1240.             .body.onselectstart = ""
  1241.             .body.oncontextmenu = ""
  1242.             .body.onmousedown = ""
  1243.             .body.onmouseup = ""
  1244.             .body.ondragstart = ""
  1245.             
  1246.         End With
  1247.     End If
  1248. Next tWb
  1249. 'For i = 1 To mWebObjCnt
  1250. '    If Not mWebObjects(i).IsEmpty Then
  1251. '        Set tObj = Nothing
  1252. '        Set tObj = mWebObjects(i).WebObject.Document
  1253. '        If Not tObj Is Nothing Then
  1254. '            With tObj
  1255. '                .onmousedown = ""
  1256. '                .onmouseup = ""
  1257. '                .oncontextmenu = ""
  1258. '                .onselectstart = ""
  1259. '                .body.onselectstart = ""
  1260. '                .body.oncontextmenu = ""
  1261. '                .body.onmousedown = ""
  1262. '                .body.onmouseup = ""
  1263. '                '.body.onscroll = ""
  1264. '            End With
  1265. '        End If
  1266. '    End If
  1267. 'Next i
  1268. End Sub
  1269. Public Sub RefreshWeb()
  1270. webMe.Refresh2 3
  1271. End Sub
  1272. '"newwindow"后,新窗口需要被调用这个
  1273. Public Function IniNewWeb(nAutoCanNew As Boolean, nPreIndex As Long, lptPage As Long) As Object
  1274. tagIndex = -1
  1275. 'CanNotShow = True
  1276. mAutoCanNew = nAutoCanNew
  1277. mPreIndex = nPreIndex
  1278. Set IniNewWeb = webMe '.object
  1279. Call CopyPageProperty(lptPage)
  1280. mIsSingleWindow = False
  1281. Call gMainForm.NewWebbrowser(, Me, , , webbState(mPreIndex).TabBtn.Index + 1)
  1282. End Function
  1283. '继承属性
  1284. Private Sub CopyPageProperty(lptPage As Long)
  1285. On Error Resume Next
  1286. Dim tProperty As mTypPageProperty
  1287. Dim tDlctl As DownloadCtrlFlags
  1288. CopyMemory ByVal VarPtr(tProperty), ByVal lptPage, Len(tProperty)
  1289. With tProperty
  1290.     mPvnPop = .PvnPop
  1291.     mDownloadCtrl = .DLCtrl
  1292.     mDL_Image = ((.DLCtrl And DLCTL_DLIMAGES) = DLCTL_DLIMAGES)
  1293.     mDL_BgSound = ((.DLCtrl And DLCTL_BGSOUNDS) = DLCTL_BGSOUNDS)
  1294.     mDL_Video = ((.DLCtrl And DLCTL_VIDEOS) = DLCTL_VIDEOS)
  1295.     mDL_Script = Not ((.DLCtrl And DLCTL_NO_SCRIPTS) = DLCTL_NO_SCRIPTS)
  1296.     mDL_ActiveX = Not ((.DLCtrl And DLCTL_NO_RUNACTIVEXCTLS) = DLCTL_NO_RUNACTIVEXCTLS)
  1297.     mDL_JavaApplet = Not ((.DLCtrl And DLCTL_NO_JAVA) = DLCTL_NO_JAVA)
  1298.     mDl_DlActiveX = Not ((.DLCtrl And DLCTL_NO_DLACTIVEXCTLS) = DLCTL_NO_DLACTIVEXCTLS)
  1299.     
  1300.     vCWebMe.DownloadCtrl = .DLCtrl
  1301.     
  1302.     mPreIndex = .ParentIndex
  1303.     mPreUrl = webbState(mPreIndex).webForm.GetWebUrl
  1304. End With
  1305. End Sub
  1306. Public Sub AddToUrlFilter()
  1307. UrlFilterCount = UrlFilterCount + 1
  1308. ReDim Preserve UrlFilter(0 To UrlFilterCount)
  1309. UrlFilter(UrlFilterCount) = LCase(webMe.LocationURL)
  1310. End Sub
  1311. 'Private Function MatchUrl(nFilterUrl As String, nUrl As String) As Boolean
  1312. 'Dim tFUrlArr() As String
  1313. 'Dim i&, ub&, pos1&
  1314. 'Dim rtn As Boolean
  1315. '
  1316. 'tFUrlArr = Split(nFilterUrl, "*")
  1317. 'ub = UBound(tFUrlArr)
  1318. 'pos1 = 1
  1319. 'rtn = True
  1320. 'For i = 0 To ub
  1321. '    If tFUrlArr(i) <> "" Then
  1322. '        pos1 = InStr(pos1, nUrl, tFUrlArr(i), vbTextCompare)
  1323. '        If pos1 > 0 Then
  1324. '            Select Case i
  1325. '                Case 0
  1326. '                    If pos1 <> 1 Then
  1327. '                        rtn = False
  1328. '                        Exit For
  1329. '                    End If
  1330. '                Case ub
  1331. '                    If pos1 + Len(tFUrlArr(i)) - 1 <> Len(nUrl) Then
  1332. '                        rtn = False
  1333. '                        Exit For
  1334. '                    End If
  1335. '            End Select
  1336. '            pos1 = pos1 + Len(tFUrlArr(i))
  1337. '        Else
  1338. '            rtn = False
  1339. '            Exit For
  1340. '        End If
  1341. '    End If
  1342. 'Next i
  1343. '
  1344. 'MatchUrl = rtn
  1345. 'End Function
  1346. Public Property Get hWeb() As Long
  1347. hWeb = mHWeb
  1348. End Property
  1349. '返回点所在的Frame
  1350. Public Function FindFrameFromPoint(x As Long, y As Long) As Object
  1351. On Error GoTo due
  1352. Dim i&
  1353. Dim nPt As POINTAPI
  1354. Dim rtn As Object, tDoc As Object
  1355. Dim tWbs As Collection, tWbsCnt&
  1356. nPt.x = x: nPt.y = y
  1357. Set rtn = Nothing
  1358. Set tWbs = New Collection
  1359. tWbs.Add webMe
  1360. Call EnumFrames(webMe, tWbs)
  1361. tWbsCnt = tWbs.Count
  1362. For i = tWbsCnt To 1 Step -1
  1363.     Set tDoc = tWbs(i).Document
  1364.     If Not tDoc Is Nothing Then
  1365.         If FrameInPoint(tDoc, nPt) Then
  1366.             Set rtn = tDoc.parentWindow
  1367.             Exit For
  1368.         End If
  1369.     End If
  1370. Next i
  1371. Set FindFrameFromPoint = rtn
  1372. Exit Function
  1373. due:
  1374.     ErrorLog.AddLog "FindFrameFromPoint" & vbTab & Err.Description '& vbTab & str(mWebObjCnt)
  1375.     Resume Next
  1376. End Function
  1377. 'Public Function FindFrameFromPoint2(x As Long, y As Long) As Object
  1378. 'On Error GoTo due
  1379. 'Dim i&
  1380. 'Dim nPt As POINTAPI
  1381. 'Dim rtn As Object, tDoc As Object
  1382. 'nPt.x = x: nPt.y = y
  1383. 'Set rtn = Nothing
  1384. 'For i = mWebObjCnt To 1 Step -1
  1385. '    Set tDoc = Nothing
  1386. '    Set tDoc = mWebObjects(i).WebObject.Document
  1387. '    If Not tDoc Is Nothing Then
  1388. '        If FrameInPoint(tDoc, nPt) Then
  1389. '            Set rtn = mWebObjects(i).WebObject.Document.parentWindow
  1390. '            Exit For
  1391. '        End If
  1392. '    End If
  1393. 'Next i
  1394. 'Set FindFrameFromPoint2 = rtn
  1395. 'Exit Function
  1396. 'due:
  1397. '    ErrorLog.AddLog "FindFrameFromPoint" & vbTab & Err.Description '& vbTab & str(mWebObjCnt)
  1398. '    Resume Next
  1399. 'End Function
  1400. '点是否在Frame中
  1401. Private Function FrameInPoint(nDoc As Object, nPt As POINTAPI) As Boolean
  1402. On Error Resume Next
  1403. Dim tRc As RECT
  1404. Dim rtn As Boolean
  1405. rtn = False
  1406. tRc.Top = nDoc.parentWindow.screenTop
  1407. tRc.Left = nDoc.parentWindow.screenLeft
  1408. tRc.Right = tRc.Left + nDoc.body.clientWidth
  1409. tRc.Bottom = tRc.Top + nDoc.body.clientHeight
  1410. If PtInRect(tRc, nPt.x, nPt.y) Then
  1411.     rtn = True
  1412. End If
  1413. FrameInPoint = rtn
  1414. End Function
  1415. 'Private Function EnumFrame(nWindow As Object, nFunctionName As String) As Boolean
  1416. 'On Error GoTo due
  1417. '
  1418. 'Dim i&
  1419. 'Dim frameCnt&
  1420. 'Dim tWin As Object
  1421. 'frameCnt = nWindow.Frames.Length
  1422. 'For i = 0 To frameCnt - 1
  1423. '    Set tWin = Nothing
  1424. '    Set tWin = nWindow.Frames(i)
  1425. '    If Not tWin Is Nothing Then
  1426. '        Call EnumFrame(tWin, nFunctionName)
  1427. '    End If
  1428. 'Next i
  1429. '
  1430. 'CallByName Me, nFunctionName, VbMethod, nWindow.Document
  1431. 'Exit Function
  1432. '
  1433. 'due:
  1434. '    ErrorLog.AddLog "EnumFrame" & Chr(9) & Err.Description
  1435. '    Resume Next
  1436. 'End Function
  1437. 'Private Sub SetWebEvent()
  1438. 'On Error Resume Next
  1439. 'If isUnloading Then Exit Sub
  1440. 'Dim i&
  1441. 'Dim tDoc As Object, tDrag As cActiveWebEvent
  1442. 'Dim twb As Object, tWbs As Collection
  1443. 'Set tWbs = New Collection
  1444. 'tWbs.Add webMe
  1445. 'Call EnumFrames(webMe, tWbs)
  1446. 'For Each twb In tWbs
  1447. '    Set tDoc = Nothing
  1448. '    Set tDoc = twb.Document
  1449. '    If Not tDoc Is Nothing Then
  1450. '        Set tDrag = New cActiveWebEvent
  1451. '        tDrag.ParentForm = Me
  1452. '        tDrag.pDisp = twb
  1453. '        tDoc.ondragstart = tDrag
  1454. '    End If
  1455. 'Next twb
  1456. 'For i = mWebObjCnt To 1 Step -1
  1457. '    If Not mWebObjects(i).IsEmpty Then
  1458. '        Set tDoc = Nothing
  1459. '        Set tDoc = mWebObjects(i).WebObject.Document
  1460. '        If Not tDoc Is Nothing Then
  1461. '            Set tDrag = New cActiveWebEvent
  1462. '            tDrag.pDisp = mWebObjects(i).WebObject
  1463. '            tDrag.ParentForm = Me
  1464. '            tDoc.ondragstart = tDrag
  1465. '        Else
  1466. '             mWebObjects(i).IsEmpty = True
  1467. '             Set mWebObjects(i).WebObject = Nothing
  1468. '        End If
  1469. '    End If
  1470. 'Next i
  1471. 'End Sub
  1472. 'Private Function GetNextTab(nIndex As Long) As Long
  1473. 'Dim i&
  1474. 'Dim tOrder&, rtn&
  1475. 'tOrder = webbState(nIndex).tabOrder
  1476. 'rtn = 0
  1477. 'For i = 1 To browserCount
  1478. '    If webbState(i).isLoaded Then
  1479. '        If webbState(i).tabOrder = tOrder + 1 Then
  1480. '            rtn = i
  1481. '            Exit For
  1482. '        End If
  1483. '    End If
  1484. 'Next i
  1485. 'GetNextTab = rtn
  1486. 'End Function
  1487. Public Function GetWebUrl() As String
  1488. GetWebUrl = mWebUrl
  1489. End Function
  1490. Public Function GetWebTitle() As String
  1491. GetWebTitle = mWebTitle
  1492. End Function
  1493. '使wbb失去输入焦点
  1494. Public Sub Release()
  1495. Call vCWebMe.Release
  1496. End Sub
  1497. Private Sub IniVar()
  1498. NoActive = False
  1499. mSetWebWidth = -1
  1500. mSetWebHeight = -1
  1501. IsAllOpenNew = 0 ' gIsAllOpenNew
  1502. mIsImage = False
  1503. mDL_BgSound = gDL_BgSound ' True
  1504. mDL_Image = gDL_Image 'True
  1505. mDL_Script = gDL_Script 'True
  1506. mDL_Video = gDL_Video 'True
  1507. mDL_ActiveX = gDL_ActiveX ' True
  1508. mDL_JavaApplet = gDL_JavaApplet 'True
  1509. mDl_DlActiveX = gDl_DlActiveX
  1510. newInSelfScript = False
  1511. End Sub
  1512. '初始化下载控制,获得mDownloadControl
  1513. Private Sub IniDownloadControl()
  1514. mDownloadCtrl = DLCTL_Default 'Or DLCTL_NO_DLACTIVEXCTLS  'Or DLCTL_SILENT
  1515. '不下载ActiveX
  1516. If mDl_DlActiveX Then
  1517. Else
  1518.     mDownloadCtrl = mDownloadCtrl Or DLCTL_NO_DLACTIVEXCTLS
  1519. End If
  1520. If mDL_Image Then
  1521. Else
  1522.     mDownloadCtrl = mDownloadCtrl Xor DLCTL_DLIMAGES
  1523. End If
  1524. If mDL_BgSound Then
  1525. Else
  1526.     mDownloadCtrl = mDownloadCtrl Xor DLCTL_BGSOUNDS
  1527. End If
  1528. If mDL_Video Then
  1529. Else
  1530.     mDownloadCtrl = mDownloadCtrl Xor DLCTL_VIDEOS
  1531. End If
  1532. If Not mDL_Script Then
  1533.     mDownloadCtrl = mDownloadCtrl Or DLCTL_NO_SCRIPTS
  1534. Else
  1535. End If
  1536. If Not mDL_ActiveX Then
  1537.     mDownloadCtrl = mDownloadCtrl Or DLCTL_NO_RUNACTIVEXCTLS
  1538. Else
  1539. End If
  1540. If Not mDL_JavaApplet Then
  1541.     mDownloadCtrl = mDownloadCtrl Or DLCTL_NO_JAVA
  1542. Else
  1543. End If
  1544. End Sub
  1545. '==================================================
  1546. '======== 下载控制, 允许下载的属性,如图片 ===========
  1547. '图片
  1548. Public Property Get DL_Image() As Boolean
  1549. DL_Image = mDL_Image
  1550. End Property
  1551. Public Property Let DL_Image(ByVal vNewValue As Boolean)
  1552. mDL_Image = vNewValue
  1553. Call IniDownloadControl
  1554. vCWebMe.DownloadCtrl = mDownloadCtrl
  1555. webMe.Refresh2 1
  1556. End Property
  1557. '背景音乐
  1558. Public Property Get DL_BgSound() As Boolean
  1559. DL_BgSound = mDL_BgSound
  1560. End Property
  1561. Public Property Let DL_BgSound(ByVal vNewValue As Boolean)
  1562. mDL_BgSound = vNewValue
  1563. Call IniDownloadControl
  1564. vCWebMe.DownloadCtrl = mDownloadCtrl
  1565. webMe.Refresh2 1
  1566. End Property
  1567. '视频
  1568. Public Property Get DL_Video() As Boolean
  1569. DL_Video = mDL_Video
  1570. End Property
  1571. Public Property Let DL_Video(ByVal vNewValue As Boolean)
  1572. mDL_Video = vNewValue
  1573. Call IniDownloadControl
  1574. vCWebMe.DownloadCtrl = mDownloadCtrl
  1575. webMe.Refresh2 1
  1576. End Property
  1577. '脚本
  1578. Public Property Get DL_Script() As Boolean
  1579. DL_Script = mDL_Script
  1580. End Property
  1581. Public Property Let DL_Script(ByVal vNewValue As Boolean)
  1582. mDL_Script = vNewValue
  1583. Call IniDownloadControl
  1584. vCWebMe.DownloadCtrl = mDownloadCtrl
  1585. webMe.Refresh2 1
  1586. End Property
  1587. '运行ActiveX Control
  1588. Public Property Get DL_ActiveX() As Boolean
  1589. DL_ActiveX = mDL_ActiveX
  1590. End Property
  1591. Public Property Let DL_ActiveX(ByVal vNewValue As Boolean)
  1592. mDL_ActiveX = vNewValue
  1593. Call IniDownloadControl
  1594. vCWebMe.DownloadCtrl = mDownloadCtrl
  1595. webMe.Refresh2 1
  1596. End Property
  1597. '运行Java Applet
  1598. Public Property Get DL_JavaApplet() As Boolean
  1599. DL_JavaApplet = mDL_JavaApplet
  1600. End Property
  1601. Public Property Let DL_JavaApplet(ByVal vNewValue As Boolean)
  1602. mDL_JavaApplet = vNewValue
  1603. Call IniDownloadControl
  1604. vCWebMe.DownloadCtrl = mDownloadCtrl
  1605. webMe.Refresh2 1
  1606. End Property
  1607. '下载ActiveX
  1608. Public Property Get Dl_DlActiveX() As Boolean
  1609. Dl_DlActiveX = mDl_DlActiveX
  1610. End Property
  1611. Public Property Let Dl_DlActiveX(ByVal vNewValue As Boolean)
  1612. mDl_DlActiveX = vNewValue
  1613. Call IniDownloadControl
  1614. vCWebMe.DownloadCtrl = mDownloadCtrl
  1615. webMe.Refresh2 1
  1616. End Property
  1617. '统一设置
  1618. Public Sub Dl_EnableAll(nAll As Boolean)
  1619. mDL_BgSound = nAll
  1620. mDL_Image = nAll
  1621. mDL_Script = nAll
  1622. mDL_Video = nAll
  1623. mDL_ActiveX = nAll
  1624. mDL_JavaApplet = nAll
  1625. mDl_DlActiveX = nAll
  1626. Call IniDownloadControl
  1627. 'mDownloadCtrl = tDlctl
  1628. vCWebMe.DownloadCtrl = mDownloadCtrl
  1629. webMe.Refresh2 1
  1630. End Sub
  1631. '===============================================
  1632. '判断url是否图片
  1633. Private Function UrlIsImage(ByVal nUrl As String) As Boolean
  1634. Dim tPos&, tExtName$
  1635. Dim rtn As Boolean
  1636. rtn = False
  1637. tPos = InStrRev(nUrl, ".")
  1638. If tPos > 0 Then
  1639.     tExtName = LCase(Mid$(nUrl, tPos + 1))
  1640.     Select Case tExtName
  1641.         Case "jpg", "jpeg", "gif", "png", "bmp"
  1642.             rtn = True
  1643.         Case Else
  1644.             rtn = False
  1645.     End Select
  1646. End If
  1647. UrlIsImage = rtn
  1648. End Function
  1649. '判断页面规则
  1650. Private Function GetPageRuleIndex(nUrl As String, Optional nAll As Boolean = True) As Long
  1651. Dim i&, j&
  1652. nUrl = LCase(nUrl)
  1653. If nAll Then
  1654.     For i = 1 To PageRuleCnt
  1655.         With PageRule(i)
  1656.             If .Enabled = 1 Then
  1657.                 For j = 0 To .UrlCnt - 1
  1658.                     If MatchUrl(.Urls(j), nUrl) Then
  1659.                         GetPageRuleIndex = i
  1660.                         Exit Function
  1661.                     End If
  1662.                 Next j
  1663.             End If
  1664.         End With
  1665.     Next i
  1666.     GetPageRuleIndex = -1
  1667. Else
  1668.     For i = 1 To PageRuleCnt
  1669.         With PageRule(i)
  1670.             If .Enabled = 1 Then
  1671.                 If .Type = 1 Or .ForceChange Then
  1672.                     For j = 0 To .UrlCnt - 1
  1673.                         If MatchUrl(.Urls(j), nUrl) Then
  1674.                             GetPageRuleIndex = i
  1675.                             Exit Function
  1676.                         End If
  1677.                     Next j
  1678.                 End If
  1679.             End If
  1680.         End With
  1681.     Next i
  1682.     GetPageRuleIndex = -1
  1683. End If
  1684. End Function
  1685. '实施"页面规则",返回值是.Type值,-1则什么都没有执行
  1686. 'nTypeMask:只检查.Type=nTypeMask的项,<0时,检查所有项
  1687. Private Function DoPageRule(ByVal nUrl As String, _
  1688.         Optional objIsMe As Boolean = True, _
  1689.         Optional nTypeMask As Long = -1) As Long
  1690. Dim tIndex As Long
  1691. Dim rtn As Long
  1692. rtn = -1
  1693. If gEnablePageRule = 1 Then
  1694.     If mFirstNav Then
  1695.         tIndex = GetPageRuleIndex(nUrl)
  1696.     Else
  1697.         tIndex = GetPageRuleIndex(nUrl, False)
  1698.     End If
  1699.     If tIndex <> -1 Then
  1700.         With PageRule(tIndex)
  1701.             If nTypeMask < 0 Or nTypeMask = .Type Then
  1702.                 Select Case .Type
  1703.                     Case 0
  1704.                         If (mIsSingleWindow Or .ForceChange) And objIsMe Then
  1705.                             mDL_BgSound = .DL_BgSound ' True
  1706.                             mDL_Image = .DL_Image 'True
  1707.                             mDL_Script = .DL_Script 'True
  1708.                             mDL_Video = .DL_Video 'True
  1709.                             mDL_ActiveX = .DL_ActiveX ' True
  1710.                             mDL_JavaApplet = .DL_JavaApplet 'True
  1711.                             mPvnPop = .AutoPreventPop
  1712.                             If .AllwaysOpenNew Then
  1713.                                 IsAllOpenNew = 1
  1714.                             Else
  1715.                                 IsAllOpenNew = 0
  1716.                             End If
  1717.                             Call IniDownloadControl
  1718.                             vCWebMe.DownloadCtrl = mDownloadCtrl
  1719.                             
  1720.                             If gActiveWebIndex = tagIndex Then
  1721.                                 If mPvnPop > 0 Then
  1722.                                     gMainForm.SetTbrBtnState_AutoPvntPop 1 ' tbrPressed
  1723.                                 Else
  1724.                                     gMainForm.SetTbrBtnState_AutoPvntPop 0 'tbrUnpressed
  1725.                                 End If
  1726.                                 
  1727. '                                If IsAllOpenNew = 1 Then
  1728. '                                    gMainForm.tlbOther.Buttons(TbrK_Small_LockNew).Value = tbrPressed
  1729. '                                Else
  1730. '                                    gMainForm.tlbOther.Buttons(TbrK_Small_LockNew).Value = tbrUnpressed
  1731. '                                End If
  1732.                                 Call gMainForm.m_cTbrSmall.CheckButton(TbrID_Small_LockNew, (IsAllOpenNew = 1))
  1733.                             End If
  1734.                             
  1735.                             
  1736.                             rtn = 0
  1737.                         Else
  1738.                             rtn = -1
  1739.                         End If
  1740.                     Case 1
  1741.                         ShellExecute 0&, "open", .OutExePath, _
  1742.                             Replace(.OutExeParam, "%url%", nUrl), .OutExePath, SW_SHOW
  1743.                         rtn = 1
  1744.                 End Select
  1745.             End If
  1746.         End With
  1747.         
  1748.     End If
  1749. End If
  1750. DoPageRule = rtn
  1751. End Function
  1752. Public Sub Navigate(url As String, Optional nExe As Boolean = True)
  1753. Dim doRtn&
  1754. If Not webMe Is Nothing Then
  1755.     mIsDoPageRule = True
  1756.     
  1757.     If nExe Then
  1758.         doRtn = DoPageRule(url)
  1759.     Else
  1760.         doRtn = DoPageRule(url, , 0)
  1761.     End If
  1762.     'CanNotShow = False
  1763.     Select Case doRtn
  1764.         Case 1
  1765.             'Call gMainForm.UnloadBrowser(ByVal tagIndex)
  1766.         Case Else
  1767.             webMe.Navigate2 url
  1768.     End Select
  1769. End If
  1770. End Sub
  1771. ''用于新键页面,检查是否应该显示
  1772. ''true:链接建立,不需要关闭,false:需要关闭
  1773. 'Public Function Navigate2(Url As String) As Boolean
  1774. 'Dim doRtn&
  1775. 'Dim rtn As Boolean
  1776. 'rtn = False
  1777. 'CanNotShow = True
  1778. 'If Not webMe Is Nothing Then
  1779. '    mIsDoPageRule = True
  1780. '
  1781. '    doRtn = DoPageRule(Url)
  1782. '    Select Case doRtn
  1783. '        Case 1
  1784. '            rtn = False
  1785. '            CanNotShow = True
  1786. '            'Call gMainForm.UnloadBrowser(ByVal tagIndex)
  1787. '        Case Else
  1788. '            rtn = True
  1789. '            CanNotShow = False
  1790. '            'webMe.Navigate2 Url
  1791. '    End Select
  1792. 'End If
  1793. 'Navigate2 = rtn
  1794. 'End Function
  1795. '获得可以前进后退的步数
  1796. 'Private Function GetStep(Flags As TLENUMF) As Long
  1797. 'Dim mEnum As olelib.IEnumTravelLogEntry
  1798. 'Dim Entry As olelib.ITravelLogEntry
  1799. 'Dim fetched As ULONG
  1800. 'Dim stepcnt&
  1801. '
  1802. 'stepcnt = 0
  1803. 'If Not Stg Is Nothing Then
  1804. '    Call Stg.EnumEntries(Flags, mEnum)
  1805. '    If Not mEnum Is Nothing Then
  1806. '        Call mEnum.Next(1, Entry, fetched)
  1807. '        stepcnt = 0
  1808. '        While fetched = 1
  1809. '            stepcnt = stepcnt + 1
  1810. '            Call mEnum.Next(1, Entry, fetched)
  1811. '        Wend
  1812. '    End If
  1813. 'End If
  1814. 'GetStep = stepcnt
  1815. 'End Function
  1816. '获得ITravelLogStg
  1817. Public Function LogConnect() As Boolean
  1818. On Error Resume Next
  1819. Dim isp As olelib.IServiceProvider
  1820. Dim tUn As olelib.IUnknown
  1821. Set tUn = webMe.Application
  1822. Call tUn.QueryInterface(IID_IServiceProvider, isp)
  1823. If Not isp Is Nothing Then
  1824.     Call isp.QueryService(SID_STravelLogCursor, IID_ITravelLogStg, Stg)
  1825. End If
  1826. End Function
  1827. Public Sub WebGo(nStep As Long)
  1828. On Error Resume Next
  1829. Dim i&
  1830. If nStep > 0 Then
  1831.     For i = 1 To nStep
  1832.         webMe.GoForward
  1833.     Next i
  1834. ElseIf nStep < 0 Then
  1835.     For i = 1 To -nStep
  1836.         webMe.GoBack
  1837.     Next i
  1838. End If
  1839. End Sub
  1840. '加载前进后退按钮下拉菜单
  1841. Public Sub SetHistoryButton(flags As TLENUMF, vPMnu As cPopMenu) ' Button As MSComctlLib.Button)
  1842. 'Dim tmnu As MSComctlLib.ButtonMenu
  1843. Dim mEnum As olelib.IEnumTravelLogEntry
  1844. Dim Entry As olelib.ITravelLogEntry
  1845. Dim fetched As ULONG
  1846. Dim stepcnt&
  1847. Dim tPtrTitle&, tTitle$
  1848. Dim tPtrUrl& ', tUrl$
  1849. 'Button.ButtonMenus.Clear
  1850. vPMnu.ClearItems
  1851. stepcnt = 0
  1852. If Not Stg Is Nothing Then
  1853.     Call Stg.EnumEntries(flags, mEnum)
  1854.     If Not mEnum Is Nothing Then
  1855.         Call mEnum.Next(1, Entry, fetched)
  1856.         stepcnt = 0
  1857.         While fetched = 1
  1858.             stepcnt = stepcnt + 1
  1859.             If stepcnt <= 10 Then
  1860.                 Entry.GetTitle tPtrTitle
  1861.                 
  1862.                 tTitle = Trim$(SysAllocString(tPtrTitle))
  1863.                 Call CoTaskMemFree(tPtrTitle)
  1864.                 If tTitle = "" Then
  1865.                     Entry.GetUrl tPtrUrl
  1866.                     tTitle = Trim$(SysAllocString(tPtrUrl))
  1867.                     Call CoTaskMemFree(tPtrUrl)
  1868.                 End If
  1869.                 'Button.ButtonMenus.Add , , tTitle
  1870.                 vPMnu.Add tTitle, , stepcnt
  1871.                 Call mEnum.Next(1, Entry, fetched)
  1872.             Else
  1873.                 fetched = 0
  1874.                 vPMnu.Add vbNullString, pmsSeparator
  1875.                 vPMnu.Add "More", pmsString Or pmsDisabled
  1876. '                Button.ButtonMenus.Add , , "-"
  1877. '                Set tmnu = Button.ButtonMenus.Add(, , "More")
  1878. '                tmnu.Enabled = False
  1879.             End If
  1880.         Wend
  1881.     End If
  1882. End If
  1883. End Sub
  1884. 'Public Sub SetHistoryButton(Flags As TLENUMF, Button As MSComctlLib.Button)
  1885. 'If Stg Is Nothing Then Exit Sub
  1886. 'On Error Resume Next
  1887. 'Dim tcnt As Long
  1888. 'Dim backStep As Long
  1889. 'Dim i&
  1890. 'Dim tmnu As MSComctlLib.ButtonMenu
  1891. 'Dim tStr$
  1892. 'tcnt = GetStep(Flags)
  1893. 'Button.ButtonMenus.Clear
  1894. '
  1895. 'If tcnt > 0 Then
  1896. '    If tcnt > 10 Then tcnt = 10
  1897. '    If Flags = TLEF_RELATIVE_FORE Then
  1898. '        backStep = GetStep(TLEF_RELATIVE_BACK)
  1899. '        For i = 1 To tcnt
  1900. '            tStr = ""
  1901. '            tStr = Titles(backStep + 1 + i)
  1902. '            If tStr = "" Then tStr = "Step" & Str(i)
  1903. '            Set tmnu = Button.ButtonMenus.Add(, , tStr)
  1904. '        Next i
  1905. '    ElseIf Flags = TLEF_RELATIVE_BACK Then
  1906. '        For i = 1 To tcnt
  1907. '            tStr = ""
  1908. '            tStr = Titles(tcnt - i + 1)
  1909. '            If tStr = "" Then tStr = "Step" & Str(i)
  1910. '            Set tmnu = Button.ButtonMenus.Add(, , tStr)
  1911. '        Next i
  1912. '    End If
  1913. '
  1914. '    Button.ButtonMenus.Add , , "-"
  1915. '    Set tmnu = Button.ButtonMenus.Add(, , "More")
  1916. '    tmnu.Enabled = False
  1917. 'Else
  1918. '    Set tmnu = Button.ButtonMenus.Add(, , "(none)")
  1919. '    tmnu.Enabled = False
  1920. 'End If
  1921. '
  1922. 'End Sub
  1923. '设置Titles
  1924. 'Private Sub SetTitles(Title As String)
  1925. 'Dim backStep&, foreStep&
  1926. 'Dim totalStep&
  1927. 'Dim curStep&
  1928. 'foreStep = preForeStep ' GetStep(TLEF_RELATIVE_FORE)
  1929. 'If foreStep = 0 Then
  1930. '    totalStep = GetStep(TLEF_ABSOLUTE)
  1931. '    curStep = GetStep(TLEF_RELATIVE_INCLUDE_CURRENT)
  1932. '    Debug.Print preTotalStep
  1933. '    If curStep < preStep Then totalStep = totalStep + 1
  1934. '    'preStep = curStep
  1935. '    If totalStep <> TitleCnt Then
  1936. '        TitleCnt = totalStep
  1937. '        ReDim Preserve Titles(0 To TitleCnt)
  1938. '    End If
  1939. '    Titles(TitleCnt) = Title
  1940. 'End If
  1941. '
  1942. 'End Sub
  1943. '保存网页
  1944. Public Sub SaveWeb()
  1945. webMe.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT
  1946. End Sub
  1947. '文字大小
  1948. Public Sub SetFontSize(nSize As Long)
  1949. webMe.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DODEFAULT, CLng(nSize)
  1950. End Sub
  1951. '设置编码
  1952. Public Sub SetCharset(vCharset$)
  1953. webMe.Document.Charset = vCharset
  1954. webMe.Refresh2 2
  1955. End Sub
  1956. '页面缩放
  1957. Public Sub SetPageZoom(nSize As Single)
  1958. webMe.Document.body.Style.Zoom = nSize
  1959. End Sub
  1960. ''获得对应的标签
  1961. 'Private Function GetTabBtn() As ClXButton
  1962. 'If tagIndex > 0 Then
  1963. '    Set GetTabBtn = webbState(tagIndex).webTab
  1964. 'Else
  1965. '    Set GetTabBtn = Nothing
  1966. 'End If
  1967. 'End Function
  1968. '高亮关键字
  1969. Public Sub HightLight(ByVal nStr As String)
  1970. On Error GoTo due:
  1971. Dim i&, tObj As Object
  1972. nStr = Trim(Replace(nStr, vbNewLine, ""))
  1973. If nStr = "" Then Exit Sub
  1974. Dim tWb As Object
  1975. Dim tWbs As Collection
  1976. Set tWbs = New Collection
  1977. tWbs.Add webMe
  1978. Call EnumFrames(webMe, tWbs)
  1979. 'If gSelfDrag.SelfDraging Then
  1980. '    Call HightLight2(nStr, gSelfDrag.pDisp.Document)
  1981. '    For Each tWb In tWbs
  1982. '        If ObjPtr(tWb.Application) <> ObjPtr(gSelfDrag.pDisp) Then
  1983. '    '        Debug.Print "pdisp:"; ObjPtr(tWb.Application), ObjPtr(gSelfDrag.pDisp)
  1984. '    '        Debug.Print "typeof enum:"; TypeOf tWb Is SHDocVw.WebBrowser
  1985. '            Set tObj = Nothing
  1986. '            Set tObj = tWb.Document
  1987. '            If Not tObj Is Nothing Then
  1988. '                Call HightLight2(nStr, tObj)
  1989. '            End If
  1990. '        End If
  1991. '    Next tWb
  1992. 'Else
  1993.     For Each tWb In tWbs
  1994.         Set tObj = Nothing
  1995.         Set tObj = tWb.Document
  1996.         If Not tObj Is Nothing Then
  1997.             Call HightLight2(nStr, tObj)
  1998.         End If
  1999.     Next tWb
  2000. 'End If
  2001. 'For i = 1 To mWebObjCnt
  2002. '    If Not mWebObjects(i).IsEmpty Then
  2003. '        Set tObj = Nothing
  2004. '        Set tObj = mWebObjects(i).WebObject.Document
  2005. '        If Not tObj Is Nothing Then
  2006. '            Call HightLight2(nStr, tObj)
  2007. '        End If
  2008. '    End If
  2009. 'Next i
  2010. Exit Sub
  2011. due:
  2012.     ErrorLog.AddLog "HightLinght:" & Err.Description
  2013. End Sub
  2014. Public Sub HightLight2(nKey$, nDoc As MSHTML.HTMLDocument, Optional beforeTag$ = "", Optional afterTag$ = "")
  2015. On Error GoTo due
  2016. Dim tBody As MSHTML.HTMLBody
  2017. Dim oRange As MSHTML.IHTMLTxtRange
  2018. If beforeTag = "" Then
  2019.     beforeTag = "<span style='background-color:yellow'>"
  2020. End If
  2021. If afterTag = "" Then
  2022.     afterTag = "</span>"
  2023. End If
  2024. Set tBody = nDoc.body
  2025. If Not tBody Is Nothing Then
  2026.     Set oRange = tBody.createTextRange
  2027.     If Not oRange Is Nothing Then
  2028.         oRange.Collapse
  2029.         oRange.Select
  2030.         Debug.Print "cretee range"
  2031.         While oRange.FindText(nKey)
  2032.             Call oRange.pasteHTML(beforeTag & oRange.Text & afterTag)
  2033.             Call oRange.MoveStart("character", 1)
  2034.         Wend
  2035.     End If
  2036. End If
  2037. Exit Sub
  2038. due:
  2039.     Debug.Print "hl2 err:"; Err.Description, Err.Number
  2040.     Resume Next
  2041. End Sub
  2042. '查找
  2043. Public Sub FindWord(nWord$)
  2044. On Error GoTo due
  2045. If Trim(nWord) = "" Then Exit Sub
  2046. Static tBookMark As String 'As Object
  2047. Static tPreWord$
  2048. Static tPreWb As SHDocVw.WebBrowser
  2049. Dim tWb As Object   'html window
  2050. Dim tWbs As Collection
  2051. Dim HaveFind As Boolean
  2052. HaveFind = False
  2053. Set tWbs = New Collection
  2054. tWbs.Add webMe
  2055. Call EnumFrames(webMe, tWbs)
  2056. If nWord <> tPreWord Then
  2057.     'Set tBookMark = Nothing
  2058.     tBookMark = ""
  2059.     Set tPreWb = Nothing 'webMe
  2060.     tPreWord = nWord
  2061. End If
  2062. For Each tWb In tWbs
  2063.     If tPreWb Is Nothing Then
  2064.         Set tPreWb = tWb
  2065.     End If
  2066.     
  2067.     If tWb Is tPreWb Then
  2068.         If FindWord2(nWord, tWb.Document, tBookMark) Then
  2069.             HaveFind = True
  2070.             Exit For
  2071.         Else
  2072.             Set tPreWb = Nothing
  2073.         End If
  2074.     End If
  2075. Next tWb
  2076. If Not HaveFind Then
  2077.     tBookMark = ""
  2078.     Set tPreWb = Nothing
  2079.     tPreWord = ""
  2080.     MsgBox "文档搜索完毕", vbExclamation
  2081. End If
  2082. Exit Sub
  2083. due:
  2084.     ErrorLog.AddLog "FindWord:" & Err.Description
  2085. End Sub
  2086. Private Function FindWord2(nWord$, nDoc As MSHTML.HTMLDocument, nPosBM As String) As Boolean
  2087. Dim oRange As MSHTML.IHTMLTxtRange
  2088. Set oRange = nDoc.body.createTextRange
  2089. 'If Not nPosBM Is Nothing Then
  2090. If nPosBM <> "" Then
  2091.     Call oRange.moveToBookmark(nPosBM)
  2092.     Call oRange.MoveStart("character", 1)
  2093. End If
  2094. If oRange.FindText(nWord) Then
  2095.     nPosBM = oRange.getBookmark
  2096.     'Call oRange.moveToBookmark(nPosBM)
  2097.     Call oRange.Select
  2098.     
  2099.     FindWord2 = True
  2100. Else
  2101.     'Set nPosBM = Nothing
  2102.     nPosBM = ""
  2103.     FindWord2 = False
  2104. End If
  2105. End Function
  2106. '向下上滚动页面
  2107. Public Sub ScrollPage(ByVal ScrollDown As Boolean)
  2108. Dim tpt As POINTAPI
  2109. Dim tWin As Object
  2110. Call GetCursorPos(tpt)
  2111. Set tWin = FindFrameFromPoint(tpt.x, tpt.y)
  2112. If Not tWin Is Nothing Then
  2113.     If ScrollDown Then
  2114.         tWin.scrollBy 0, tWin.Document.body.clientHeight - 20
  2115.     Else
  2116.         tWin.scrollBy 0, -tWin.Document.body.clientHeight + 20
  2117.     End If
  2118. End If
  2119. End Sub
  2120. 'Public Sub HightLight3(nKey As String, nDoc As MSHTML.HTMLDocument)
  2121. 'On Error Resume Next
  2122. 'Dim bodyText As String
  2123. 'Dim tBody As MSHTML.HTMLBody
  2124. ''Dim tNodeCnt&, i&, tStr$
  2125. 'Set tBody = nDoc.body
  2126. 'If Not tBody Is Nothing Then
  2127. ''    tNodeCnt = tBody.childNodes.Length
  2128. ''    For i = 0 To tNodeCnt - 1
  2129. ''        If tBody.childNodes(i).nodeType = 3 Then
  2130. ''            tStr = tBody.childNodes(i).Data
  2131. ''            If ReplaceHightLight(nKey, tStr) Then
  2132. ''                tBody.childNodes(i).Data = tStr
  2133. ''            End If
  2134. ''        Else
  2135. ''            tStr = tBody.childNodes(i).innerHTML
  2136. ''            If ReplaceHightLight(nKey, tStr) Then
  2137. ''                tBody.childNodes(i).innerHTML = tStr
  2138. ''            End If
  2139. ''        End If
  2140. ''    Next i
  2141. '
  2142. '    bodyText = tBody.innerHTML
  2143. '
  2144. '    If ReplaceHightLight(nKey, bodyText) Then
  2145. '        tBody.innerHTML = bodyText
  2146. '    End If
  2147. 'End If
  2148. 'End Sub
  2149. '
  2150. '
  2151. '
  2152. 'Private Function ReplaceHightLight(nKey$, nBodyText$) As Boolean
  2153. 'Dim rtn As Boolean
  2154. 'Dim i&, j&
  2155. 'Dim b1&, b2&, a1&, a2&
  2156. '
  2157. 'Dim tPos&, tPos2&
  2158. 'Dim rlsTxt$
  2159. 'Dim tLen&
  2160. '
  2161. 'Dim highlightStartTag$, highlightEndTag$, StartTagLen&
  2162. 'highlightStartTag = "<span style='background-color:yellow'>"
  2163. 'highlightEndTag = "</span>"
  2164. 'StartTagLen = Len(highlightStartTag)
  2165. '
  2166. 'rtn = False
  2167. 'tLen = Len(nKey)
  2168. 'tPos = InStr(1, nBodyText, nKey)
  2169. 'While tPos > 0
  2170. '    b1 = InStrRev(nBodyText, "<", tPos)
  2171. '    b2 = InStrRev(nBodyText, ">", tPos)
  2172. '    a1 = InStr(tPos, nBodyText, "<")
  2173. '    a2 = InStr(tPos, nBodyText, ">")
  2174. '
  2175. '    If b1 > b2 And a1 > a2 Then
  2176. '    Else
  2177. '        If IsScript(b1, nBodyText) Then
  2178. '        Else
  2179. '            rlsTxt = highlightStartTag & nKey & highlightEndTag
  2180. '            nBodyText = Left(nBodyText, tPos - 1) & rlsTxt & Mid(nBodyText, tPos + tLen)
  2181. '            tPos = tPos + StartTagLen
  2182. '            rtn = True
  2183. '        End If
  2184. '    End If
  2185. '    tPos = InStr(tPos + 1, nBodyText, nKey)
  2186. 'Wend
  2187. 'ReplaceHightLight = rtn
  2188. 'End Function
  2189. '
  2190. 'Private Function IsScript(nPos&, nTxt$) As Boolean
  2191. 'Dim rtn As Boolean
  2192. 'Dim tPos&, tPos2
  2193. 'rtn = False
  2194. 'If nPos > 0 Then
  2195. '    tPos = InStr(nPos, nTxt, " ")
  2196. '    tPos2 = InStr(nPos, nTxt, ">")
  2197. '    If tPos > 0 Then
  2198. '        If tPos < tPos2 Or tPos2 <= 0 Then
  2199. '            rtn = (LCase(Mid(nTxt, nPos + 1, tPos - nPos - 1)) = "script")
  2200. '        End If
  2201. '    End If
  2202. '
  2203. '    If tPos2 > 0 Then
  2204. '        If tPos2 < tPos Or tPos <= 0 Then
  2205. '            rtn = (LCase(Mid(nTxt, nPos + 1, tPos2 - nPos - 1)) = "script")
  2206. '        End If
  2207. '    End If
  2208. 'End If
  2209. 'IsScript = rtn
  2210. 'End Function
  2211. Public Sub ActiveMe(fActive As bool)
  2212. vCWebMe.ActiveMe fActive
  2213. End Sub
  2214. ''执行脚本
  2215. 'Public Function RunScript(nScript$, nLanguage$, nSubName$) As Boolean
  2216. 'On Error GoTo due
  2217. 'Dim tBody As MSHTML.HTMLBody, tWindow As MSHTML.HTMLWindow2
  2218. 'Dim tScript$
  2219. 'If Not webMe.Document Is Nothing Then
  2220. '    Set tBody = webMe.Document.body
  2221. '    Set tWindow = webMe.Document.parentWindow
  2222. '    tScript = "<script DEFER language=" & nLanguage & ">" & vbNewLine & _
  2223. '        nScript & vbNewLine & "</script>"
  2224. '    tScript = "<div id='l_e_script'><br>" & vbNewLine & tScript & vbNewLine & "</div>"
  2225. '
  2226. '
  2227. '    tBody.insertAdjacentHTML "beforeend", tScript
  2228. '    tWindow.execScript nSubName, nLanguage
  2229. '    tBody.All("l_e_script").outerHTML = ""
  2230. '
  2231. 'End If
  2232. 'Exit Function
  2233. '
  2234. 'due:
  2235. '    ErrorLog.AddLog "RunScript " & Err.Description
  2236. '    Resume Next
  2237. 'End Function
  2238. '#################################
  2239. '执行脚本
  2240. Public Sub RunScript(nScript$, Optional nLanguage$ = "JScript", Optional nRunType As Long = 0)
  2241. On Error GoTo due
  2242. Dim tWb As Object, tWbs As Collection
  2243. Dim tDoc As Object
  2244. Dim tWin As Object
  2245. Dim tpt As POINTAPI
  2246. 'Debug.Print nScript, nLanguage
  2247. Select Case nRunType
  2248.     Case 1
  2249.         Set tWbs = New Collection
  2250.         tWbs.Add webMe
  2251.         Call EnumFrames(webMe, tWbs)
  2252.         For Each tWb In tWbs
  2253.             Set tDoc = Nothing
  2254.             Set tDoc = tWb.Document
  2255.             If Not tDoc Is Nothing Then
  2256.                 Call RunScript2(nScript, nLanguage, tDoc.parentWindow)
  2257.             End If
  2258.         Next tWb
  2259.     Case 2
  2260.         Call GetCursorPos(tpt)
  2261.         Set tWin = FindFrameFromPoint(tpt.x, tpt.y)
  2262.         If Not tWin Is Nothing Then
  2263.             Call RunScript2(nScript, nLanguage, tWin)
  2264.         End If
  2265.     Case Else
  2266.         Call RunScript2(nScript, nLanguage)
  2267. End Select
  2268. Exit Sub
  2269. due:
  2270.     ErrorLog.AddLog "RunScript" & Chr(9) & Err.Description
  2271.     Resume Next
  2272. End Sub
  2273. Public Sub RunScript2(nScript$, Optional nLanguage$ = "JScript", Optional nWin As MSHTML.HTMLWindow2)
  2274. On Error Resume Next
  2275. Dim tDoc As MSHTML.HTMLDocument
  2276. If nWin Is Nothing Then
  2277.     Set tDoc = webMe.Document
  2278.     Set nWin = tDoc.parentWindow
  2279. End If
  2280. If Not nWin Is Nothing Then
  2281.     newInSelfScript = True
  2282.     nWin.execScript nScript, nLanguage
  2283.     newInSelfScript = False
  2284. End If
  2285. End Sub
  2286. ''主要是被鼠标手势调用
  2287. 'Public Sub RunScriptByIndex(index&)
  2288. ''If index > 0 And index <= gScriptCnt Then
  2289. ''    With gScripts(index)
  2290. ''        If Not .LoadedScript Then
  2291. ''            Call LoadScriptFile2(gScripts(index))
  2292. ''        End If
  2293. '''        Debug.Print "RunScriptByIndex", index
  2294. ''        Call RunScript(.Script, .Language, .RunType)
  2295. ''    End With
  2296. ''End If
  2297. 'End Sub
  2298. 'Public Sub RunScriptFile(nFile$, nLanguage$)
  2299. 'On Error GoTo due
  2300. 'Dim tFN&
  2301. 'Dim tStr$
  2302. 'tFN = FreeFile
  2303. 'Open nFile For Binary As tFN
  2304. '    tStr = StrConv(InputB(tFN, LOF(tFN)), vbUnicode)
  2305. 'Close tFN
  2306. 'Call RunScript2(tStr, nLanguage)
  2307. 'Exit Sub
  2308. '
  2309. 'due:
  2310. '    Reset
  2311. 'End Sub
  2312. '---------------------------------------------------------------------------------------
  2313. ' Procedure : GetAllDocument
  2314. ' DateTime  : 2005-7-31 22:50
  2315. ' Author    : Lingll
  2316. ' Purpose   : 主要是供插件使用
  2317. '---------------------------------------------------------------------------------------
  2318. Public Function GetAllDocument() As Collection
  2319. Dim tWbs As Collection
  2320. Dim tWb As SHDocVw.WebBrowser
  2321. Dim colResult As Collection
  2322. Set tWbs = New Collection
  2323. tWbs.Add webMe
  2324. Call EnumFrames(webMe, tWbs)
  2325. Set colResult = New Collection
  2326. For Each tWb In tWbs
  2327.     colResult.Add tWb.Document
  2328. Next tWb
  2329. Set GetAllDocument = colResult
  2330. Set colResult = Nothing
  2331. End Function
  2332. '枚举页面中所有的frame
  2333. Public Sub EnumFrames(ByVal wb As SHDocVw.WebBrowser, wbs As Collection)
  2334. Dim pContainer As olelib.IOleContainer
  2335. Dim pEnumerator As olelib.IEnumUnknown
  2336. Dim pUnk As olelib.IUnknown
  2337. Dim pBrowser As SHDocVw.WebBrowser
  2338.    Set pContainer = wb.Document
  2339.    
  2340.    ' Get an enumerator for the frames
  2341.    If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then
  2342.       Set pContainer = Nothing
  2343.       ' Enumerate and refresh all the frames
  2344.       Do While pEnumerator.Next(1, pUnk) = 0
  2345.          On Error Resume Next
  2346.          
  2347.          ' Clear errors
  2348.          Err.Clear
  2349.          
  2350.          ' Get the IWebBrowser2 interface
  2351.          Set pBrowser = pUnk
  2352.    
  2353.          If Err.Number = 0 Then
  2354.             'Debug.Print "Frame: " & pBrowser.LocationURL
  2355.             wbs.Add pBrowser
  2356.             Call EnumFrames(pBrowser, wbs)
  2357.          End If
  2358.       Loop
  2359.       Set pEnumerator = Nothing
  2360.    End If
  2361. End Sub
  2362. '改变me.caption,标签的文字,tiptext
  2363. Private Sub ChangeTabTitle()
  2364. Attribute ChangeTabTitle.VB_Description = "改变me.caption,标签的文字,tiptext"
  2365. 'Dim tmpStr  As String
  2366. 'tmpStr = StrConv(mWebTitle, vbFromUnicode)
  2367. 'If LenB(tmpStr) > TabsTitleLength + 2 Then
  2368. '    webbState(tagIndex).webTab.Caption = StrConv(LeftB$(tmpStr, TabsTitleLength), vbUnicode) & ".."
  2369. 'Else
  2370. '    webbState(tagIndex).webTab.Caption = mWebTitle
  2371. 'End If
  2372. With webbState(tagIndex).TabBtn
  2373.     .Caption = Mid2(mWebTitle, , TabsTitleLength, "..")
  2374.     .TipTitle = mWebTitle
  2375.     .tiptext = mWebUrl
  2376. End With
  2377. 'webbState(tagIndex).webTab.Caption = Mid2(mWebTitle, , TabsTitleLength, "..")
  2378. '
  2379. 'webbState(tagIndex).webTab.TipTitle = mWebTitle
  2380. 'webbState(tagIndex).webTab.TipText = mWebUrl
  2381. Me.Caption = mWebTitle
  2382. If gActiveWebIndex = tagIndex Then
  2383.     gMainForm.ChangeCaption mWebTitle
  2384. End If
  2385. End Sub
  2386. Private Sub webMe_WindowSetHeight(ByVal height As Long)
  2387. Debug.Print "height:"; height
  2388. mSetWebHeight = height
  2389. End Sub
  2390. Private Sub webMe_WindowSetWidth(ByVal width As Long)
  2391. Debug.Print "width:"; width
  2392. mSetWebWidth = width
  2393. End Sub
  2394. '判断是否被设置了长宽
  2395. Public Function HaveSetRect() As Boolean
  2396. HaveSetRect = (mSetWebHeight > 0 And mSetWebWidth > 0)
  2397. End Function
  2398. '获得窗口宽
  2399. Public Function GetSetWinWidth() As Long
  2400. Dim wrc As RECT, crc As RECT
  2401. GetWindowRect Me.hWnd, wrc
  2402. GetClientRect Me.hWnd, crc
  2403. GetSetWinWidth = mSetWebWidth + (wrc.Right - wrc.Left) - (crc.Right - crc.Left) + 4
  2404. End Function
  2405. '获得窗口长
  2406. Public Function GetSetWinHeight() As Long
  2407. Dim wrc As RECT, crc As RECT
  2408. GetWindowRect Me.hWnd, wrc
  2409. GetClientRect Me.hWnd, crc
  2410. GetSetWinHeight = mSetWebHeight + (wrc.Bottom - wrc.Top) - (crc.Bottom - crc.Top) + 4
  2411. End Function
  2412. 'Private Function GetBorderWidth(nHwnd&, getWidth As Boolean) As Long
  2413. 'Dim trc As RECT, trc2 As RECT
  2414. 'GetWindowRect nHwnd, trc
  2415. 'GetClientRect nHwnd, trc2
  2416. 'If getWidth Then
  2417. '    GetBorderWidth =trc.Right-trc.Left +trc2.
  2418. '
  2419. 'End Function
  2420. '设置designMode
  2421. Public Sub SetDesignMode(vOn As Boolean)
  2422. On Error Resume Next
  2423. If vOn Then
  2424.     webMe.Document.designMode = "on"
  2425. Else
  2426.     webMe.Document.designMode = "off"
  2427. End If
  2428. End Sub