//参考下面的例子,其它你自己模拟一下拖动就可以了procedure TForm1.DBGrid1CellClick(Column: TColumn); begin Text1.Caption:=Column.Field.Value ; end;
//写错了,应该是procedure TForm1.DBGrid1CellClick(Column: TColumn); begin Edit1.Text:=Column.Field.Value ; end;
//用了一个BUTTON1,LABEL1来模拟,基本达到要求 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, DB, ADODB, Grids, DBGrids;type TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; Edit1: TEdit; ADOTable1: TADOTable; Label1: TLabel; Button1: TButton; procedure DBGrid1CellClick(Column: TColumn); procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); procedure Edit1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation var i:integer; {$R *.dfm}procedure TForm1.DBGrid1CellClick(Column: TColumn); begin Label1.Caption:=Column.Field.Value ; Button1.Caption:= Column.Field.Value ; end;procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin if (gdFocused in State) then begin BUTTON1.Left := Rect.Left + DBGrid1.Left; BUTTON1.Top := Rect.Top + DBGrid1.top; BUTTON1.Width := Rect.Right - Rect.Left; BUTTON1.Height := Rect.Bottom - Rect.Top; BUTTON1.Visible := True; end else BUTTON1.Visible := False; end; procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer); begin if Source is TBUTTON then Edit1.Text:=label1.Caption; end;procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:=(Source is TControl); end;procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Button1.BeginDrag(False,10); end;end.
这是我在网上找的代码,经测试非常不错: 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;
begin
Text1.Caption:=Column.Field.Value ;
end;
begin
Edit1.Text:=Column.Field.Value ;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, DB, ADODB, Grids, DBGrids;type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Edit1: TEdit;
ADOTable1: TADOTable;
Label1: TLabel;
Button1: TButton;
procedure DBGrid1CellClick(Column: TColumn);
procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
procedure Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
var i:integer;
{$R *.dfm}procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=Column.Field.Value ;
Button1.Caption:= Column.Field.Value ;
end;procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
BUTTON1.Left := Rect.Left + DBGrid1.Left;
BUTTON1.Top := Rect.Top + DBGrid1.top;
BUTTON1.Width := Rect.Right - Rect.Left;
BUTTON1.Height := Rect.Bottom - Rect.Top;
BUTTON1.Visible := True;
end
else
BUTTON1.Visible := False;
end;
procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TBUTTON then
Edit1.Text:=label1.Caption;
end;procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=(Source is TControl);
end;procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Button1.BeginDrag(False,10);
end;end.
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;