要求,1个DBGrid,要能实现里面某条记录的某个字段值能拖放到一个edit中,同时能保留DBGrid中记录的双击事件。
我现在找了很多例子,没没办法达到这个要求,有人能帮我么,或者有具体的例子。
非常感谢!

解决方案 »

  1.   

    //参考下面的例子,其它你自己模拟一下拖动就可以了procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      Text1.Caption:=Column.Field.Value ;
    end;
      

  2.   

    //写错了,应该是procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      Edit1.Text:=Column.Field.Value ;
    end;
      

  3.   

    //用了一个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.
      

  4.   

    这是我在网上找的代码,经测试非常不错:   
      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;
      

  5.   

    楼上的方法也不错,只不过是要按住SHIFT才能拖动。