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

模擬ctrl+c及ctrl+v

答題得分者是:老大仔
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-26 10:39:40 IP:219.87.xxx.xxx 訂閱
最近都在嘗試跟TwwDBGrid有關的功能, 不過遇到一些問題

要是想要複製Grid中的個別欄位時, 都要先按一下Enter進到欄位之後才能用ctrl c進行複製,

無法像Excel一樣, 直接對欄位按ctrl c直接進行複製,

所以我想說利用OnKeyDown來模擬, 下面是部份code
(當user按下ctrl c時, 會跑這code)

[code delphi]
procedure TFTestPlan.DBGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift = [ssCtrl] then
begin
case Key of
Ord('C'): CopyText();
end;
end;

procedure TFTestPlan.CopyText();
begin
keybd_event(VK_RETURN, 0, 0, 0); //按下Enter
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); //放開Enter
sleep(50);
//Ctrl C:
keybd_event(VK_CONTROL, 0, 0, 0); //按下Ctrl
keybd_event(Ord('C'), 0, 0, 0); //按下C
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0); //放開C
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); //放開Ctrl
end;
[/code]

可是作用不如預期, 實際執行時(按下ctrl c), 只要按一次ctrl c, 就會發生Enter一直被按住的情形

也導致沒成功複製欄位內容,

想請問是哪邊出了問題?謝謝!
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-26 10:49:32 IP:59.120.xxx.xxx 未訂閱
我在猜...
那個 Grid 格子中的字,你應該要先有"選取"(反白),
然後才進行Ctrl C的動作,
要不然沒有反白,它是要複製什麼@@???

嗯...純屬個人的猜測
請多多包涵~

===================引 用 lazybones1983 文 章===================
最近都在嘗試跟TwwDBGrid有關的功能, 不過遇到一些問題

要是想要複製Grid中的個別欄位時, 都要先按一下Enter進到欄位之後才能用ctrl c進行複製,

無法像Excel一樣, 直接對欄位按ctrl c直接進行複製,

所以我想說利用OnKeyDown來模擬, 下面是部份code
(當user按下ctrl c時, 會跑這code)

[code delphi]
procedure TFTestPlan.DBGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift = [ssCtrl] then
begin
case Key of
Ord('C'): CopyText();
end;
end;

procedure TFTestPlan.CopyText();
begin
keybd_event(VK_RETURN, 0, 0, 0); //按下Enter
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); //放開Enter
sleep(50);
//Ctrl C:
keybd_event(VK_CONTROL, 0, 0, 0); //按下Ctrl
keybd_event(Ord('C'), 0, 0, 0); //按下C
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0); //放開C
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); //放開Ctrl
end;
[/code]

可是作用不如預期, 實際執行時(按下ctrl c), 只要按一次ctrl c, 就會發生Enter一直被按住的情形

也導致沒成功複製欄位內容,

想請問是哪邊出了問題?謝謝!
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-26 11:10:52 IP:219.87.xxx.xxx 訂閱
先謝謝回答

不過我在按下Ctr C之後(模擬之前), 確定有看到裡面的字有被反白

另外...在按過Ctrl C後, 就算用滑鼠離開原本的欄位,

點選其他欄位, 就會發生按Enter進入欄位的情形, 不過實際上沒有按Enter...

是不是在OnKeyPress或是OnKeyUp等等地方需要另外作處理?

===================引 用 老大仔 文 章===================
我在猜...
那個 Grid 格子中的字,你應該要先有"選取"(反白),
然後才進行Ctrl C的動作,
要不然沒有反白,它是要複製什麼@@???

嗯...純屬個人的猜測
請多多包涵~

老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-26 15:02:59 IP:59.120.xxx.xxx 未訂閱
不知道你接不接受換個方式來進行複製...
你可以使用Clipboard來進行複製就可以了啊~
這樣或許比較快一點




(我承認這方法可能是爛了點...orz)


===================引 用 lazybones1983 文 章===================
先謝謝回答

不過我在按下Ctr C之後(模擬之前), 確定有看到裡面的字有被反白

另外...在按過Ctrl C後, 就算用滑鼠離開原本的欄位,

點選其他欄位, 就會發生按Enter進入欄位的情形, 不過實際上沒有按Enter...

是不是在OnKeyPress或是OnKeyUp等等地方需要另外作處理?

===================引 用 老大仔 文 章===================
我在猜...
那個 Grid 格子中的字,你應該要先有"選取"(反白),
然後才進行Ctrl C的動作,
要不然沒有反白,它是要複製什麼@@???

嗯...純屬個人的猜測
請多多包涵~

cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-05-26 19:24:15 IP:220.128.xxx.xxx 未訂閱
我用 TDBGrid,設定 Options 的 dgAlwaysShowEditor,使用者都能用 Ctrl + C 來複製,不需要寫程式碼來處理。
TwwDBGrid 跟 TDBGrid 有甚麼不一樣?
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-05-27 11:39:21 IP:219.87.xxx.xxx 訂閱
1.沒把dgAlwaysShowEditor設為True是覺得很容易不小心誤改到內容

2.TwwDBGrid 已經處理好欄位裡面用checkbox的部分(不過詳細差別我也不是太清楚...)

謝謝回答

===================引 用 cancer 文 章===================
我用 TDBGrid,設定 Options 的 dgAlwaysShowEditor,使用者都能用 Ctrl C 來複製,不需要寫程式碼來處理。
TwwDBGrid 跟 TDBGrid 有甚麼不一樣?
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-05-27 13:43:35 IP:220.128.xxx.xxx 未訂閱
Hello, dgAlwaysShowEditor 跟能不能修改並無關係,dgAlwaysShowEditor 沒設,要用滑鼠點,Editor 才會出現,有設,則 Editor 一直都出現不會隱藏,控制能不能修改,是 dgEditing 和 ReadOnly,ReadOnly = false,且有設 dgEditing 就能編輯,跟 dgAlwaysShowEditor 並無關係。

===================引 用 lazybones1983 文 章===================
1.沒把dgAlwaysShowEditor設為True是覺得很容易不小心誤改到內容

2.TwwDBGrid 已經處理好欄位裡面用checkbox的部分(不過詳細差別我也不是太清楚...)

謝謝回答

===================引 用 cancer 文 章===================
我用 TDBGrid,設定 Options 的 dgAlwaysShowEditor,使用者都能用 Ctrl C 來複製,不需要寫程式碼來處理。
TwwDBGrid 跟 TDBGrid 有甚麼不一樣?
lazybones1983
一般會員


發表:6
回覆:7
積分:2
註冊:2011-05-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-06-01 09:20:25 IP:219.87.xxx.xxx 訂閱
謝謝各位, 最後cell的複製還是用ctrl+c配合Clipboard來做複製

整行用array, 目前操作起來還滿OK的,

謝謝

===================引 用 cancer 文 章===================
Hello, dgAlwaysShowEditor 跟能不能修改並無關係,dgAlwaysShowEditor 沒設,要用滑鼠點,Editor 才會出現,有設,則 Editor 一直都出現不會隱藏,控制能不能修改,是 dgEditing 和 ReadOnly,ReadOnly = false,且有設 dgEditing 就能編輯,跟 dgAlwaysShowEditor 並無關係。

系統時間:2024-04-26 20:35:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!