(1) DBGrid 在Mouse按下时,会选中当前记录,因此实现OnMouseDown如下:
procedure TCmpList.ListGridMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not(ssDouble in Shift) then
begin
ListGrid.BeginDrag(false,5);
end;
end;
ListGrid为TDBGrid类型的实体。(2)实现TTreeView/TListView的OnDragOver事件,以指定是否接受拖过来的值。
procedure TMchForm.FDTDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if Source is TDBGrid then //您可以再加入其它条件
Accept := true;
end;(3) 最重要的,是要实现TTreeView/TListView的OnDragDrop事件。procedure TMchForm.FDTDragDrop(Sender, Source: TObject; X, Y: Integer);
var
s: String;
ListItem: TListItem;
i,j: Integer;begin
with Source as TDBGrid do
begin if SelectedRows.Count>0 then
with DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
for j := 0 to FieldCount-1 do
begin if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
with ListView1 do
begin
ListItem := Items.Add;
ListItem.Caption := s;
end;
s:= '';
end;
end;end;
procedure TCmpList.ListGridMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not(ssDouble in Shift) then
begin
ListGrid.BeginDrag(false,5);
end;
end;
ListGrid为TDBGrid类型的实体。(2)实现TTreeView/TListView的OnDragOver事件,以指定是否接受拖过来的值。
procedure TMchForm.FDTDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if Source is TDBGrid then //您可以再加入其它条件
Accept := true;
end;(3) 最重要的,是要实现TTreeView/TListView的OnDragDrop事件。procedure TMchForm.FDTDragDrop(Sender, Source: TObject; X, Y: Integer);
var
s: String;
ListItem: TListItem;
i,j: Integer;begin
with Source as TDBGrid do
begin if SelectedRows.Count>0 then
with DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
for j := 0 to FieldCount-1 do
begin if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
with ListView1 do
begin
ListItem := Items.Add;
ListItem.Caption := s;
end;
s:= '';
end;
end;end;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TDBGrid;
end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
Node: TTreeNode;
begin
Node := TreeView1.GetNodeAt(X, Y);
TreeView1.Items.AddChild(Node,ADOTable1.Fields[0].AsString);
if Assigned(Node) then
Node.Expand(True);
end;procedure TForm1.DBGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TDBGrid;
end;procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
DBGrid1.BeginDrag(True);
end;