全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3198
推到 Plurk!
推到 Facebook!

在DBGrid中實現Copy、Paste功能

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-21 21:53:06 IP:61.221.xxx.xxx 未訂閱
在DBGrid中實現Copy、Paste功能 工具條上的Cut、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:='UnitQNum'; 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; 發表人 - jackkcg 於 2002/10/21 22:03:35
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
vank07
一般會員


發表:1
回覆:5
積分:1
註冊:2002-04-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-23 09:50:59 IP:61.222.xxx.xxx 未訂閱
不太能理解這篇作者的目的, TDBGrid明明有copy paste啊? 熱鍵上有我們熟知的Ctrl X, C, V, Mouse按右鍵一樣有選單啊, 這些都是Windows很標準的功能. 再說, 實際應用上, 用到DBGrid的欄位或圖型複製的機會實際上是少之又少, 真的較常用的是多行Bookmarks的複製, 但這要考慮到各別的重覆鍵問題. 真的熟練輸入的作業人員, Copy-paste用到的機會反而更少了. PS. 只是針對這篇文章作者的內容有點疑問而已, 和jackkcg老弟無關地.
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-24 01:16:56 IP:210.65.xxx.xxx 未訂閱
vank07 大大說的也沒錯 我想很少人會再去了解這些功能是如何產生 所以每一個人看到的事物與啟發不同 基本上一樣的文字 也會有不一樣的想法 所以我才貼在(VCL 元件使用或設計討論區)不過我以為不會有人回應 沒想到vank07 大大眼睛好銳利阿 寫此文章的作者那時應該已是滿久的了 所以此問題應該不再重要了 不過vank07 大大所提的 真的較常用的是多行Bookmarks的複製, 但這要考慮到各別的重覆鍵問題 也許改天有機會可以在 KTOP網 大家討論討論 參考參考啦 謝謝回應
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-04 17:00:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!