实现的功能:
    就是为了方便实现表中的数据 的复制 和粘贴(在同一个表中进行)!
具体功能;   1:分行复制   〉单行 复制 然后可以插入 和添加
   2:跳跃行复制 >选择多行,但是,不是连续的行
   3:连续行复制 >选择多行,是连续的行
   分行:。。
   
   4:分列复制   〉单列  复制 然后可以插入 和添加
   5:跳跃列复制 >选择多列,但是,不是连续的列
   6:连续行复制 >选择多列,是连续的列
   分列复制,确定所选择的是那几列是关键?(不太清楚)   7: 选择一块(矩形的块) ,也要能复制.还有这些复制粘贴的功能是用右键菜单来显现的,我是动态创建的菜单,你认为用静态的好,还是动态的好呢,我只想在EHLIB3.5中添加一点代码,不想在添加控件,免得使用的时候还要为DBGRIDEH,专门拖一个PopupMenu专用.还有一个问题:在一个局部过程中我创建了PoPupMenu 和PopupItem 没有释放,过程执行完之后,是不是自己会自动释放呀?因为,他是对象,不过也是变量,应该会自动被释放掉的.============================================
如果你看到了,有什么想法,希望能留下,谢谢哦

解决方案 »

  1.   

    procedure TForm1.DBGridEh1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      MouseP:Tpoint;
      PopupMenu: TPopupMenu;
      N:  array of TMenuItem;
      i:integer;
    begin
      if Button=mbRight then
      begin
        PoPupMenu:=TpopupMenu.Create(Sender as TcomPonent);
        setLength(N,2);
        for i:=low(N) to high(N) do
        begin
          N[i]:=TmenuItem.Create(PoPupMenu);
          case i of
            0:begin
                N[i].Caption:='复制';
                N[i].OnClick:=FirstClick; //自定义
              end;
            1:begin
                N[i].Caption:='粘贴';
                N[i].OnClick:=LastClick;   // 自定义
              end;
          end;
        end;
        try
          PoPupMenu.Items.Add(N);
          GetCursorPos(MouseP);
          Popupmenu.Popup(MouseP.X,MouseP.Y);
        finally
            {//
          PoPupMenu.Items.clear;
          PoPupMenu.Free;
          for i:=low(N) to high(N) do
            N[i].Free;
           }// 去掉这部分代码,会浪费内存吗? 但是不去掉程序还没有执行呢,就报错了,我认为是删除菜单太早了.
        end;
      end;
    end;
    这样会浪费内存吗?  ==================================================================
    再一个总是就是,如何得到DBGRID中选择的列 ()