[img=http://b51.photo.store.qq.com/http_imgload.cgi?/rurl4_b=4a8b2d7fc91dd9abfa2a4a56756310ba21bf1769bef7481e8eb905ae25423e8da08810b3dff5a8bba1d9f4d1445144b7771eaaa83505b3876167175018e22f951699dde6f7e246e9adf8a234a417643b6dd73f6a][/img]
4 个解决方案
#1
顶贴啊 在线等呢 大虾们
#2
看不到你的图. 如果想拖动ListView中的图标, 这样做:
首先添加一个变量, 再设置一下ListView的属性:
然后在ListView的OnDragOver, OnDragDrop, OnMouseDown事件中添加以下代码:
首先添加一个变量, 再设置一下ListView的属性:
TPoint ptPre;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ListView1->DragCursor = crDefault;
ListView1->IconOptions->AutoArrange = false;
}
然后在ListView的OnDragOver, OnDragDrop, OnMouseDown事件中添加以下代码:
void __fastcall TForm1::ListView1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Accept = Source->ClassNameIs("TListView");
}
// ---------------------------------------------------------------------------
//
void __fastcall TForm1::ListView1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
TPoint pt(X - ptPre.x, Y - ptPre.y);
TListItem *pItem = ((TListView *)Source)->Selected;
pItem->SetPosition(pt);
}
// ---------------------------------------------------------------------------
//
void __fastcall TForm1::ListView1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
{
TListItem *pItem = ((TListView *)Sender)->GetItemAt(X, Y);
if(pItem != NULL)
{
((TListView *)Sender)->BeginDrag(false, 0);
TRect rct = pItem->DisplayRect(drSelectBounds);
ptPre.x = X - rct.Left - 3;
ptPre.y = Y - rct.Top;
Caption = String().sprintf("%d,%d", ptPre.x, ptPre.y);
}
}
}
#3
谢谢楼上的回答啊 但是这个效果不是我要的那种效果 简单的说 就是 比如从数据库中读取十个点的坐标,然后按照坐标把图标设置到相应的位置(十个坐标点可能是形成一个圆形,那么图标就排成圆形)能有什么好的解决方法么
#4
简单说, 就是利用 TListItem的SetPosition方法. 至于坐标, 你自己去计算就行了.
#1
顶贴啊 在线等呢 大虾们
#2
看不到你的图. 如果想拖动ListView中的图标, 这样做:
首先添加一个变量, 再设置一下ListView的属性:
然后在ListView的OnDragOver, OnDragDrop, OnMouseDown事件中添加以下代码:
首先添加一个变量, 再设置一下ListView的属性:
TPoint ptPre;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ListView1->DragCursor = crDefault;
ListView1->IconOptions->AutoArrange = false;
}
然后在ListView的OnDragOver, OnDragDrop, OnMouseDown事件中添加以下代码:
void __fastcall TForm1::ListView1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Accept = Source->ClassNameIs("TListView");
}
// ---------------------------------------------------------------------------
//
void __fastcall TForm1::ListView1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
TPoint pt(X - ptPre.x, Y - ptPre.y);
TListItem *pItem = ((TListView *)Source)->Selected;
pItem->SetPosition(pt);
}
// ---------------------------------------------------------------------------
//
void __fastcall TForm1::ListView1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
{
TListItem *pItem = ((TListView *)Sender)->GetItemAt(X, Y);
if(pItem != NULL)
{
((TListView *)Sender)->BeginDrag(false, 0);
TRect rct = pItem->DisplayRect(drSelectBounds);
ptPre.x = X - rct.Left - 3;
ptPre.y = Y - rct.Top;
Caption = String().sprintf("%d,%d", ptPre.x, ptPre.y);
}
}
}
#3
谢谢楼上的回答啊 但是这个效果不是我要的那种效果 简单的说 就是 比如从数据库中读取十个点的坐标,然后按照坐标把图标设置到相应的位置(十个坐标点可能是形成一个圆形,那么图标就排成圆形)能有什么好的解决方法么
#4
简单说, 就是利用 TListItem的SetPosition方法. 至于坐标, 你自己去计算就行了.