http://OpenPlayer.51.net那些介绍你先看看吧,如果要,你找我,我发给你。
[email protected]那里现在不能下载。OpenPlayer有全部的源代码。其它的我已经没有更新了。也不提供源代码。
记得80分给我哦。
记得留下Email.

解决方案 »

  1.   


     iamfish(呆鱼) :也给我一份吧。
      

  2.   

    www.dapha.net已经提供下载。省得让iamfish(呆鱼)一份一份的发。分加给iamfish(呆鱼).
    直接访问地址http://dapha.net/vb/list.asp?id=1721
    请选择下载地址二的连接
      

  3.   

    已经有人问过这个问题了 ,不过是在Delphi 版块里,如果看得懂Delphi 的话,不妨看看:
    http://www.csdn.net/Expert/TopicView1.asp?id=629583
      

  4.   

    Delphi 是没有问题的,用过两年,现在不喜欢它了,现在就喜欢VC和VB,还有IntDev
      

  5.   


    [email protected]顺便问一下,如何在右键单击FIASH控件时,弹出自定义的菜单?!~~
      

  6.   

    搞笑,呵 呵 呵 !
        最简单的办法就是给我来封信,写明来意,大名和您的地址,我收到您的信,就会给您寄来我手工修改了的swflash.ocx,不会弹出菜单那种哦。[email protected]
      

  7.   

    to adv_21(口袋金):
         我以前写过一个屏蔽 Flash 控件菜单的程序,这是下载地址http://go2.163.com/188888/soft/DisableRButton.zip
      

  8.   

    把flash放在picturebox里面,把picturebox.eanbled=false就可以了
      

  9.   

    还是用HOOK吧,能学到点东东嘛
      

  10.   

    VB可以产生四角形以外其他形状的 Form 吗?这个问题,您一定无法想像有多容易,您可以产生任何形状的 Form,但必须借助 CreateEllipticRgn 及 SetWindowRgn 二个 API ,例如:Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPrivate Sub Form_Load()
    Dim lReturn As Long
    Me.Show
    lReturn = SetWindowRgn(hWnd, CreateEllipticRgn(10, 10, 340, 150), True)
    End Sub执行结果图片CreateEllipticRgn 之四个参数说明如下:
    X1:椭圆中心点之X轴位置,但以 Form 的实№边界为限。
    Y1:椭圆中心点之Y轴位置,但以 Form 的实№边界为限。
    X2:椭圆长边的长度
    Y2:椭圆短边的长度的
      

  11.   

    如何产生渐层的 Form 背景?在 Form_Load 中加入以下程序码Sub Form_Load()
    Form1.AutoRedraw = True
    '使 Form 物件的自动重绘有效
    Form1.DrawStyle = 6
    '直线的样式为内实线 (6-vbInsideSolid)
    Form1.DrawMode = 13
    'copy Pen-由 ForeColor 属性指定的颜色。(13-vbCopyPen)
    Form1.DrawWidth = 2
    '输出的线宽为 2 像素 (Pixel)'为绘图或列印建立一自订的座标比例尺
    '图形像素为显示器或印表机解析度的最小单位
    Form1.ScaleMode = 3
    '设定物件座标的量测单位为像素 (3-VbPixels)
    Form1.ScaleHeight = (256 * 2)
    '设定垂直量测单位值为 512
    For i = 0 To 255
    Form1.Line (0, Y)-(Form1.Width, Y + 2), RGB(0, 0, i), BF
    Y = Y + 2
    Next i
    'RGB(red, green, blue)
    'B : 使一方块用一指定方块对角的座标画出
    'F : 指定此方块系以用来画方块的色彩来加以填满 (有B才可用F)
    End Sub
      

  12.   

    如何制作透明的表单 (Form)?请在声明区中放入以下声明Const GWL_EXSTYLE = (-20)
    Const WS_EX_TRANSPARENT = &H20&
    Const SWP_FRAMECHANGED = &H20
    Const SWP_NOMOVE = &H2
    Const SWP_NOSIZE = &H1
    Const SWP_SHOWME = SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE
    Const HWND_NOTOPMOST = -2Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long在 Form_Load 使用的范例如下:Private Sub Form_Load()
    SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT
    SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_SHOWME
    Me.Refresh
    End Sub
      

  13.   

    如何取消 TextBox 鼠标右键的 PopupMenu 功能自从 Microsoft Windows 进入 Windows95 之后,有一个很方便的功能,很多软件都有提供,就是鼠标右键的 PopupMenu 功能,它确实很方便,但是有时却是梦魇,那就是您不需要它的时候,它还是会自动出现!本例中的 TextBox 就是明显的例子。但是这个梦魇从 VB5.0 以后就可以解决了,因为 VB5.0 提供了 AdressOf 这个运算子,可以做回呼(callback)处理!请将以下的程序码放在 .bas 模组中,呼叫 Hook 这个 Sub 并传入 TextBox 的 hWnd 当作参数,但是切记您在 Unload Form 之前一定要呼叫 UnHook 这个 Sub,否则会产生一个 General Protection Fault!Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongDeclare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const GWL_WNDPROC = -4
    Public Const WM_RBUTTONUP = &H205
    Public lpPrevWndProc As Long
    Private lngHWnd As LongPublic Sub Hook(hWnd As Long)
    lngHWnd = hWnd
    lpPrevWndProc = SetWindowLong(lngHWnd, GWL_WNDPROC, AddressOf WindowProc)
    End SubPublic Sub UnHook()
    Dim lngReturnValue As Long
    lngReturnValue = SetWindowLong(lngHWnd, GWL_WNDPROC, lpPrevWndProc)
    End SubFunction WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uMsg
    Case WM_RBUTTONUP
    'Do nothing
    'Or popup you own menuCase Else
    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
    End Select
    End Function在 Form_Load 事件中加入以下程序码:Call Hook(Text1.hWnd)在 Form_Unload 中加入以下程序码:Call UnHook
      

  14.   

    功能强大的SendMessage函数 Windows API(应用程序接口)是Windows系列软件为程序开发人员提供的火力强大的“武器库”,在这个武器库中,有很多极具威力的武器,SendMessage就是其中之一,它的功能非常丰富,灵活使用这个函数,会给编程工作带来很多便利。本文以Visual Basic为例,结合几个具体的例子介绍该函数的功能。
    一、SendMeaasge函数简介
       顾名思义,SendMessage函数的功能是“发送消息”,即将一条消息发送到指定对象(操作系统、窗口或控件等)上,以产生特定的动作(如滚屏、修改对象外观等)。
    SendMessage函数在VB中的函数说明如下:
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (Byval hwnd As Long, Byval wMsg As Long,Byval wParam As Long,lParam As Any) As Long
    其中四个自变量的含义和说明如下:
    hWnd:对象的句柄。希望将消息传送给哪个对象,就把该对象的句柄作为实参传送,在VB中可以简单地用“对象.hWnd”获得某个对象的句柄,如Text1.hWnd和Form1.hWnd分别可以得到Text1和Form1的句柄。
    wMsg:被发送的消息。根据具体需求和不同的对象,将不同的消息作为实参传送,以产生预期的动作。
    wParam、lParam:附加的消息信息。这两个是可选的参数,用来提供关于wMsg消息更多的信息,不同的wMsg可能使用这两个参数中的0、1或2个,如果不需要哪个附加参数,则将实参赋为NULL(在VB中赋为0)。
    在简单了解了SendMessage函数的格式和功能后,让我们以几个例子来看看它的威力。
    二、SendMessage函数使用实例
    例1  多行TextBox中的快速处理功能在处理多行TextBox时我们经常会碰到以下几种情况:
       希望了解多行TextBox中目前共有多少行文字。
       想快速返回第N行的文字。
       对于上面的情况,如果用VB自身的语句或函数来实现的话,要写不短的代码,而且由于要采用顺序查找的办法来完成,因此代码的执行效率也很低。如果使用SendMessage函数则可以大大减少代码量,并大幅度的提高执行效率。
       用SendMessage函数完成上面两个任务的方法非常简单,每个任务只需简单地发送一条消息给多行TextBox即可,两个消息分别为:EM_GETLINECOUNT、EM_GETLINE,其它参数和返回值见附表。
       下面用一个简单的实例演示这两个功能:
    新建工程,在Form1上添加三个TextBox(名称分别为Text1、txtLineCount、TxtString,将Text1的Multi
    Line属性置为True)、三个标签和一个命令按钮。为工程添加一个模块Moudle1,在其中写如下声明(其中
    SendMessage函数的声明可以从VB的“API浏览器”中复制): 
    消息常量名        消息值     wParam      lParam          返回值 
    EM_GETLINECOUNT    &HBA      未用        未用            行数 
    EM_GETLINE         &HC4      要找的行号  存结果的字节串  结果字节串的字节数 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long,lParam As Any) As Long
    Public Const EM_GETLINECOUNT=&HBA
    Public Const EM_GETLINE=&HC4
    在Form1的代码模块中写如下代码:
        Private Sub Command1_Click()
        Dim str(256) As Byte
        str(1)=1 '最大允许存放256个字符
        '获取总行数,结果显示在文本框txtLineCount中
        txtlineCount=SendMessage(Text1.hwnd,EM_GETLINECOUNT,0,0)
        '获取第3行的数据放在str中,转换为字符串后显示在文本框txtString中
        SendMessage Text1.hwnd,EM_GETLINE,2,str(0)
        txtString= StrConv(str,vbUnicode)
    End Sub
       之后,按F5运行程序,在多行文本框中随便键入几行文字,然后按下[确定]按钮,出现如图画面,说明程序正确统计出了总行数和第3行的文字。
    两点补充说明:在调用SendMessage获取第N行字符串时,lParam需要说明为字节数组,在调用完成后,再将字节数组转换为字符串;另外,调用前必须在lParam的前两个字节指明允许存放的最大长度,其中第一个字节为低位,第二个字节为高位,本例将高位(即str(1))置1.说明最大允许存放256个字符。
    例2  程序控制拉下或收起组合框的下拉列来
       一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。
       在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),lParam无用(设为0)。
       为说明具体的使用方法,下面提供简单的程序片段。首先在代码模块中做如下声明:
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
    Const CB_SHOWDROPDOWN=&H14F
       当程序中某处需要拉下组合框Combol的列表时,写如下调用语句:
    SendMessage Combol.hwnd,CB_SHOWDROPDOWN,True,0
       当需要收起组合框Combol的列表时,写如下语句:
    SendMessage Combol.hwnd,CB_SHOWDROPDOWNN,False,0
    例3  在列表框中查找匹配的项目
       在Win95风格的帮助系统中一般都有一个“索引”页,索引页含有一个文本框和一个列表框,当用户在文本框中输入文字时,下拉列表会动态地显示与文本框中文字最匹配的项目,为用户提供了最大的方便。这种效果在应用程序的帮助系统中很容易实现(只要按照Win95帮助系统的正常制作过程制作就可以实现),如果想在应用程序的其它地方实现这种特性就需费一番心思了。
       而使用SendMessage函数实现上述特性则非常简单,甚至只需一条语句就足够了,那就是在文本框的Change事件中给列表框发一条LB_FINDSTRING(&H18F)消息,该消息告诉列表框在列表中查找匹配的项目。
       在发LB_FINDSTRING消息时,wParam参数代表从列表框的哪一个项目后面开始查找,一般情况下该参数可定为-1,表示从List1(0)即第一项开始向后循环查找,lParam则传进欲搜索的字符串(必须采用值传递)。
       具体的代码和运行画面与后面的例4合并在一起演示。
    例4  为ListBox添加水平滚动条
       在VB中,列表框控件仅提供垂直滚动条,没有设置水平滚动条的能力,当某些项目的文本宽度较长时,超出列表框宽度部分的文本就无法显示出来,因此,很有必要为ListBox添加一个水平滚动条来方便操作。
       为添加水平滚动条,只需发一条LB_SETHORIZONTALEXTENT(&H194)消息给列表框即可。发送消息时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度,也可随便给一个大于最大文本宽度的数字,如本例的250),lParam无用。下面是例3和例4合并在一起的代码和运行画面
    Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
    Public Const LB_FINDSTRING=&H18F
    Public Const LB_SETHORIZONTALEXTENT=&H194
    Private Sub Form_Load()
    List1.AddItem "软件"
    List1.AddItem "电脑游戏"
    List1.AddItem "电视机"
    List1.AddItem "电视台"
    List1.AddItem "电脑"
    List1.AddItem "电脑游戏软件"
    '下一句为列表框添加水平滚动条
    SendMessage List1.hwnd,LB_SETHORIZONTALEXTENT,250,0
    End Sub
    Private Sub Text1_Change()
    '注意!当lParam传入的是字符串时,必须用ByVal传递
    List1.ListIndex = SendMessage(List1.hwnd,LB_FINDSTRING,-1,ByVal Text1.Text)
    End Sub
    通过上面几个例子,想必您已经对SendMessage函数的强大功能有了初步的了解。事实上利用该函数我们还可以完成更多更好的任务,如控制文本框的自动滚屏、实现文字编辑过程中的Undo功能、操纵应用程序的窗体控制菜单等等,感兴趣的读者请参阅有关Windows API的资料。
    本文程序均用Visual Basic 5.0企业版编写,在Pwin95环境下运行正常。
     
      

  15.   

    用SendMessage函数实现VB程序的查询功能在API文本浏览器里,当我们在搜索栏输入任意字母,“可用项”里以该字母开头的项目以高亮显示以引起我们注意该项是不是我们所需的。象这样的功能一切提供搜索选项的程序都应该具备。以下例子采用SendMessage函数实现这一技术。
    请给标准工程添加ListBox和TextBox控件各一个,其各项属性均取默认值,然后将下列代码拷贝到你的工程:Option Explicit'申明API函数
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As LongConst LB_FINDSTRING = &H18F '常数Private Sub Form_Load()'给列表框添加26个字母(大写)
    Dim i As Integer
    For i = Asc("A") To Asc("Z")
    List1.AddItem Chr$(i)
    Next
    Text1 = "" '令文本框为空End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)Text1 = "" '按下任意键则令原内容消失
    Text1.SelLength = 1 '限制长度
    Text1.SelText = Chr(KeyAscii) '显示键盘符号
    KeyAscii = 0 '禁止响铃
    'ListBox中的项目文本若与文本框的一致则选中(高亮)
    List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text)) End Sub以上程序适用于单项目为多个字母的查询,但必须注意,在TextBox的KeyPress事件中要作相应的改动。 
      

  16.   

    SendMessage函数巧应用 在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉,典型的应用就是Windows资源管理器中的目录列表。在VB中,树型列表控件包含在Microsoft Windows Common Control 6.0(也可能是5.0,视你的VB或者系统版本而定)中。在Windows API中,有一系列的以TVM_ 开头的消息值,这些消息就是扩展树型列表控件所特定的消息值,下面向大家介绍其中的一些应用。
    1、设置树型列表控件的背景颜色
    首先做如下的定义:
    Private Declare Function SendMessage Lib "user32" Alias "Send MessageA" (ByVal hwnd As Long,ByVal wMsg As Long, ByVal wParam As Long,ByVal lParam As Long) As Long
    Const TV-FIRST = &H1100
    Const TVM-SETBKCOLOR = TV_FIRST + 29
    然后再作如下调用:
    Call SendMessage(TreeView1.hwnd, TVM-SETBKCOLOR, 0, RGB(255, 0, 0))
    上面的SendMessage调用将TreeView1的背景颜色设置为红色。
    大家可能注意到了。在上面的Sendmessage函数定义中,我们将lParam定义为 ByVal lParam As Long,而不是象前面的那些范例那样定义为Any或者String类型,关于这个问题,我会在最后的一章中做介绍。
    2、设置树型列表控件标题行高度
    利用TVM_SETITEMHEIGHT消息可以设定控件的标题行的高度,该消息的定义及调用方法如下:
    定义:
    Const TV_FIRST = &H1100
    Const TVM-SETITEMHEIGHT = TV_FIRST + 27
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
    调用:
    CallSendMessage(TreeView1.hwnd, TVM-SETITEMHEIGHT, 60, 0)
    上面的代码将TreeView1的标题行高度设置到60像素高
    3、为树型列表控件中不同的标题行设置不同的提示
    在第一期的ListBox控件介绍中,我向大家介绍了如何为列表中的每一个标题行设置不同的提示(ToolTips),在这里为要向大家介绍如何为树型列表控件中的每一个标题设置不同的提示。
    同ListBox控件不通,树型列表控件中并没有根据光标位置获得标题行索引的消息,我们需要另外想办法。在TVM类消息中有一个TVM_HITTEST消息,发送该消息可以检测控件表面上的某一点,如果该点位于一个标题上,则返回该标题的句柄。而利用TVM_GETITEM消息,则可以根据标题句柄返回该标题行的文本。所以结合利用这两个消息可以获取光标所在标题行的标题文本。具体的范例代码如下:
    Option Explicit Private Type TPoint
    x As Long
    y As Long
    End Type
    Private Type TVHITTESTINFO
    pt As TPoint
    flags As Long
    hItem As Long
    End Type
    Private Type TVITEM
    mask As Long
    HTreeItem As Long
    state As Long
    stateMask As Long
    pszText As Long
    cchTextMax As Long
    iImage As Long
    iSelectedImage As Long
    cChildren As Long
    lParam As Long
    End Type
    Const TV-FIRST = &H1100
    Const TVM_HITTEST = TV-FIRST + 17
    Const TVM_GETITEM = TV-FIRST + 12
    Const TVHT-ONITEMLABEL = &H4
    Const TVIF-TEXT = &H1
    Const GMEM-FIXED = &H0
    Private Declare Function Send MessageRef Lib"user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As String,ByVal Source As Long,ByVal Length As Long)
    Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
    Dim hItemPrv As Long
    Private Sub Form_Load()
    Dim ndX As Node
    `加入若干Item
    Set ndX = TreeView1.Nodes.Add(, , "R", "Root")
    Set ndX = TreeView1.Nodes.Add("R", tvwChild, "Key1", "Node1")
    Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey1", "SubNode1")
    Set ndX = TreeView1.Nodes.Add("SubKey1", tvwChild, "SubKeys1", "SubNode1")
    Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey2", "SubNode2")
    Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey3", "SubNode3")
    Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey4", "SubNode4")
    End Sub
    Private Sub TreeView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) 
    Dim ptA As TPoint
    Dim tf As TVHITTESTINFO
    Dim tv As TVITEM
    Dim hStr As Long
    Dim hItem As Long
    Dim astr As String * 1024
    Dim bstr
    On Error GoTo errLab
    `获得当前光标所在的位置坐标
    ptA.x = Int(x / Screen.TwipsPerPixelX)
    ptA.y = Int(y / Screen.TwipsPerPixelY)
    tf.pt = ptA
    tf.flags = TVHT_ONITEMLABEL
    `获得光标所在的Item的句柄
    hItem = SendMessageRef(TreeView1.hwnd, TVM_HITTEST, 0, tf)
    `如果未获得句柄或者同上一次是同一个Item的句柄则退出
    If ((hItem <= 0) Or (hItem = hItemPrv)) Then Exit Sub
    hItemPrv = hItem
    `分配一定的内存空间用以存储Item的标题
    hStr = GlobalAlloc(GMEM-FIXED, 1024)
    If hStr > 0 Then
    tv.mask = TVIF_TEXT 
    `获取标题文本
    tv.HTreeItem = hItem
    `Item句柄
    tv.pszText = hStr
    tv.cchTextMax = 1023
    `发送TVM_GETITEM获得标题文本
    CallSendMessageRef(TreeView1.hwnd, TVM-GETITEM, 0, tv)
    `将标题文本拷贝到字符串astr中
    CopyMemory astr, hStr, 1024
    bstr = Left$(astr, (InStr(astr, Chr(0)) - 1))
    TreeView1.ToolTipText = bstr
    `释放分配的内存空间
    GlobalFree hStr
    End If
    Exit Sub
    errLab:
    Resume Next
    End Sub
    运行上面的程序,当光标在TreeView1上面移动时,TreeView1的ToolTips就会根据光标所在的不同标题行而变动。
    以上程序在Win98、Win2000,VB6下运行通过