我用ListView控件,已经可以从其他窗口把文件直接拖进来了,ListView显示文件的一些基本信息如路径,大小等,设置RowSelect := TRUE,如何实现行的拖拽呢?比如用鼠标直接把第一行的拖到第三行,不知道该怎么写,我看别人的程序里有用DragOver和DragDrop的,猜想和这个有关系,抄过来,但根本就不执行这两个过程:(请大虾多多指教,我是在没招了:(谢谢!
解决方案 »
- 怎么删除ThinkPad本子上的系统文件
- 欢迎大家探讨有关数据库字段访问的若干问题,有请您!
- MessageBox()在数据模块中不能通过.
- 我在用QuickRep作报表时遇到一个难题,那位仁兄帮我解答一下,马上给分!!!!!
- ADOQuery的bug ,一个insert 语句,在access里面可以执行,但在程序里边就出错
- 为什么FastReport报表不能保存记录?
- 简单问题:如何在一个unit里访问另一个unit里的全局变量?
- 网络游戏外挂制作之我所见(1)
- 我剩不多分了,全给了,快帮帮我
- 算法?
- 高手帮忙!!改写SQL语句,有关Oracle的,急!!!
- 高分提一个菜鸟问题~~在线等~~
Accept := Source = ListView1;
然后在DragDrop事件中编写处理代码。
如果还不行,发邮件给我[email protected]
procedure TfrmMain.ListView1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
//-- only allow dragging withing listview
if (Source = ListView1) then Accept := true;
end;procedure TfrmMain.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
liOffset: Integer;
begin
with ListView1 do
begin
if Assigned(DropTarget) then
begin
Items.BeginUpdate;
try
//-- insert Item before DropTarget, only
//-- if the item is dragged after the last item
//-- this item should be put at the end of the list
liOffset := 0;
if GetItemAt(X, Y) = nil then liOffset := 1;
with Items.Insert(Items.IndexOf(DropTarget) + liOffset) do
Assign(ItemFocused);
//-- delete FocusedItem
Items.Delete(Items.IndexOf(ItemFocused));
//-- Workaround for whatever; else the listview will be drawn
with checkboxes...
Checkboxes := false;
//-- Show No Sort Arrow, List is unsorted now
//ListView1.ShowSortArrows := false;
finally
Items.EndUpdate;
end;
end;
end;
StatusBar1PanelUpdate;
end;
跟你说的一样啊,我在里面添了showmessage都没有反应,好像根本就没有执行过来。实现文件拖拽是用消息机制的代码,设置过:
DragAcceptFiles(ListView1.Handle, TRUE);
ListView1.FullDrag := TRUE;
有影响吗?ListView的其他属性都是默认的,不知道不知道不知道到底是怎么一回事啊?