在DBGrid中实现Copy、Paste功能

2016-02-19 12:35 8 1 收藏

下面,图老师小编带您去了解一下在DBGrid中实现Copy、Paste功能,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

   Copy和Paste加速按钮,对于使用Windows下编辑器的人来说,恐怕都是非常熟悉而且不可缺少的。Delphi中的有些控件,如:TDBEdit、TDBImage、TDBMemo、TEdit等,具有CutToClipboard、CopyToClipboard和PasteFromClipboard方法,在这些控件上,利用这几个方法,只要通过简单的编程,就可以实现上述加速按钮。但TDBGrid控件却不提供上述方法,无法直接实现这几种功能。而在单机的数据库应用程序中,TDBGrid却经常被用来进行数据(包括数字和文字)的输入,没有Copy和Paste功能,使用起来深感不便。笔者在编程过程中,利用中间控件进行“过渡”,间接地实现了这几种功能。
  
  主要思路:既然TDBGrid控件无法直接实现Copy和Paste编辑功能,则可以将TDBGrid控件中需要进行这几种编辑的字段(Field)的内容,转移到具备这几种功能的控件(以TDBEdit为例)中去,编辑完毕后,再传回到TDBGrid中。
  
  具体方法:在已设计好的包含有TDBGrid控件(设名为DBGrid1)的窗体中,增加一个TDBEdit(设名为DBEdit1)控件,其DataSources属性设为与DBGrid1的DataSources属性相同,对DBGrid1控件的OnColEnter事件编程,使DBEdit1的DataField属性值等于DBGrid1控件的被选择字段的字段名。再在窗体中增加两个快速按钮:Copy和Paste,图形可选Delphi子目录下ImagesιButtons子目录里的Copy.bmp和Paste.bmp。对Copy快速按钮的OnClick事件编程:
  DBEdit1.CopyToClipboard;
  
  对Paste快速按钮的OnClick事件编程:
  DBEdit1.PasteFromClipboard;
  DBGrid1.SelectedField.AsString:=DBEdit1.Text;
  
  此时,假如DBGrid1中的某一单元Cell数字需要粘贴另一单元Cell2的部分或全部内容,用鼠标单击选择Cell2,此时DBEdit1所显示的内容与Cell2的内容相同。在DBEdit1中用鼠标拖曳选择部分或全部内容,单击Copy快速按钮;再用鼠标单击选择Cell,此时DBEdit1所显示的内容与Cell相同,在DBEdit中欲粘贴刚才所选内容的位置插入光标,单击Paste快速按钮,则刚才所选内容插入到光标位置,Cell的内容也随之改变成插入后的内容,由此完成了一次Copy—Paste操作。
  
  用这种方法实现Copy—Paste操作,比正常的操作多了一次鼠标的键击、两次鼠标的移动。在重复输入的内容不多,且操作者键盘输入很快很熟练的情况下,这种实现Copy—Paste的方法,意义似乎不大。但假如应用程序的使用者是那些并没有把握某种快速的方法的,copy—Paste方法本来就不熟练(则感觉不到这种方法的不合常规),且又非常地善于在一长串的同音字里翻来翻去地寻找的话,这还是一种不错的方法。假如哪位读者有能在TDBGrid中实现常规Copy—Paste操作的方法,请不吝赐教。
  
  以下是有关的程序代码:
  procedure TUnitDetail.DBGrid1ColEnter(Sender:TObject);
  begin
  case DBGrid1.SelectedIndex of
  0:DBEdit1.DataField:=Unit?Num;
    1:DBEdit1.DataField:=UnitName;
  2:DBEdit1.DataField:=Header;
  3:DBEdit1.DataField:=Address;
  4:DBEdit1.DataField:=Tel;
  end;
  end;
  
  
  procedure TUnitDetail.SBCopyClick(Sender:TObject);
  begin
  DBEdit1.CopyToClipboard;
  end;
  
  procedureTUnitDetail.SBPasteClick(Sender:TObject);
  begin
  DBEdit1.PasteFromClipboard;
  DBGrid1.SelectedField.AsString:=DBEdit1.text;
  end;

来源:http://www.tulaoshi.com/n/20160219/1601234.html

延伸阅读
一、实现对话框 ATL中有三个模板类可用于创建一个对话框: (1)CSimpleDialog:创建模式对话框, 可以host Windows Controls template < WORD t_wDlgTemplateID, BOOL t_bCenter = TRUE > class CSimpleDialog : public CDialogImplBase (2)CDialogImpl:创建模式或非模式对话框, 可以host Windows Controls ...
   现在很多网站都提供了站内的搜索功能,有的很简单在SQL语句里加一个条件如:where names like ‘%words%’就可以实现最基本的搜索了。    我们来看看功能强大一点,复杂一点的搜索是如何实现的(在SQL SERVER200/2005通过存储过程实现搜索算法)。    我们把用户的搜索可以分为以下两种: ...
  最近一直在看《Unix网络编程》这本书,觉得这本书很适合初学socket编程的人(比如说我自己 ^_^ )。我一直对于多播的实现比较模糊,在看了书上的多播部分的介绍,才发现在程序中实现一个基本的多播功能是如此简单。   在这里我不想照本宣科的大说什么理论,概念的东东,我的目的是说明在我们的代码中如何实现多播功能。   开...
RichEdit有一个FindText函数,极大方便了我们为RichEdit编制查找功能。下面的片断取自于Delphi帮助中的范例。 C++ Builder 请参照Delphi的例子 Delphi procedure TMainForm.FindDialogFind(Sender: TObject); !-- frame contents -- !-- /frame contents -- var ...
Java的AWT库允许你把用户界面建立在Java applet中。AWT库包含有所有的用于建立简单界面所需要的控制:按钮、编辑框、检查框等等。 import java.awt.*; import java.applet.*; public class AppletEvent extends Applet { int x, y ; Button b ; Color clr ; 在该applet构造函数中,代码初始化了变量x,y,clr,建立了一个新的...

经验教程

327

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部