还有一组控件,你可以搜一下DropSource.pas TDropFileSource Drag files from your application. TDropTextSource Drag text from your application. DropTarget.pas TDropFileTarget Accept files dragged to your application. TDropTextTarget Accept text dragged to your application. TDropDummy Just displays a drag image. DropBMPSource.pas TDropBMPSource Drag bitmaps from your application. DropBMPTarget.pas TDropBMPTarget Accept bitmaps dragged to your application. DropURLSource.pas TDropURLSource Drag URLs from your application. DropURLTarget.pas TDropURLTarget Accept URLs dragged to your application. DropPIDLSource.pas TDropPIDLSource Drag PIDLs from your application. DropPIDLTarget.pas TDropPIDLTarget Accept PIDLs dragged to your application.
还要熟悉API函数
Dispathch()
有了它你可以在任何地方进行拖拽。
最好是你找一下相关资料或者VCL控件
//---------------------------------------------------------------------------
#pragma hdrstop#include "DropTarget.h"
extern UINT g_iRegisterCFHtml;
extern bool g_bSebDrag;
//---------------------------------------------------------------------------#pragma package(smart_init)HRESULT __stdcall TMyDropTarget::DragEnter(IDataObject *pDataObj,
DWORD grfKeyState,POINTL pt,DWORD *pdwEffect)
{
//当有数据拖进来时,判断是否接受该数据
//bSebCanDrop=!g_bSebDrag;
HRESULT hr;
FORMATETC fm;
fm.ptd = NULL;
fm.tymed=TYMED_HGLOBAL;
fm.dwAspect=DVASPECT_CONTENT;
fm.lindex=-1; fm.cfFormat =g_iRegisterCFHtml; //html 类型
hr=pDataObj->QueryGetData(&fm);
if(hr!=S_OK)
{
fm.cfFormat=CF_TEXT; //文本类型
hr=pDataObj->QueryGetData(&fm);
}
if(hr==S_OK)
{
return 0;
}else
{
*pdwEffect=DROPEFFECT_NONE;
return E_INVALIDARG;
}
}HRESULT __stdcall TMyDropTarget::DragOver(DWORD grfKeyState,
POINTL pt,DWORD *pdwEffect)
{
return 0;
}HRESULT __stdcall TMyDropTarget::DragLeave( void)
{
//g_bSebDrag=false;
//bSebCanDrop=true;
return 0;
}HRESULT __stdcall TMyDropTarget::Drop(IDataObject *pDataObj,
DWORD grfKeyState,POINTL pt,DWORD *pdwEffect)
{
//在鼠标拖动放下的时候接收数据
//if(!bSebCanDrop)
//{
// *pdwEffect=DROPEFFECT_NONE;
// g_bSebDrag=false;
// return E_INVALIDARG;
//} HRESULT hr;
FORMATETC fm;
fm.ptd = NULL;
fm.tymed=TYMED_HGLOBAL;
fm.dwAspect=DVASPECT_CONTENT;
fm.lindex=-1; fm.cfFormat =g_iRegisterCFHtml;
hr=pDataObj->QueryGetData(&fm);
if(hr!=S_OK)
{
fm.cfFormat=CF_TEXT;
hr=pDataObj->QueryGetData(&fm);
}
if(hr==S_OK)
{
STGMEDIUM sm;
hr=pDataObj->GetData(&fm,&sm); //从数据对象中得到数据
if(hr!=S_OK) return hr;
char* data=(char*)GlobalLock(sm.hGlobal);
(dde)((long)this,(ULONG)fm.cfFormat,(long)data); //处理函数
GlobalUnlock(sm.hGlobal);
return 0;
}else
return E_INVALIDARG;}HRESULT __stdcall TMyDropTarget::QueryInterface(REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject)
{
//只包含着两个接口
if(riid==IID_IUnknown || riid==IID_IDropTarget)
{
*ppvObject=(void*)this;
AddRef();
return 0;
}
else
{
*ppvObject=NULL;
return E_NOINTERFACE;
}
}ULONG __stdcall TMyDropTarget::AddRef( void)
{
m_RefCount++;
return m_RefCount;
}ULONG __stdcall TMyDropTarget::Release( void)
{
m_RefCount--;
if(m_RefCount==0)
{
delete this;
return 0;
}
return m_RefCount;
}
TDropTextSource Drag text from your application.
DropTarget.pas TDropFileTarget Accept files dragged to your application.
TDropTextTarget Accept text dragged to your application.
TDropDummy Just displays a drag image.
DropBMPSource.pas TDropBMPSource Drag bitmaps from your application.
DropBMPTarget.pas TDropBMPTarget Accept bitmaps dragged to your application.
DropURLSource.pas TDropURLSource Drag URLs from your application.
DropURLTarget.pas TDropURLTarget Accept URLs dragged to your application.
DropPIDLSource.pas TDropPIDLSource Drag PIDLs from your application.
DropPIDLTarget.pas TDropPIDLTarget Accept PIDLs dragged to your application.
否则你就直接用TDragDrop好了,这个控件包好多地方都有的。
http://www.csdn.net/develop/read_article.asp?id=21115