Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> OA  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702393
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

新手来看:word 如何清除剪贴板

作者:未详  摘自:未详  :cg1  更新日期:2003-8-17  浏览人次:

 

VB6 中
clipboard.clear


'请先引用Microsoft Forms2.0 Object Library
Dim objData As New DataObject
objData.SetText "要传送到剪贴板的值"
objData.PutInClipboard
 

如果引用项里找不到Microsoft Forms2.0 Object Library
请进入代码窗口,依次单击"工具"--"引用"--"浏览"
在系统的system32目录里找到FM20.DLL,确定后就可以在引用窗口看到Microsoft Forms2.0 Object Library了.

DataObject 和“剪贴板”的区别
        

DataObject 和“剪贴板”都提供了将数据从一处移到另一处的方法。作为应用程序开发人员,无论是使用 DataObject 还是使用“剪贴板”,都要记住下列几项要点: 

只要各项数据具有不同的数据格式,DataObject 和“剪贴板”就都可以同时保存多项数据。但是如果已经有数据使用了要保存数据的格式,则保存这个新数据,并丢弃原来的数据。


“剪贴板”支持图片格式和文本格式。而 DataObject 目前只支持文本格式。


只有应用程序运行时,DataObject 才存在;而“剪贴板”则是始终运行的(与正在运行的操作系统同时存在)。这意味着,将数据放到“剪贴板”后,如果关闭了应用程序,“剪贴板”上的数据不会丢失。DataObject 则没有这个功能。如果关闭应用程序,该应用程序放置在 DataObject 上的数据就会丢失。


DataObject 是一个标准的 OLE 对象,而“剪贴板”不是。这意味着,“剪贴板”支持标准的移动操作(复制、剪切和粘贴),但不支持拖放操作。如果需要应用程序支持拖放操作,就必须使用 DataObject。 
提示   当用 SetText 方法将数据移动到“剪贴板”或 DataObject 时,可定义自己的数据格式名称。这样便于区分是应用程序移动的文本还是用户移动的文本。



'通过VB编程来拷贝或移动文件的原理可能大家都十分清楚,可以利用Windows APISHFileOperation来进行操作,也可以利用VB内置的函数来操作。但是利用这些方法编写的程序只能在程序内部执行文件的操作。这里我要向大家介绍如何通过VB编程将程序中的文件操作同Windows的资源管理器中的拷贝、剪切操作连接起来。
'在Windows的资源管理器中,选中一个或多个文件,在文件上单击鼠标右键,在弹出菜单中选复制。再切换到另外的目录,单击鼠标右键,点粘贴。就这样执行了一次文件的拷贝操作,那么Windows在拷贝过程中执行了什么操作,是否将整个文件拷贝到剪贴板上了呢?当然没有。实际上,Windows只是将一个文件结构拷贝到了剪贴版,这个结构如下:
'tDropFile+文件1文件名+vbNullChar+文件2文件名+vbNullChar……+文件N文件名+vbNullChar,其中tDropFile是一个DROPFILES结构,这个结构在Windows API中有定义。在粘贴文件时,利用API函数 DragQueryFile 就可以获得拷贝到剪贴板的文件全路径名,然后就可以根据获得的文件名执行文件拷贝函数,实现对文件的粘贴操作。
'下面通过具体的程序来介绍:
'1、在工程文件中加入一个Module,然后在Module中加入如下代码:
Option Explicit
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias _
                                         "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
'剪贴板处理函数
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd _
                                                     As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat _
                                                        As Long, ByVal hMem As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat _
                                                        As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
                                                    (ByVal wFormat As Long) As Long
Private Declare Function DragQueryFile Lib "shell32.dll" Alias _
                                       "DragQueryFileA" (ByVal hDrop As Long, ByVal UINT As Long, _
                                                         ByVal lpStr As String, ByVal ch As Long) As Long
Private Declare Function DragQueryPoint Lib "shell32.dll" (ByVal _
                                                           hDrop As Long, lpPoint As POINTAPI) 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
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As _
                                                    Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As _
                                                      Long) As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" _
                            (Destination As Any, Source As Any, ByVal Length As Long)
'剪贴板数据格式定义
Private Const CF_TEXT = 1
Private Const CF_BITMAP = 2
Private Const CF_METAFILEPICT = 3
Private Const CF_SYLK = 4
Private Const CF_DIF = 5
Private Const CF_TIFF = 6
Private Const CF_OEMTEXT = 7
Private Const CF_DIB = 8
Private Const CF_PALETTE = 9
Private Const CF_PENDATA = 10
Private Const CF_RIFF = 11
Private Const CF_WAVE = 12
Private Const CF_UNICODETEXT = 13
Private Const CF_ENHMETAFILE = 14
Private Const CF_HDROP = 15
Private Const CF_LOCALE = 16
Private Const CF_MAX = 17
' 内存操作定义
Private Const GMEM_FIXED = &H0
Private Const GMEM_MOVEABLE = &H2
Private Const GMEM_NOCOMPACT = &H10
Private Const GMEM_NODISCARD = &H20
Private Const GMEM_ZEROINIT = &H40
Private Const GMEM_MODIFY = &H80
Private Const GMEM_DISCARDABLE = &H100
Private Const GMEM_NOT_BANKED = &H1000
Private Const GMEM_SHARE = &H2000
Private Const GMEM_DDESHARE = &H2000
Private Const GMEM_NOTIFY = &H4000
Private Const GMEM_LOWER = GMEM_NOT_BANKED
Private Const GMEM_VALID_FLAGS = &H7F72
Private Const GMEM_INVALID_HANDLE = &H8000
Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
Private Const FO_COPY = &H2
Private Type DROPFILES
    pFiles As Long
    pt As POINTAPI
    fNC As Long
    fWide As Long
End Type
Public Function clipCopyFiles(Files() As String) As Boolean
    Dim data As String
    Dim df As DROPFILES
    Dim hGlobal As Long
    Dim lpGlobal As Long
    Dim i As Long
    '清除剪贴板中现存的数据
    If OpenClipboard(0&) Then
        Call EmptyClipboard
        For i = LBound(Files) To UBound(Files)
            data = data & Files(i) & vbNullChar
        Next i
        data = data & vbNullChar
        '为剪贴板拷贝操作分配相应大小的内存
        hGlobal = GlobalAlloc(GHND, Len(df) + Len(data))
        If hGlobal Then
            lpGlobal = GlobalLock(hGlobal)
            df.pFiles = Len(df)
            '将DropFiles结构拷贝到内存中
            Call CopyMem(ByVal lpGlobal, df, Len(df))
            '将文件全路径名拷贝到分配的内存中。
            Call CopyMem(ByVal (lpGlobal + Len(df)), ByVal data, _
                         Len(data))
            Call GlobalUnlock(hGlobal)
            '将数据拷贝到剪贴板上
            If SetClipboardData(CF_HDROP, hGlobal) Then
                clipCopyFiles = True
            End If
        End If
        Call CloseClipboard
    End If
End Function
Public Function clipPasteFiles(Files() As String) As Long
    Dim hDrop As Long
    Dim nFiles As Long
    Dim i As Long
    Dim desc As String
    Dim filename As String
    Dim pt As POINTAPI
    Dim tfStr As SHFILEOPSTRUCT
    Const MAX_PATH As Long = 260
    '确定剪贴板的数据格式是文件,并打开剪贴板
    If IsClipboardFormatAvailable(CF_HDROP) Then
        If OpenClipboard(0&) Then
            hDrop = GetClipboardData(CF_HDROP)
            '获得文件数
            nFiles = DragQueryFile(hDrop, -1&, "", 0)
            ReDim Files(0 To nFiles - 1) As String
            filename = Space(MAX_PATH)
            '确定执行的操作类型为拷贝操作
            tfStr.wFunc = FO_COPY
            '目的路径设置为File1指定的路径
            tfStr.pTo = Form1.File1.Path
            For i = 0 To nFiles - 1
                '根据获取的每一个文件执行文件拷贝操作
                Call DragQueryFile(hDrop, i, filename, Len(filename))
                Files(i) = TrimNull(filename)
                tfStr.pFrom = Files(i)
                SHFileOperation tfStr
            Next i
            Form1.File1.Refresh
            Form1.Dir1.Refresh
            Call CloseClipboard
        End If
        clipPasteFiles = nFiles
    End If
End Function
Private Function TrimNull(ByVal StrIn As String) As String
    Dim nul As Long
    nul = InStr(StrIn, vbNullChar)
    Select Case nul
    Case Is > 1
        TrimNull = Left(StrIn, nul - 1)
    Case 1
        TrimNull = ""
    Case 0
        TrimNull = Trim(StrIn)
    End Select
End Function
'2、在Form1中加入一个FileListBox,Name属性设置为File1。加入一个DirListBox,Name属性设置为Dir1,在Dir1的Change事件中加入如下代码:
Private Sub Dir1_Change()
    File1.Path = Dir1.Path
End Sub
'加入一个DriveListBox,Name属性设置为Drive1,在Drive1的Change事件中加入如下代码:
Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub
'加入一个CommandButton,Name属性设置为cmdCopy,在cmdCopy的Click事件中加入如下代码:
Private Sub cmdCopy_Click()
    Dim Files() As String
    Dim Path As String
    Dim i As Long, n As Long
    Path = Dir1.Path
    If Right(Path, 1) <> "\" Then
        Path = Path & "\"
    End If
    '根据在List1上的选择建立拷贝文件的列表
    With File1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then
                ReDim Preserve Files(0 To n) As String
                Files(n) = Path & .List(i)
                n = n + 1
            End If
        Next i
    End With
    '拷贝文件到Clipboard
    If clipCopyFiles(Files) Then
        MsgBox "拷贝文件成功.", , "Success"
    Else
        MsgBox "无法拷贝文件……", , "Failure"
    End If
End Sub
'加入一个CommandButton,Name属性设置为cmdPaste,在cmdPaste的Click事件中加入如下代码:
Private Sub cmdPaste_Click()
    Dim Files() As String
    Dim nRet As Long
    Dim i As Long
    Dim msg As String
    nRet = clipPasteFiles(Files)
    If nRet Then
        For i = 0 To nRet - 1
            msg = msg & Files(i) & vbCrLf
        Next i
        MsgBox msg, , "共粘贴" & nRet & "个文件"
    Else
        MsgBox "从剪贴版粘贴文件错误", , "Failure"
    End If
End Sub
'运行文件,在Windows 资源管理器中,选择文件,再在资源管理器菜单中选 编辑 | 复制然后在Form1中点击cmdPaste,从资源管理器中复制的文件就拷贝到Dir1所在的目录中。从File1中选择文件,按cmdCopy复制,再在资源管理器中选 编辑 | 粘贴 ,选择的文件就被拷贝到Windows 资源管理器的当前目录下。
'上面的程序在Windows98 VB6.0下运行通过。



 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利