在IE中选中文本后,拖动到程序的文本输入框中,这时文本输入框就能自动填上在IE中选中的文本,请问要怎么实现呢?

解决方案 »

  1.   

    以下的程序在Delphi7可運行。unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Mask, ExtCtrls,
      ActiveX, ComObj, ClipBrd;type
      TForm1 = class(TForm, IDropTarget)
        Panel1: TPanel;
        Memo1: TMemo;
        Panel2: TPanel;
        MaskEdit1: TMaskEdit;
        ComboBox1: TComboBox;
        Button1: TButton;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        function DragEnter(const dataObj: IDataObject;
                           grfKeyState: Longint;
                           pt: TPoint;
                           var dwEffect: Longint): HResult; stdcall;
        function DragOver(grfKeyState: Longint;
                          pt: TPoint;
                          var dwEffect: Longint): HResult; stdcall;
        function DragLeave: HResult; stdcall;
        function Drop(const dataObj: IDataObject;
                      grfKeyState: Longint; pt: TPoint;
                      var dwEffect: Longint): HResult; stdcall;
        function _AddRef: Integer; stdcall;
        function _Release: Integer; stdcall;
      end;var
      Form1: TForm1;implementation
    uses ShellAPI;{$R *.dfm}function TForm1.DragEnter(const dataObj: IDataObject;
                                grfKeyState: Longint;
                                         pt: TPoint;
                               var dwEffect: Longint): HResult;
    begin 
      dwEffect := DROPEFFECT_COPY;
      Result   := S_OK;
    end;function TForm1.DragOver(grfKeyState: Longint;
                                      pt: TPoint;
                            var dwEffect: Longint): HResult;
    begin 
      dwEffect := DROPEFFECT_COPY;
      Result := S_OK;
    end;function TForm1.DragLeave: HResult;
    begin
      Result := S_OK;
    end;function TForm1._AddRef: Integer;
    begin
       Result := 1;
    end;function TForm1._Release: Integer;
    begin
       Result := 1;
    end;function TForm1.Drop(const dataObj: IDataObject;
                           grfKeyState: Longint;
                                    pt: TPoint;
                          var dwEffect: Longint): HResult;
    var
      aFmtEtc: TFORMATETC;
      aStgMed: TSTGMEDIUM;
      pData: PChar;
    begin
      if (dataObj = nil) then
        raise Exception.Create('IDataObject-Pointer is not valid!');  with aFmtEtc do begin
        cfFormat := CF_TEXT;
        ptd := nil;
        dwAspect := DVASPECT_CONTENT;
        lindex := -1;
        tymed := TYMED_HGLOBAL;
      end;  OleCheck(dataObj.GetData(aFmtEtc, aStgMed));
      try
        pData := GlobalLock(aStgMed.hGlobal);
        MaskEdit1.Text := pData;
        ComboBox1.Text := pData;
        Memo1.Text     := pData;
        Memo1.Text := ClipBoard.AsText;
      finally
        GlobalUnlock(aStgMed.hGlobal);
        ReleaseStgMedium(aStgMed);
      end;
      Result := S_OK; 
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      OleInitialize(nil);
      OleCheck(RegisterDragDrop(Handle, Self));
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      RevokeDragDrop(Handle);
      OleUninitialize;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      MaskEdit1.Text := '';
      ComboBox1.Text := '';
      Memo1.Clear;
    end;end.