  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		cgsusually67
 
 
  註冊時間: 2009-10-14 文章: 41
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 10:15 am    文章主題: grid 中邊打字邊搜索 | 
				     | 
			 
			
				
  | 
			 
			
				請教各位先進:
 
 
我用一個form 裡面有grid1的物件,在form的keypress中寫下面的代碼
 
 
 
*GRDM1
 
IF !THISFORM.GRID1.VISIBLE=.T. &&先確認該GRID是焦點所在,再分按鍵作用,以作索引。
 
    RETURN 
 
ENDIF
 
@ 27 , 30 say nkeycode
 
@ 27 , 50 say nShiftAltCtrl
 
do case
 
case NKEYCODE = 127   && BackSpace.back a character
 
       IF !EMPTY( MY_SEEK )
 
            MY_SEEK = SUBSTR( MY_SEEK , 1 , LEN( MY_SEEK ) - 1)
 
            @ 26 , 30
 
            @ 26 , 30  say  MY_SEEK
 
       ENDIF
 
       RETURN
 
case NKEYCODE = 10      && Ctrl_Enter.clear key buffers
 
       MY_SEEK = ""
 
      @ 26 , 30
 
      RETURN
 
case nkeycode = 13     && Enter.確定
 
    thisform.itemname = invtory.ino
 
    thisform.release
 
    return 
 
case nkeycode = 27    && Esc.放棄    
 
    thisform.itemname = ""
 
    thisform.release
 
    return 
 
otherwise   && search data
 
	IF CHR(nKeyCode)$"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
 
		MY_RECNO=RECNO()
 
		*@ 26 , 23  say  MY_SEEK
 
		SEEK MY_SEEK + UPPER( CHR( NKEYCODE ) )
 
		IF !FOUND()
 
			WAIT WINDOWS MY_SEEK + UPPER( CHR( NKEYCODE ) )
 
			GO MY_RECNO &&停在最後找到紀錄的
 
                ELSE
 
                         MY_SEEK=MY_SEEK+UPPER( CHR(nKeyCode)  )
 
                         @ 26 , 30  say  MY_SEEK
 
		ENDIF
 
	ELSE
 
.
 
 
	*	GO TOP
 
	*	MY_SEEK="" &&重設搜索鍵
 
	ENDIF
 
endcase
 
 
這段代碼的作用為,當游標在grid1時,用keypress程序 攔截user在鑑盤所key的每一個字,然後搜索更新grid裡面的內容,但是很奇怪的是,我在鍵盤所打每一個的字,或按倒退鍵,速度很慢,但我在gird1,移動游標做上下筆資料移動時,速度又很正常,
 
請教各位前輩,這個問題是為甚麼是否有解 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 10:46 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				我會避免作這種我認為是傻事的動作.
 
理由就在倒數三行中 _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		LiuRambo
 
 
  註冊時間: 2007-11-27 文章: 481
 
  第 3 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 12:01 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				按一個字就seek一次.........
 
會不會太操啊
 
 
如果真要搜尋
 
換用cursor試試看,我不確定
 
真正原因syntech老大已經說的很清楚了
 
好像之前也有人要vfp做出像google一樣及時搜尋的.....
 
沒有這麼需要這樣搞吧 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		lee188188
 
 
  註冊時間: 2007-01-27 文章: 33
 
  第 4 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 5:16 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				請設一TEXTEDIT文字輸入欄, 點尋找時VISIBLE=.T.
 
 
interactive Change
 
---------------------------
 
      SET NEAR ON
 
      SEEK TRIM(THIS.VALUE)
 
      SET NEAR OFF
 
      THISFORM.GRID1.REFRESH
 
 
KeyPress
 
--------------------------
 
if nkeycode=13
 
  thisform.grid1.setfocus
 
  THIS.VISIBLE=.F.
 
  nodef
 
else
 
  if nkeycode=27
 
    thisform.grid1.setfocus
 
    nodef
 
  endif  
 
endif
 
 
即可達可您的要求
 
我覺得不要用 @ SAY, ... 這種輸出動作較慢, 應用LABEL顯示較好.
 
但是隨打隨找的畫面在主機多人且資料量大時反應較慢. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		LiuRambo
 
 
  註冊時間: 2007-11-27 文章: 481
 
  第 5 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 5:27 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				這樣搞會變成 你的每個客戶電腦都要不錯
 
網路還不可以太慢
 
 
導致慢的因素太多了
 
怕是搞到後來會變成砸自己腳的大石頭 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		cgsusually67
 
 
  註冊時間: 2009-10-14 文章: 41
 
  第 6 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 5:28 pm    文章主題: 謝謝各位前輩指點 | 
				     | 
			 
			
				
  | 
			 
			
				| 請問所謂的cursor 處理是甚麼意似,有可能會比較快嗎 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		cgsusually67
 
 
  註冊時間: 2009-10-14 文章: 41
 
  第 7 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 5:57 pm    文章主題: 可是程式碼改成下面這樣....還是慢 | 
				     | 
			 
			
				
  | 
			 
			
				請教各位大大,因為我程式碼已經改成下面這樣,等於沒有做搜尋,但是在打每一個字時,或按倒退鍵減字,速度還是很慢,看起來應該不是seek的問題,那可能原因是甚麼.感謝
 
 
do case
 
case NKEYCODE = 127   && BackSpace.back a character
 
     IF !EMPTY( THISFORM.SEARCH_STR.CAPTION  )
 
          THISFORM.SEARCH_STR.CAPTION = SUBSTR( THISFORM.SEARCH_STR.CAPTION 
 
, 1 , LEN( THISFORM.SEARCH_STR.CAPTION ) - 1)
 
     ENDIF
 
     RETURN
 
 otherwise   && search data
 
    IF 
 
CHR(nKeyCode)$"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
 
        THISFORM.SEARCH_STR.CAPTION = THISFORM.SEARCH_STR.CAPTION + UPPER( 
 
CHR(nKeyCode)  )
 
    ENDIF
 
endcase | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		LiuRambo
 
 
  註冊時間: 2007-11-27 文章: 481
 
  第 8 樓
  | 
		
			
				 發表於: 星期四 十月 29, 2009 9:02 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				你有沒有試過放個messagebox或是wait windows來看看到底執行幾次
 
搞不好按個鍵多跑了好幾次 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		cgsusually67
 
 
  註冊時間: 2009-10-14 文章: 41
 
  第 9 樓
  | 
		
			
				 發表於: 星期五 十月 30, 2009 8:54 am    文章主題: 可是我測過了...... | 
				     | 
			 
			
				
  | 
			 
			
				| 我按照各位前輩的指點,做了測試,譬如在程式碼中放入mesaagebix(""),以確定我按鍵盤的每個按鍵,程式到底跑了幾次,是確定只有一次,怎麼辦,.........請各位高手幫幫忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		LiuRambo
 
 
  註冊時間: 2007-11-27 文章: 481
 
  第 10 樓
  | 
		
			
				 發表於: 星期五 十月 30, 2009 11:00 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				檢查看看還有沒有其他的even在互相影響
 
或者是在同一個form裡面還有其他的keypress在干擾 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |