DBGrid的拖放问题:设为dmAutomatic,则点击无法移动记录,设为dmManual则在记录上点击时无法响应MouseDown事件,请问哪位大侠能解决
---------------------------------------------------------------
这是我在网上找的代码,经测试非常不错:
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
TDBGrid(Sender).BeginDrag(False);
end;
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TDBGrid;
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
AnItem: TTreeNode;
I: Integer;
S: String;
begin
with Sender as TTreeView do
begin
AnItem := GetNodeAt(X, Y);
with Source as TDBGrid do
begin
S := '';
for I := 0 to Columns.Count - 1 do
S := S + Columns[I].Field.AsString + ' ';
end;
Items.AddChild(AnItem, S);
AnItem.Expand(True);
end;
end;
本文提供了一种解决DBGrid拖放问题的方法。通过自定义MouseMove事件,实现了当按下鼠标左键时开始拖动功能,并在TreeView中实现DragOver和DragDrop事件来接受拖放的数据。这种方法既解决了dmAutomatic模式下无法移动记录的问题,又克服了dmManual模式下无法响应MouseDown事件的难题。
3438

被折叠的 条评论
为什么被折叠?



