微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用VB制作多次剪贴板
栏目软件世界
作者黄陀
发布2001年19期
  Word2000中的一个新功能就是可以进行多次复制、剪切、粘贴操作,多次复制的内容全部保存在剪贴板,不像以往剪贴板只保存最后一次复制或剪切的内容,对于较为复杂的修改工作实在是方便。然而因种种原因不能使用Word2000的朋友们就享受不到这种方便,因此,今天我们就自己制作一个类似的功能扩展软件。
   设计思路
  1.这个剪贴板必须在屏幕的上方才方便使用,为此,我们使用Win32API函数中的SetWinDowPos函数,这个函数可以设置窗体的XYZ轴的位置和大小等。
  2.必须随时侦测剪贴板的动向,为了能让更多初学者也能看懂,这里使用Timer控件定时监控,并采用ListBox控件储存从剪贴板得来的数据。
  3.和Word一样,这里也采用工具栏按钮式的剪贴板,采用Toolbar控件,每次从剪贴板得来数据以后清空剪贴板,等到需要用的时候单击相应的按钮即可把内容复制到剪贴板,再在字处理器中粘贴即可(因为这毕竟不是Word的内部工具)。
   控件设置
  向窗体中添加一个ListBox控件,把它的Visible属性设为False;一个Timer控件,Interval属性设为1000;一个ToolBar控件,Align属性设为0,便于拖动位置。TextAlign属性设为1,令文本显示在按钮中间,在属性页中把它的“样式”设为1,成为Windows98风格的工具栏;两个CommandButton控件,Caption属性分别为“全部清空”和“清空第N个”;一个TextBox控件,用来输入要清除的条目的序号。完成的界面如图所示。(

)
   代码如下:
  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
  '声明所用的SetWindowPosAPI函数,hwnd是窗体的句柄,hWndInsertAfter是窗体在屏幕的Z轴上的相对位置,X是窗体最左边的位置,Y是窗体最顶端的位置,cx、cy反之,wFlags是对窗体的大小、XYZ轴位置进行设置的显示标志,该函数的返回值是函数调用是否成功的标志(0表示调用失败)
  Const SWP_NOMOVE = &H2
  Const SWP_NOSIZE = &H1
  Const HWND_TOPMOST = -1
  '定义常数的值
  Dim cbtext As String
  Dim i,j As Integer
  Dim wd As Long
  Private Sub Command1_Click()
  For j = List1.ListCount To 1 Step -1
  List1.RemoveItem j - 1
  Toolbar1.Buttons.Remove(j)
  Next j '清空所有的条目
  i = 0
  cbtext = "" '初始化变量
  End Sub
  Private Sub Command2_Click
  List1.RemoveItem Val(Text1.Text)- 1 '移除索引号对应的条目(索引号从0开始)
  Toolbar1.Buttons.Remove Val (Text1.Text)'移除对应的按钮
  Text1.Text = ""
  End Sub
  Private Sub Form_Load()
  wd = SetWindowPos(Form1.hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) '用SetWindowPos函数把窗体固定,HWND_TOPMOST是指定窗体在屏幕的所有窗体Z轴最上方,SWP_NOMOVE和SWP_NOSIZE用OR连接,表示不允许移动窗口的X/Y/Z轴坐标和调整窗口大小
  End Sub
  Private Sub Timer1_Timer()
  On Error Resume Next
  If Clipboard.GetText=cbtext Or Clipboard.GetText=""Then'校验剪贴板的文字是否与前一次的重复且是否为空
  Exit Sub
  End If
  For j = 0 To List1.ListCount - 1
  If Clipboard.GetText = List1.List(j)Then Exit Sub'校验是否有重复的,如有则不必再次复制
  Next j
  cbtext = Clipboard.GetText '获得剪贴板的文字
  i = i + 1
  Toolbar1.Buttons.Add i,,Left(cbtext,10)+ "..." '把新复制到剪贴板的内容的前10个字符(相当于中文5个字符)作为摘要,添加到工具栏的新按钮的标题上
  List1.AddItem cbtext,i - 1'把新获得的内容通过List控件的AddItem方法添加进去
  Form1.Height = 1000*(i + 1)/4 + 1000'设置窗体高度
  Clipboard.Clear '清空剪贴板
  End Sub
  Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
  Clipboard.Clear
  Clipboard.SetText List1.List (Button.Index - 1)'把相应条目复制到剪贴板
  End Sub