给一段DBGrid拖放到treeview的代码.虽然不是cxgrid,但差不多的 {鼠标左键按下,开始执行拖曳} procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin SGC := (Sender as TDBGrid).MouseCoord(X,Y); if (SGC.X > 0) and (SGC.Y > 0) then (Sender as TDBGrid).BeginDrag(False); self.Caption := inttostr(SGC.X)+','+ inttostr(SGC.Y); end; end;{拖曳经过控件时检验对象是否合法} procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Source is TDBGrid) and (TreeView1.GetNodeAt(X,Y)<>nil); end;{接收放下的对象,并进行处理} procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var pNode:TTreeNode; begin pNode := TTreeView(Sender).GetNodeAt(X,Y); with (Source as TDBGrid).DataSource.DataSet do TTreeView(Sender).Items.AddChild(pNode, Fields[SGC.X-1].AsString); pNode.Expand(false); end;
试了一下楼上的代码,但cxgrid还是有些不同的啊 SGC := (Sender as TDBGrid).MouseCoord(X,Y); 这边就不一样,我这边的Sender跟踪后是"()",类型为TcxGridSite然后是处理哪里,是到另一个cxgrid,还是不知道怎么写?求高人给详细代码!
呵呵
看看这篇文章,我想你就知道怎么做了
这篇文章就是介绍怎样实现控件之间拖动的,此可以作为假象,你在其中再写删除合插入语句就可以了哦
{鼠标左键按下,开始执行拖曳}
procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
SGC := (Sender as TDBGrid).MouseCoord(X,Y);
if (SGC.X > 0) and (SGC.Y > 0) then
(Sender as TDBGrid).BeginDrag(False);
self.Caption := inttostr(SGC.X)+','+ inttostr(SGC.Y);
end;
end;{拖曳经过控件时检验对象是否合法}
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TDBGrid) and (TreeView1.GetNodeAt(X,Y)<>nil);
end;{接收放下的对象,并进行处理}
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
pNode:TTreeNode;
begin
pNode := TTreeView(Sender).GetNodeAt(X,Y);
with (Source as TDBGrid).DataSource.DataSet do
TTreeView(Sender).Items.AddChild(pNode, Fields[SGC.X-1].AsString);
pNode.Expand(false);
end;
SGC := (Sender as TDBGrid).MouseCoord(X,Y);
这边就不一样,我这边的Sender跟踪后是"()",类型为TcxGridSite然后是处理哪里,是到另一个cxgrid,还是不知道怎么写?求高人给详细代码!
那么就给两个cxGrid都设置一个Flag,来判断各自的MouseUp还是MouseDown吧。
第一个cxGrid只有Down,第二个只有UP,不就是拖曳事件了吗?
这个想法好不好?