实现从硬盘中拖放文件就很容易,但要实现从IE中拖放URL(即OLE拖放),我想了很久,也问了X次,任无法解决。无耐之下只得使用第三方控件,岂料我找来找去都没找到一个可以使用的控件。
本来国内的"XURLDropTarget"勉强可以使用,岂料这东东也不知是怎么编写的,竟然与ShellCtrls发生冲突(如果在uses中加入ShellCtrls,则XURLDropTarget立即失效)。国外的找来找去都是要$的,没有哪个可以使用的免费控件。my gad,国内的很多软件都支持从IE中拖放URL地址了,我本想这项“技术”已是很普及了,岂料弄了X天还是没能解决、而且好像是解决不了了!!!my gad,我真的就这样子放弃了吗?.....还有谁能help me啊........别见死不救啊.,.....

解决方案 »

  1.   

    Sorry,对OLE不太了解,帮你UP一下
      

  2.   

    torry上有个免费控件:Drag and Drop Component Suite v.3.7 
    下载:http://www.torry.net/vcl/system/draganddrop/dragdrop.exe
    安装后在DetailedDemo目录里有个例子,我试过可以从IE拖放URL。
      

  3.   

    使用组件DropMaster就可以解决,包括从Word等的任意对象
    For more information about DropMaster or other Raize Software products, 
    point your web browser to the Raize Software web site at:  http://www.raize.com
      

  4.   

    谢谢“sysu(死树) ”,我用过dragdrop, 但drag后得出来的是16进制码,我都不知道那编码是什么意思、根本就没办法子用,不知道你的这个链接中是不是我用过的那个,我等下试一下子。也谢谢ly_liuyang(Liu Yang),DropMaster好像都是1.5 for delphi7的,我现在用的delphi6,不想升级到delphi7,但就是没有找到DropMaster for d6的。我下了for d7的,但不能使用.....不知得怎么办啊?
      

  5.   

    “dragdrop”不能支持同时拖放IE的URL与本地文件,惨!!!(我自己加了一段拖放本地文件的程式进去也无所响应)
      

  6.   

    你必须有DropMaster的源代码,他本来就是For D6的
    站点的那个是Update来的,
    我有源代码,但太大Email发不了,我没有空间,我的主页有问题,没法了
    等以后我有Free的空间就能帮到不少人了
      

  7.   

    看看这个有没有用
    var
      Form1: TForm1;implementation{$R *.DFM}
    Function GetURL(H:hwnd;lparam:longint):boolean;stdcall;
    var str,url:array [0..254] of char;
      begin
        getclassname(h,@str,255);
        if strpas(@str)='ComboBoxEx32' then // ComboBoxEx32可以改成Edit.
          begin
          SendMessage(h,WM_GETTEXT,255,LongInt(@url));
          SendMessage(h,WM_SETTEXT,255,longint(pchar('http://www.sohu.com')));
          Sendmessage(h,WM_KEYDOWN,VK_Return,1); 
                
          form1.ListBox1.Items.Add(strpas(@url));
          end;
          result:=true;
      end;
    function callbackproc(H:HWnd;lparam:longint):Boolean;stdcall;
    var str:array [1..255] of char;
      begin
      getclassname(h,@str,255);
      if ((strpas(@str)='CabinetWClass') or (strpas(@str)='IEFrame')) then
          begin
            Enumchildwindows(h,@GetURL,0);
          end;
          result:=true;
      end;procedure TForm1.findbuttonClick(Sender: TObject);
    begin
        listbox1.Clear;
        Enumwindows(@callbackproc,0);
    end;end.
      

  8.   

    看这个思路行不行:在接受到拖放后,如果源是IE,从IE的接口中获得其当前的URL,通过DDE实现,IE有这个接口。