请问如何将DBGrid中选中的一行记录(只有一个字段)拖动到listbox或memo中?是不是在
ondragdrop 
ondragover等事件中写呢?请高手给出代码,谢谢!!

解决方案 »

  1.   

    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      case Msg.message of
        WM_LBUTTONDOWN:
        begin
          if Msg.hwnd = DBGrid1.Handle then
          begin
            DBGrid1.Perform(Msg.message, Msg.wParam, Msg.lParam);
            DBGrid1.DragMode := dmAutomatic;
          end;
        end;
        WM_LBUTTONUP: DBGrid1.DragMode := dmManual;
      end;
    end;procedure TForm1.Memo1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if (X < 0) or (Y < 0) then Exit;
      if not (Source is TDBGrid) then Exit;
      Accept := True;
      TMemo(Sender).SetFocus;
      TMemo(Sender).SelStart :=
        TMemo(Sender).Perform(EM_CHARFROMPOS, 0, MAKELPARAM(X, Y)) and $0000FFFF;
    end;procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if not (Source is TDBGrid) then Exit;
      if not Assigned(TDBGrid(Source).SelectedField) then Exit;
      TMemo(Sender).SelText := TDBGrid(Source).SelectedField.AsString;
    end;procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if (X < 0) or (Y < 0) then Exit;
      if not (Source is TDBGrid) then Exit;
      Accept := True;
      TListBox(Sender).ItemIndex := TListBox(Sender).ItemAtPos(Point(X, Y), True);
    end;procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if not (Source is TDBGrid) then Exit;
      if not Assigned(TDBGrid(Source).SelectedField) then Exit;
      TListBox(Sender).Items.Insert(TListBox(Sender).ItemIndex,
        TDBGrid(Source).SelectedField.AsString);
      TListBox(Sender).ItemIndex := TListBox(Sender).ItemIndex - 1;
    end;
      

  2.   

    大侠,太谢谢你了!能不能在添加一些代码让listbox不要出现重复的记录呀(用户拖动一条记录两次)
    太谢谢了!
      

  3.   

    if listbox.indexof(..) < 0 then
      ..//删除!
      

  4.   

    不好意思 应该是
    listbox1.Items.IndexOf(..)