如何處理重覆按鍵? |
尚未結案
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝兩位前輩及時回應!
如Justmade前輩所說,加一 Boolean 變數確實能解決重覆按鍵問題,但是帶來一個隱患,如果串埠操作沒有正常結束,則F6ing 一直為True, 再按F6將不發送指令。Code如下:
‧‧‧‧‧
if F6ing=false then
begin
F6ing:=true;
//在此向串埠發送指令
end
else
exit;
‧‧‧‧‧‧
//下面的Code 說明:
//回送數據放到buf中,如果接收到$4A ,表示收到回送數據。但是在串埠
//操作沒有正常結束時,程式不會收到任何回送數據,並被中止。原來碰到這
//種情況再按一次F6,重新發送指令。但現在程式被中止後,
//F6ing:=false沒有execute,F6ing將一直為True,再按F6將不起作用; repeat
‧‧‧
TimeDelay(200);
//在此接受串埠回送數據
until (pos(chr($4A),buf)>0);
F6ing:=false; 如turboted前輩所說,其實F6可以用VK_F6表示,但是如何判斷按了幾次(OnKeyDown )F6呀? 再次感謝兩位前輩的熱心指點!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
抱歉!先前我說在串埠操作沒有正常結束時,程式不會收到任何回送是不正確的!
我後來用UltraEdit在Hex 方式下看到在這時回送的結果:02 15 03($15 :NAK)。因此在回送數據裏看是否有02 15 03就可以退出Repeat‧‧‧Until這個LOOP 。
但是,我不知道是否Sentence 1寫的有錯誤(可以通過 Compile),因為即使buf 有02 15 03,showmessge('1111');也沒有顯示出來。 repeat
‧‧‧
TimeDelay(200);
//在此接受串埠回送
if Pos(#02 #15 #03,buf)>0 then //Sentence 1
begin
showmessge('1111');
F6ing:=false;
Exit;
end;
until (pos(chr($4A),buf)>0);
F6ing:=false;
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |