  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		goto-dream
 
 
  註冊時間: 2004-05-11 文章: 909
 
  第 1 樓
  | 
		
			
				 發表於: 星期五 六月 11, 2004 2:06 pm    文章主題: 把快捷菜單當列表框使用(轉貼) | 
				     | 
			 
			
				
  | 
			 
			
				把快捷菜單當列表框使     thornbird313 
 
http://mihu.agi-china.com/sdss/dispbbs.asp?boardID=2&ID=3808&page=5
 
 
 
最近在做一個選擇日期的類,主要是仿照Day and Time Picker控件,那個控件裡選擇日期時在彈出的窗口中可以用彈出來的快捷菜單來選擇月份,於是我就依葫蘆畫瓢也實現了該功能。接下來又想用快捷菜單來選擇年份,不過這就有點麻煩了:月份只有十二個,菜單有十二個項就可以了,年份可就太多了。於是靈機一動,給菜單的第一項和最後一項各加一個箭頭,按箭頭時可以改變各個菜單項(就是把菜單重定義)。這樣快捷菜單就可以當列表框來使了。沒什麼意義,就是挺好玩的。
 
以下是我寫的代碼,稍加改動就可以用了,因為是寫在了方法裡,沒法定義過程,所以只好用EXECSCRIPT()函數了。
 
 
 
 
 	  | 代碼: | 	 		  PUBLIC poCalendarTxtYear,pnCalendarYear,pnCalendarProcedurce
 
m.poCalendarTxtYear = THIS
 
m.pnCalendarYear = THIS.Parent.Container4.Spinner1.value
 
 
IF MOD(m.pnCalendarYear,10) = 0 AND m.pnCalendarYear <> 100
 
    m.pnCalendarYear = m.pnCalendarYear - 1
 
ENDIF 
 
LOCAL lnMinYear,laYear(10)
 
m.lnMinYear = THIS.Parent.Container4.Spinner1.SpinnerLowvalue
 
DO CASE 
 
CASE m.pnCalendarYear = 100
 
    FOR i = 1 TO 10
 
        laYear(i) = PADL(ALLTRIM(STR((99 + i))),4,"0")
 
    ENDFOR 
 
CASE m.pnCalendarYear >= 9990
 
    FOR i = 1 TO 10
 
        laYear(i) = PADL(ALLTRIM(STR((9989 + i))),4,"0")
 
    ENDFOR 
 
OTHERWISE 
 
    FOR i = 1 TO 10
 
        laYear(i) = PADL(ALLTRIM(STR(FLOOR(m.pnCalendarYear/10)*10 + i)),4,"0")
 
    ENDFOR 
 
ENDCASE 
 
 
TEXT TO m.pnCalendarProcedurce NOSHOW 
 
    IF BAR() <= 10
 
        m.poCalendarTxtYear.Parent.Container4.Spinner1.value = VAL(PROMPT())
 
        m.poCalendarTxtYear.Parent.Container4.Spinner1.InteractiveChange()
 
        RETURN 
 
    ENDIF 
 
    IF BAR() = 11
 
        m.pnCalendarYear = m.pnCalendarYear - 10
 
    ELSE 
 
        m.pnCalendarYear = m.pnCalendarYear + 10    
 
    ENDIF 
 
    
 
    LOCAL laYear(10),lnMinYear
 
    m.lnMinYear = m.poCalendarTxtYear.Parent.Container4.Spinner1.SpinnerLowvalue
 
    IF m.pnCalendarYear > 9999
 
        m.pnCalendarYear = 9999
 
    ELSE 
 
        IF m.pnCalendarYear < lnMinYear
 
            m.pnCalendarYear = lnMinYear   
 
        ENDIF 
 
    ENDIF 
 
 
    DO CASE 
 
    CASE m.pnCalendarYear = 100
 
        FOR i = 1 TO 10
 
            laYear(i) = PADL(ALLTRIM(STR((99 + i))),4,"0")
 
        ENDFOR 
 
    CASE m.pnCalendarYear >= 9990
 
        FOR i = 1 TO 10
 
            laYear(i) = PADL(ALLTRIM(STR((9989 + i))),4,"0")
 
        ENDFOR 
 
    OTHERWISE 
 
        FOR i = 1 TO 10
 
            laYear(i) = PADL(ALLTRIM(STR(FLOOR(m.pnCalendarYear/10)*10 + i)),4,"0")
 
        ENDFOR 
 
    ENDCASE 
 
    
 
    RELEASE MENUS popRight
 
    *DEFINE POPUP popRight SHORTCUT RELATIVE FROM MROW(),MCOL()
 
    DEFINE BAR 11 OF popRight PROMPT " ∧"
 
    FOR i = 1 TO 10 
 
        DEFINE BAR i OF popRight PROMPT laYear(i)
 
    ENDFOR 
 
    DEFINE BAR 12 OF popRight PROMPT " ∨"
 
    ON SELECTION POPUP popRight EXECSCRIPT(m.pnCalendarProcedurce)
 
    ACTIVATE POPUP popRight   
 
ENDTEXT 
 
 
DEFINE POPUP popRight SHORTCUT RELATIVE FROM MROW(),MCOL()
 
DEFINE BAR 11 OF popRight PROMPT " ∧"
 
FOR i = 1 TO 10 
 
    DEFINE BAR i OF popRight PROMPT laYear(i)
 
ENDFOR 
 
DEFINE BAR 12 OF popRight PROMPT " ∨"
 
ON SELECTION POPUP popRight EXECSCRIPT(m.pnCalendarProcedurce)
 
ACTIVATE POPUP popRight
 
 
RELEASE m.poCalendarTxtYear,m.pnCalendarYear,m.pnCalendarProcedurce | 	  
 
 
  _________________ 福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!
 
 
想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.
 
 
          愛作夢 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		goto-dream
 
 
  註冊時間: 2004-05-11 文章: 909
 
  第 2 樓
  | 
		
			
				 發表於: 星期四 六月 17, 2004 12:35 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				啟動下拉選單簡化版
 
 	  | 代碼: | 	 		    DEFINE POPUP popRelatYes SHORTCUT RELATIVE FROM MROW(),MCOL()
 
DEFINE BAR 4  OF popRelatYes PROMPT '4444'
 
DEFINE BAR 3  OF popRelatYes PROMPT '3333'
 
DEFINE BAR 2  OF popRelatYes PROMPT '2222'
 
DEFINE BAR 1  OF popRelatYes PROMPT '1111'
 
DEFINE BAR 6  OF popRelatYes PROMPT '6666' BEFORE 4
 
ACTIVATE POPUP popRelatYes 
 
 | 	 
  _________________ 福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!
 
 
想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.
 
 
          愛作夢 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |