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

浏览器

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cDragDropEvent"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '拖拽各方向相关处理
  15. Option Explicit
  16. Private m_InsideIndex As Long
  17. Private Const mSubCount As Long = 11
  18. Private mItemText(0 To mSubCount) As String
  19. Private mTag As String
  20. Public SpIndex_SaveAuto As Long
  21. Public SpIndex_Save As Long
  22. Public SpIndex_HightLight As Long
  23. Public SpIndex_ShowMenu As Long
  24. Public SpIndex_Replace As Long
  25. '"替换"中对应的index
  26. Private m_ReplaceItemIndex As Long
  27. Public Enum DragDropType
  28.     ddTypeImage = 1
  29.     ddTypeLink = 0
  30.     ddTypeText = 2
  31. End Enum
  32. Public DragType As DragDropType
  33. Private Sub Class_Initialize()
  34. m_InsideIndex = 0
  35. Call IniText
  36. SpIndex_SaveAuto = 5
  37. SpIndex_Save = 6
  38. SpIndex_HightLight = 9
  39. SpIndex_Replace = 10
  40. SpIndex_ShowMenu = 11
  41. End Sub
  42. Public Property Get InsideIndex() As Long
  43. InsideIndex = m_InsideIndex
  44. End Property
  45. Public Property Let InsideIndex(nIndex As Long)
  46. If nIndex >= 0 And nIndex <= mSubCount Then
  47.     m_InsideIndex = nIndex
  48. Else
  49.     m_InsideIndex = 0
  50. End If
  51. End Property
  52. Public Property Get EventText() As String
  53. If m_InsideIndex = SpIndex_Replace Then
  54.     If m_ReplaceItemIndex > 0 And m_ReplaceItemIndex <= gSearchEgnCount Then
  55.         EventText = mItemText(SpIndex_Replace) & "->" & gSearchEgn(m_ReplaceItemIndex).Title
  56.     Else
  57.         EventText = mItemText(SpIndex_Replace)
  58.     End If
  59. Else
  60.     EventText = mItemText(m_InsideIndex)
  61. End If
  62. 'If m_InsideIndex = SpIndex_Replace Then
  63. '    If m_ReplaceItemIndex > 0 And m_ReplaceItemIndex <= SearchurlCount Then
  64. '        EventText = mItemText(SpIndex_Replace) & "->" & searchUrl(m_ReplaceItemIndex).Title
  65. '    Else
  66. '        EventText = mItemText(SpIndex_Replace)
  67. '    End If
  68. 'Else
  69. '    EventText = mItemText(m_InsideIndex)
  70. 'End If
  71. End Property
  72. Public Property Get SubCount() As Long
  73. SubCount = mSubCount
  74. End Property
  75. Public Function GetEventText(ByVal index As Long)
  76. If index < 0 Or index > mSubCount Then index = 0
  77. GetEventText = mItemText(index)
  78. End Function
  79. Public Sub Execute()
  80. Call Execute2(m_InsideIndex)
  81. End Sub
  82. Public Sub Execute2(index As Long)
  83. Select Case index
  84.     Case 1
  85.         If CanNewWebByPageRule(gSelfDrag.SrcStr) Then
  86.             Call gMainForm.NewWebbrowser(gSelfDrag.SrcStr)
  87.         End If
  88.     Case 2
  89.         If CanNewWebByPageRule(gSelfDrag.SrcStr) Then
  90.             Call gMainForm.NewWebbrowser(gSelfDrag.SrcStr, , True, True)
  91.         End If
  92.     Case 3
  93.         Call webbState(gSelfDrag.DragFormIndex).webForm.Navigate(gSelfDrag.SrcStr, False)
  94.     Case 4
  95.         Call gMainForm.NewIE(gSelfDrag.SrcStr)
  96.     Case 5
  97.         Call AutoSave
  98.     Case 6
  99.         Call SaveAs
  100.     Case 7
  101.         frmCollectBoard.Show , gMainForm
  102.         frmCollectBoard.AddTab gSelfDrag.SrcStr
  103.     Case 8
  104.         frmCollectBoard.Show , gMainForm
  105.         frmCollectBoard.AddTab gSelfDrag.SrcHtmlText
  106.     Case 9
  107.         Call webbState(gSelfDrag.DragFormIndex).webForm.HightLight(gSelfDrag.SrcStr)
  108.     Case 10
  109.         Call ReplaceAddress(m_ReplaceItemIndex, gSelfDrag.SrcStr)
  110.     Case 11
  111.         Call PopMenuInWeb
  112. End Select
  113. If index >= 0 And index <= mSubCount Then
  114.     gMainForm.ChangeStatusText ("拖拽: " & mItemText(index))
  115. End If
  116. End Sub
  117. '实施"页面规则"中的"运行外部程序",如果运行了则返回False
  118. Private Function CanNewWebByPageRule(ByVal nUrl As String) As Boolean
  119. Dim i&, j&
  120. nUrl = LCase(nUrl)
  121. If gEnablePageRule = 1 Then
  122.     For i = 1 To PageRuleCnt
  123.         With PageRule(i)
  124.             If .Enabled = 1 And .Type = 1 Then
  125.                 For j = 0 To .UrlCnt - 1
  126.                     If MatchUrl(.Urls(j), nUrl) Then
  127.                         ShellExecute 0&, "open", .OutExePath, _
  128.                             Replace(.OutExeParam, "%url%", nUrl), .OutExePath, SW_SHOW
  129.                         CanNewWebByPageRule = False
  130.                         Exit Function
  131.                     End If
  132.                 Next j
  133.             End If
  134.         End With
  135.     Next i
  136. End If
  137. CanNewWebByPageRule = True
  138. End Function
  139. '自动保存
  140. Private Sub AutoSave()
  141. Select Case DragType
  142.     Case ddTypeImage
  143.         If gSelfDrag.SrcFilePath <> "" Then
  144.             Call SaveDragImage(gSelfDrag.SrcFilePath)
  145.         End If
  146.     Case ddTypeText
  147.         Call SaveDragText(gSelfDrag.SrcStr)
  148. End Select
  149. End Sub
  150. Private Sub SaveDragText(nTxt As String)
  151. On Error GoTo due
  152. 'Dim nfs As New nFileSysObj
  153. Dim tPath As String
  154. Dim tFN As Long
  155. Dim destF As String
  156. If nTxt = "" Then Exit Sub
  157. 'If Not nfs.nFolderExists(DragDropSaveTextFolder) Then
  158. If Not FileExist(DragDropSaveTextFolder, False) Then
  159.     Call BrowseForFolder(tPath, "请选择自动保存路径", gMainForm.hWnd)
  160. End If
  161. If tPath <> "" Then DragDropSaveTextFolder = tPath
  162. 'If nfs.nFolderExists(DragDropSaveTextFolder) Then
  163. If FileExist(DragDropSaveTextFolder, False) Then
  164.     destF = CreateTextName()
  165.     tFN = FreeFile
  166.     Open destF For Binary As tFN
  167.         Put tFN, , nTxt
  168.     Close tFN
  169. Else
  170.     MsgBox "选择的路径" & Chr(13) & DragDropSaveTextFolder & Chr(13) & _
  171.             "有问题,本次操作取消", vbOKOnly + vbInformation
  172. End If
  173. Exit Sub
  174. due:
  175.     MsgBox Err.Description, vbOKOnly
  176. End Sub
  177. '产生Text自动保存的文件名
  178. Private Function CreateTextName() As String
  179. Dim rtn As String
  180. Dim tFN$
  181. Dim i&
  182. If Right$(DragDropSaveTextFolder, 1) <> "" Then
  183.     DragDropSaveTextFolder = DragDropSaveTextFolder & ""
  184. End If
  185. tFN = Format(Date, "yyyymmdd") & "_" & Format(time, "hhmmss")
  186. rtn = DragDropSaveTextFolder & tFN & ".txt"
  187. If FileExist(rtn) Then
  188.     While FileExist(rtn)
  189.         i = i + 1
  190.         rtn = DragDropSaveTextFolder & tFN & "[" & Trim(Str(i)) & "]" & ".txt"
  191.     Wend
  192. End If
  193. CreateTextName = rtn
  194. End Function
  195. Private Sub SaveDragImage(nfile As String)
  196. 'Dim nfs As New nFileSysObj
  197. Dim tPath As String
  198. Dim tFN As String
  199. Dim ggPos As Integer
  200. Dim destF As String
  201. 'If Not nfs.nFolderExists(DragDropSaveImageFolder) Then
  202. If Not FileExist(DragDropSaveImageFolder, False) Then
  203.     Call BrowseForFolder(tPath, "请选择自动保存路径", gMainForm.hWnd)
  204. End If
  205. If tPath <> "" Then DragDropSaveImageFolder = tPath
  206. 'If nfs.nFolderExists(DragDropSaveImageFolder) Then
  207. If FileExist(DragDropSaveImageFolder, False) Then
  208.     'If nfs.nFileExists(nfile) Then
  209.     If FileExist(nfile) Then
  210.         ggPos = InStrRev(nfile, "")
  211.         tFN = Mid(nfile, ggPos + 1)
  212.         destF = DragDropSaveImageFolder & "" & tFN
  213.         'While nfs.nFileExists(destF)
  214.         While FileExist(destF)
  215.             tFN = "1_" & tFN
  216.             destF = DragDropSaveImageFolder & "" & tFN
  217.         Wend
  218.         Call FileCopy(nfile, destF)
  219.     Else
  220.         MsgBox "源文件" & Chr(13) & nfile & Chr(13) & _
  221.             "不存在,本次操作取消", vbOKOnly + vbInformation
  222.     End If
  223. Else
  224.     MsgBox "选择的路径" & Chr(13) & DragDropSaveImageFolder & Chr(13) & _
  225.             "有问题,本次操作取消", vbOKOnly + vbInformation
  226. End If
  227. End Sub
  228. '手动保存
  229. Private Sub SaveAs()
  230. Select Case DragType
  231.     Case ddTypeImage
  232.         If gSelfDrag.SrcFilePath <> "" Then
  233.             Call SaveAsDragImage(gSelfDrag.SrcFilePath)
  234.         End If
  235.     Case ddTypeText
  236.         Call SaveAsDragText(gSelfDrag.SrcStr)
  237. End Select
  238. End Sub
  239. Private Sub SaveAsDragImage(nPath As String)
  240. On Error GoTo due
  241. Dim tSave As OpenSaveDlg
  242. Dim tPos&, tFN$
  243. Set tSave = New OpenSaveDlg
  244. tPos = InStrRev(nPath, "")
  245. If tPos > 0 Then
  246.     tFN = Mid(nPath, tPos + 1)
  247. End If
  248. tSave.flags = OFN_OVERWRITEPROMPT
  249. tSave.FileName = tFN
  250. tSave.Filter = "所有文件(*.*)|*.*"
  251. If tSave.ShowSave(gMainForm.hWnd) Then
  252.     Call FileCopy(nPath, tSave.FileName)
  253. End If
  254. Exit Sub
  255. due:
  256.     MsgBox Err.Description, vbOKOnly
  257. End Sub
  258. Private Sub SaveAsDragText(nTxt As String)
  259. On Error GoTo due
  260. Dim tSave As OpenSaveDlg
  261. Dim tPos&, tFileName$
  262. Dim tFN&
  263. tPos = InStr(1, nTxt, vbNewLine)
  264. If tPos > 20 Or tPos < 1 Then tPos = 21
  265. tFileName = Left(nTxt, tPos - 1) & ".txt"
  266. FormatFileName tFileName
  267. Debug.Print "SaveAsDragText:"; tFileName
  268. Set tSave = New OpenSaveDlg
  269. tSave.flags = OFN_OVERWRITEPROMPT
  270. tSave.FileName = tFileName
  271. tSave.Filter = "所有文件(*.*)|*.*"
  272. If tSave.ShowSave(gMainForm.hWnd) Then
  273.     If FileExist(tSave.FileName) Then
  274.         Kill tSave.FileName
  275.     End If
  276.     
  277.     tFN = FreeFile
  278.     Open tSave.FileName For Binary As tFN
  279.         Put tFN, , nTxt
  280.     Close tFN
  281. End If
  282. Exit Sub
  283. due:
  284.     MsgBox Err.Description, vbOKOnly
  285. End Sub
  286. Private Sub FormatFileName(nFN$)
  287. nFN = Replace(nFN, "", " ")
  288. nFN = Replace(nFN, "/", " ")
  289. nFN = Replace(nFN, "?", " ")
  290. nFN = Replace(nFN, "*", " ")
  291. nFN = Replace(nFN, "|", " ")
  292. nFN = Replace(nFN, ":", " ")
  293. nFN = Replace(nFN, """", " ")
  294. nFN = Replace(nFN, "<", " ")
  295. nFN = Replace(nFN, ">", " ")
  296. End Sub
  297. Private Sub IniText()
  298. mItemText(0) = "(无)"
  299. mItemText(1) = "新窗口(激活)"
  300. mItemText(2) = "新窗口(后台)"
  301. mItemText(3) = "本页打开"
  302. mItemText(4) = "用IE打开"
  303. mItemText(5) = "保存(自动)"
  304. mItemText(6) = "保存"
  305. mItemText(7) = "编辑(文本)"
  306. mItemText(8) = "编辑(html)"
  307. mItemText(9) = "高亮"
  308. mItemText(10) = "搜索"
  309. mItemText(11) = "显示菜单"
  310. End Sub
  311. Public Property Get Tag() As String
  312. Tag = mTag
  313. End Property
  314. Public Property Let Tag(ByVal vNewValue As String)
  315. mTag = vNewValue
  316. End Property
  317. Public Function PopMenu(hwndParent As Long, Optional nFull As Boolean = True) As Long
  318. 'mPopMenu.Popup hwndParent
  319. Dim i&
  320. gDragDropMenu2.ClearItems
  321. For i = 1 To gSearchEgnCount
  322.     If gSearchEgn(i).Title = "-" Then
  323.         gDragDropMenu2.Add "", pmsSeparator
  324.     Else
  325.         gDragDropMenu2.Add gSearchEgn(i).Title, , 200 + i
  326.     End If
  327. Next i
  328. If gSearchEgnCount <= 0 Then
  329.     gDragDropMenu2.Add "(空)", pmsDisabled Or pmsString
  330. End If
  331. gDragDropMenu.UnCheckAll
  332. 'gDragDropMenu2.ClearItems
  333. 'For i = 1 To SearchurlCount
  334. '    gDragDropMenu2.Add searchUrl(i).Title, , 200 + i
  335. 'Next i
  336. 'If SearchurlCount <= 0 Then
  337. '    gDragDropMenu2.Add "(空)", pmsDisabled Or pmsString
  338. 'End If
  339. 'gDragDropMenu.UnCheckAll
  340. If nFull Then
  341.     If m_InsideIndex = SpIndex_ShowMenu Then
  342.         gDragDropMenu.CheckItem SpIndex_ShowMenu + 1, True, False
  343.     Else
  344.         gDragDropMenu.CheckItem m_InsideIndex, True, False
  345.         If m_InsideIndex = SpIndex_Replace Then
  346.             gDragDropMenu2.CheckRadioItem m_ReplaceItemIndex - 1, False
  347.         End If
  348.     End If
  349. End If
  350. Select Case DragType
  351.     Case ddTypeText
  352.         gDragDropMenu.EnableItem SpIndex_SaveAuto, True, False
  353.         gDragDropMenu.EnableItem SpIndex_Save, True, False
  354.         gDragDropMenu.EnableItem SpIndex_HightLight, True, False
  355.         gDragDropMenu.EnableItem SpIndex_Replace, True, False
  356.     Case ddTypeLink
  357.         gDragDropMenu.EnableItem SpIndex_SaveAuto, False, False
  358.         gDragDropMenu.EnableItem SpIndex_Save, False, False
  359.         gDragDropMenu.EnableItem SpIndex_HightLight, False, False
  360.         gDragDropMenu.EnableItem SpIndex_Replace, False, False
  361.     Case ddTypeImage
  362.         gDragDropMenu.EnableItem SpIndex_SaveAuto, True, False
  363.         gDragDropMenu.EnableItem SpIndex_Save, True, False
  364.         gDragDropMenu.EnableItem SpIndex_HightLight, False, False
  365.         gDragDropMenu.EnableItem SpIndex_Replace, False, False
  366. End Select
  367. gDragDropMenu.EnableItem 0, nFull, False
  368. gDragDropMenu.EnableItem SpIndex_ShowMenu + 1, nFull, False
  369. PopMenu = gDragDropMenu.Popup2(hwndParent)
  370. End Function
  371. Public Sub PopMenuInSetup(hwndParent As Long)
  372. Dim tId&
  373. tId = PopMenu(hwndParent)
  374. If tId >= 100 And tId < 200 Then
  375.     m_InsideIndex = tId - 100
  376. ElseIf tId >= 200 And tId < 300 Then
  377.     m_InsideIndex = SpIndex_Replace
  378.     m_ReplaceItemIndex = tId - 200
  379. ElseIf tId = 300 Then
  380.     m_InsideIndex = SpIndex_ShowMenu
  381. End If
  382. End Sub
  383. Private Sub PopMenuInWeb()
  384. Dim tId&
  385. tId = PopMenu(gMainForm.hWnd, False)
  386. If tId >= 100 And tId < 200 Then
  387.     Call Execute2(tId - 100)
  388. ElseIf tId >= 200 And tId < 300 Then
  389.     Call ReplaceAddress(tId - 200, gSelfDrag.SrcStr)
  390. End If
  391. End Sub
  392. '替换地址栏,转换为预设的地址(自动完成地址,例如搜索,域名)
  393. Private Sub ReplaceAddress(nIndex&, SrcStr$)
  394. Dim tUrl$
  395. If nIndex > 0 And nIndex <= gSearchEgnCount Then
  396.     tUrl = Replace$(gSearchEgn(nIndex).Url, SearchUrlKeywordFlag, SrcStr)
  397.     gMainForm.NewWebbrowser tUrl
  398. End If
  399. 'Dim tUrl$
  400. 'If nIndex > 0 And nIndex <= SearchurlCount Then
  401. '    tUrl = Replace$(searchUrl(nIndex).Url, SearchUrlKeywordFlag, SrcStr)
  402. '    gMainForm.NewWebbrowser tUrl
  403. 'End If
  404. End Sub
  405. Public Property Get ReplaceItemIndex() As Long
  406. ReplaceItemIndex = m_ReplaceItemIndex
  407. End Property
  408. Public Property Let ReplaceItemIndex(ByVal vNewValue As Long)
  409. 'If vNewValue > 0 And vNewValue <= SearchurlCount Then
  410. If vNewValue > 0 And vNewValue <= gSearchEgnCount Then
  411.     m_ReplaceItemIndex = vNewValue
  412. Else
  413.     m_InsideIndex = 0
  414. End If
  415. End Property