现在的位置: 首页 > 综合 > 正文

关于 ole 拖放

2013年10月14日 ⁄ 综合 ⁄ 共 1248字 ⁄ 字号 评论关闭

今天看到豆三版主的博客上转了一篇鬼佬的使用 api 来实现从 windows 拖放文件到 vfp 列表框的文章,也不知道是为什么,vfp 本身就支持拖放操作,ole 拖放也同样支持,回复了一贴,后来碰到 yrt888 说不行,想想应该是他还没有看出我只简单的写了列表框接收拖入的代码,表单上的事件中没有写代码。一两句说不清,最好用段代码来说明。下面代码就可以简单实现那个鬼佬要完成的事情。

当然我不是想说用 api 不好,恰恰相反,我非常喜欢用 api !看看我以前的博客内容就知道了。很多 vfp 本身不支持的功能,用 api 可以轻易的实现,但有一个原则,就是 vfp 本身可以实现的东西,就完全没必要再用 api 来取而代之了,杀鸡焉用牛刀尔。其实如果用 vfp 表单来设计的话,只需要 OLEDragOver 和 OLEDragDrop 事件中那总共 8 行的代码,只是因为这里不能发表单,才啰啰嗦嗦的写了下面这么多。

先用好 vfp 本身,再来增强它的功能。

  1. oform = newobject('myform') 
  2. _screen.windowstate = 1
  3. oform.show()
  4. read events
  5. define class myForm as form
  6.   height = 250
  7.   width = 375
  8.   showwindow = 2
  9.   oledropmode = 1       && 这里设为 1 - enabled,让表单接收拖放事件
  10.   autocenter = .t.
  11.   caption = '从 Windows 拖些文件过来看看' 
  12.   add object lst as listbox with ;
  13.     oledropmode = 2, ;   && 这里设为 2 - pass to container,将拖放事件传给表单来处理
  14.     height = 216, ;
  15.     left = 12, ;
  16.     top = 12, ;
  17.     width = 348, ;
  18.     anchor = 15, ;
  19.     name = "lst"
  20.   procedure unload
  21.    clear events
  22.   endproc
  23.   procedure oledragover
  24.     lparameters od, p2, p3, p4, p5, p6, st
  25.     if 0 == st and od.getformat(15)
  26.       this.oledrophasdata = 1
  27.     endif
  28.   endproc
  29.   procedure oledragdrop
  30.     lparameters od, p2, p3, p4, p5, p6
  31.     local lafiles[1]
  32.     od.getdata(15, @ lafiles)
  33.     for m.ii = 1 to alen(lafiles)
  34.       this.lst.additem(lafiles[m.ii])
  35.     endfor
  36.   endproc
  37. enddefine
【上篇】
【下篇】

抱歉!评论已关闭.