我想做一个从资源管理器拖放一个文件可以自动播放的媒体播放器。希望把文件拖动到窗体的任何一个地方都可以正确OLE进来。那位有更好的办

bgxy 2002-08-30 12:13:21
不可能把窗体所有的控件都OLEDropMode都设定为1 Manual。
我的思路的是,在窗体中放一个特殊的,可透明的控件(比如Label),没有文件在播放时,此控件的大小同窗体一样,显示在最上层
With labForOLE
.BackStyle=0 '透明
.Visible = True
.ZOrder
.Move 0, 0, Me.Width, Me.Height
End With

在这个控件实现OLE拖放
Private Sub labForOLE_OLEDragDrop _
(Data As DataObject, _
Effect As Long, _
Button As Integer, _
Shift As Integer, _
X As Single, Y As Single)
'核实这是正确的媒体文件之后,播放
Call CheckAndPlay(Data.Files(1))
End Sub

播放之后,
With labForOLE
.Visible = false
End With

可是Label控件即使放在最前面,也不能挡住其他控件,OLE拖放只在没有其他控件的地方有效。
那位有更好的办法?
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
野马 2002-12-02
  • 打赏
  • 举报
回复
我来晚了,问题已解决了,比我的方法好多了

我有个问题不能解决,
当鼠标拖动网页上的URL到窗体上时也能接受地址,不过当拖动的是本地文件时就分不清本地文件路径和网络URL,而报错
unrknight 2002-12-02
  • 打赏
  • 举报
回复
补充:
Public Sub DropFiles(ByVal hDrop&)
Dim sFileName$, nCharsCopied&
sFileName = String$(MAX_PATH, vbNullChar)
nCharsCopied = DragQueryFile(hDrop, 0&, sFileName, MAX_PATH)
DragFinish hDrop
If nCharsCopied Then
sFileName = Left$(sFileName, InStr(sFileName, vbNullChar) - 1)
If IsSwf(ByVal sFileName) Then List1.AddItem sFileName
End If
End Sub
unrknight 2002-12-02
  • 打赏
  • 举报
回复
Option Explicit
'在一个模块中
Public Const MAX_PATH As Long = 260&
Public Const WM_DROPFILES As Long = &H233&
Public procOld As Long
Public Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, _
ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
Public Declare Sub DragAcceptFiles Lib "shell32.dll" (ByVal hWnd&, ByVal fAccept&)
Public Declare Function DragQueryFile& Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop&, ByVal iFile&, _
ByVal lpszFile$, ByVal cch&)
Public Declare Sub DragFinish Lib "shell32.dll" (ByVal hDrop&)

Public Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case iMsg
Case WM_DROPFILES
FrmMain.DropFiles wParam
WindowProc = False
Exit Function
End Select
WindowProc = CallWindowProc(procOld, hWnd, iMsg, wParam, lParam)
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
private form_onload()
DragAcceptFiles Me.hWnd, True
procOld = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WindowProc)
end sub

'''''''''''''''''''''''''''''''''''''''

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, procOld
End
End Sub
但是程序好像无法正常退出,怎么办啊
bgxy 2002-09-06
  • 打赏
  • 举报
回复
To fq1():答应再给你的50分,再等一等好吗?有两位给了我新的思路

to myhfit():
Picutre可以透明吗?我设定为Picutre1.FillStyle = vbFSTransparent,可是并没有透明,挡在下面的控件还是看不到

To pgfan(波罗的海):
可以讲的具体一些吗?有例程吗?
pgfan 2002-09-05
  • 打赏
  • 举报
回复
用 API :DragAcceptFiles 什么的。
myhfit 2002-09-05
  • 打赏
  • 举报
回复
放一个透明的Picutre1在最上,接受Ole在Picture1中的MouseDown中判断鼠标的位置,再转发给其他控件。
fq1 2002-09-05
  • 打赏
  • 举报
回复
呵呵,报道!

同样谢谢你,我其实也没怎么帮上忙:)
bgxy 2002-09-02
  • 打赏
  • 举报
回复
我正是想用程序播放媒体文件!把整个From都占满了,不能用Form_KeyDown,而且这个控件也没有KeyDown事件。
请高手帮忙!

1,066

社区成员

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

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