在DBGrid中實現Copy、Paste功能 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
在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 發送簡訊給我 |
不太能理解這篇作者的目的, TDBGrid明明有copy paste啊? 熱鍵上有我們熟知的Ctrl X, C, V, Mouse按右鍵一樣有選單啊, 這些都是Windows很標準的功能. 再說, 實際應用上, 用到DBGrid的欄位或圖型複製的機會實際上是少之又少, 真的較常用的是多行Bookmarks的複製, 但這要考慮到各別的重覆鍵問題. 真的熟練輸入的作業人員, Copy-paste用到的機會反而更少了.
PS. 只是針對這篇文章作者的內容有點疑問而已, 和jackkcg老弟無關地.
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
vank07 大大說的也沒錯 我想很少人會再去了解這些功能是如何產生 所以每一個人看到的事物與啟發不同 基本上一樣的文字 也會有不一樣的想法 所以我才貼在(VCL 元件使用或設計討論區)不過我以為不會有人回應 沒想到vank07 大大眼睛好銳利阿 寫此文章的作者那時應該已是滿久的了 所以此問題應該不再重要了 不過vank07 大大所提的
真的較常用的是多行Bookmarks的複製, 但這要考慮到各別的重覆鍵問題
也許改天有機會可以在 KTOP網 大家討論討論 參考參考啦
謝謝回應
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |