有關Tray Icon的問題(本期電子報)

首先,感謝Jimmy-Chen的詳細解說,但是,有一些問題想請教一下Jimmy-Chen:

1.STI.ocx是每一部電腦都有的一個檔案嗎??我這邊是有一個STI.ocx的檔案,但 是不是在windows的資料夾中找到的,那麼,要如何如同您所述,將這個active x控制項註冊??來方便Labview的Active x Container取用呢??我試過直接由檔案路徑的方式來引用這個STI.ocx,結果是有包含到active x container中,但是用property node與invoke node選擇其property或method時,都變成沒有任何選項?? 請問應該如何做呢??

2.有關Register Event Callback的使用,我試了一下,發現當程式執行後,會卡住然後當機,這是為什麼呢??(在event structure中的對話框vi有執行,但是關不掉),我完全依照您所提供的做法來作,但是不知道是何原因所造成??

3.另外,就是當我的程式沒有開啟callback reference vi時,會出現程式錯誤的現象(連event structure中的程式也不會執行),必須先指定callback reference vi的路徑才可以正確執行!!

我附上我的試驗程式:2005-01-04_150942_ui.vi (主程式)

                        2005-01-04_151012_trest.vi (callback reference vi)

4.若是一切都如同在電子報中的做法完成後,雖然可以將tray icon至於右下方中,並以雙擊觸發的方式來執行event structure中的程式,但是此時主程式並沒有關閉,如果是這樣的話,我們應該如何修改程式,讓它被載入後,只有tray icon在右下方的圖示集中stand by,而沒有其他的程式視窗呢??

[QUOTE=麟仔]

1.STI.ocx是每一部電腦都有的一個檔案嗎??我這邊是有一個STI.ocx的檔案,但 是不是在windows的資料夾中找到的,那麼,要如何如同您所述,將這個active x控制項註冊??來方便Labview的Active x Container取用呢??我試過直接由檔案路徑的方式來引用這個STI.ocx,結果是有包含到active x container中,但是用property node與invoke node選擇其property或method時,都變成沒有任何選項?? 請問應該如何做呢??

[/QUOTE]

在引用ocx控制項前,必須先執行REGSVR32.EXE進行註冊,你可以在DOS環境下或開始>>執行視窗裡輸入"REGSVR32.EXE C:\...\STI.ocx".

按下確定後,會出現註冊成功訊息.

![](upload://h1zjet6fMXZbYfDSrjIXrmr3Loh.png)

[QUOTE=麟仔]

2.有關Register Event Callback的使用,我試了一下,發現當程式執行後,會卡住然後當機,這是為什麼呢??(在event structure中的對話框vi有執行,但是關不掉),我完全依照您所提供的做法來作,但是不知道是何原因所造成??

[/QUOTE]

看了你的程式後,你必須要將圈選處移到While Loop外面,因為在程式一開始執行的時後,就會先將Callback進行註冊.所以,基本上跟Initialize是一樣的意思.

![](upload://kdDr7oxgXT8wIyeQZl0shetmknc.png)

[QUOTE=麟仔]

3.另外,就是當我的程式沒有開啟callback reference vi時,會出現程式錯誤的現象(連event structure中的程式也不會執行),必須先指定callback reference vi的路徑才可以正確執行!!

我附上我的試驗程式:2005-01-04_150942_ui.vi (主程式)

                        2005-01-04_151012_trest.vi (callback reference vi)

[/QUOTE]

在進行程式規劃的時候,我會利用*.llb方式管理所有的Vi.用這樣的方式,就不怕會出現你所說的情況了.

[QUOTE=麟仔]

4.若是一切都如同在電子報中的做法完成後,雖然可以將tray icon至於右下方中,並以雙擊觸發的方式來執行event structure中的程式,但是此時主程式並沒有關閉,如果是這樣的話,我們應該如何修改程式,讓它被載入後,只有tray icon在右下方的圖示集中stand by,而沒有其他的程式視窗呢??

[/QUOTE]

可以利用Property Node>>Front Panel Windows:State取得視窗狀態,並改變視窗狀態.

當使用者按下最小化按鈕後,將視窗的Front Panel State變更為Hidden,然後觸發STI.ocx Invoke Node的Appaer.

當使用者在System Icon上按下滑鼠觸發時,將Front Panel State變更為Sandard並觸發STI.ocx Invoke Node的Remove.

再次感謝Jimmy-Chen的大力幫忙.....

1.目前我已經可以完成電子報中所描述的功能....(如下圖)

![](upload://4xgZQwpVQJZzYeOgFVC2cUHBb9M.gif)

2.我希望如同一般的Tray程式,保持常駐的狀態(程式一啟動就run),且看不前任何視窗,當雙擊Tray Icon時,才出現對應的程式視窗....所以我依據Jimmy-Chen的提議,加入控制vi視窗狀態的功能.....但是我沒有用最小化的功能來設定tray icon的狀態....因為一般的tray 程式應該不會因為視窗的最大最小化而造成tray icon的消失!!

![](upload://vUeGc5B6UkWDDh4rgUGdR01gx9n.gif)

3.最後請教Jimmy-Chen, REGSVR32.EXE是專門用來註冊DLL檔的嗎??

建議要試驗這個Tray Icon的網友們,先試試Register Event Callback的使用,瞭解如何使用後,再試tray icon的功能....才不會和我一樣犯相同的錯誤!!

[QUOTE=麟仔]

最後請教Jimmy-Chen, REGSVR32.EXE是專門用來註冊DLL檔的嗎??

[/QUOTE]

Basically yes,If you have an ActiveX Control (OCX or DLL file) that you want to use in your program, you have to register it with windows.

Good Luck

 找不到STI.ocx耶!可否說明可能的路徑 .謝謝.

STI.ocx必須先下載...

2005-01-07_112228_sti.ZIP

找到了,多謝 !

http://forums.ni.com/ni/board/message?board.id=170&message.id=95137&requireLogin=False

請問有人用過這些VI 做 trayicon的效果嗎?

但他使用VI路徑大都在LabVIEW 8.0的目錄下...

是否可以請有LabVIEW 8.0的高手 試看看這些vi嗎??

 

[QUOTE=拉拉]

http://forums.ni.com/ni/board/message?board.id=170&message.id=95137&requireLogin=False

請問有人用過這些VI 做 trayicon的效果嗎?

但他使用VI路徑大都在LabVIEW 8.0的目錄下...

是否可以請有LabVIEW 8.0的高手 試看看這些vi嗎??

[/QUOTE]

你安裝LabVIEWTrayIcon.zip裡面的「Tray Icon ActiveX Server.msi」就會自動安裝在你目前的LabVIEW裡面的user.lib裡面。如果你安裝的是LabVIEW 8 beta的話,只要將「LabVIEW Tray Icon.llb」從「LabVIEW8\user.lib」複製到「LabVIEW 7.1\user.lib」就可以了。

![](upload://9ZR8odbDmGSARVo4EMp9EyqZarU.jpeg)

 

只要開啟範例就可以欣賞作者寫的程式了:

![](upload://36AjdScX0Uelfe3uVjiijNPqIBH.jpeg)

 

安裝的過程:

![](upload://1bcLLBVtcnq85E9YQk0zrTPBxuh.jpeg)

![](upload://ajeR5rhTHbLRaMtjDIvcoIq8Dr3.jpeg)

![](upload://Zp4PLhy2NihItARwhQUmPs8ZDm.jpeg)

![](upload://MmZixm0yZXQLQiQT5ncEE4lTAL.jpeg)

![](upload://5P2f10e6qWx8GyBPAkoCayld5nb.jpeg)

請問下面這個Control是什麼東西,從哪裡取出來的?謝謝!

![](upload://aneaGC6xfUNX67Unv1N1ii7IaV3.jpeg)