一百五十分!!!从DBGrid拖动项目到ListView/TreeView,能否实现?
rt
一百五十分!!!
问题点数:150、回复次数:12Top
1 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-17 09:39:00 得分 0
一定要可用的例子才成哦Top
2 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 09:29:00 得分 0
大家帮忙Top
3 楼Muf(沐枫)回复于 2001-06-18 11:12:00 得分 20
(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
GotoBookmark(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;
Top
4 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 12:54:00 得分 0
谢谢Muf,程序思路很清楚,但我为什么拉DbGrid不动?Top
5 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 12:58:00 得分 0
一旦把DragMode设作 Auto,就没法拖动了~为什么为什么?Top
6 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 13:17:00 得分 0
真要命,Muf兄,各位高手,帮忙阿!
UP!UP!Top
7 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 13:27:00 得分 0
upTop
8 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 14:16:00 得分 0
upTop
9 楼martix(微尘)回复于 2001-06-18 14:41:00 得分 0
我也帮你UP一下!Top
10 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-18 20:16:00 得分 0
up againTop
11 楼weenyboy(也许是偶老婆)回复于 2001-06-18 20:50:00 得分 130
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
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;
Top
12 楼bisc_sunny(总是当时携手处,游遍芳丛)回复于 2001-06-27 20:38:21 得分 0
给分给分,一分不少!Top




