線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1218
推到 Plurk!
推到 Facebook!

如何在沒有Form的環境下使用 spcomm 的 ReceiveData

缺席
qhero
一般會員


發表:1
回覆:1
積分:0
註冊:2009-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-09 01:12:30 IP:123.204.xxx.xxx 訂閱
各位大大你們好,我是剛從其他程式語言轉過來寫delphi,所以問題難免會很奇怪,敬請見諒。
小弟我想做一個某特定設備的com port溝通library提供給其他同事使用,所有會用到spcomm與TThreadedtimer(聽說可以多線程運行,所以選它)。

但是因為我繼承TComponent而不是TForm,所以元件的Event項目無法調整,例如spcomm的onReceiveData與TThreadedtimer的onTimer。

想先說明的是,整個程式在我的物件繼承TForm時,都是可以正常運作的。在TForm(例如 TForm1 : TForm)時,只需要將procedure 命名為 TForm1ReceiveData(Buffer: PChar; BufferLength: Word); 就能自動被與onReceiveData連接上,或由Form的視覺元件上調整也可以。

但是在物件是繼承TComponent時卻不知道要怎麼被spcomm的onReceiveData觸發,我有做了一個 procedure 命名也是"物件名ReceiveData(...)",我也做過測試,在的物件create時指定 spcomm1.onReceiveData : = "物件名ReceiveData",不過也沒有用,發送後都沒收到訊息。

所以想請問的是,spcomm 與 TThreadedtimer 的觸發Event、如onReceiveData 無法在非視覺物件上被使用,或是說我的使用方法錯誤,請幫忙。
編輯記錄
qhero 重新編輯於 2009-04-09 01:13:18, 註解 無‧
qhero
一般會員


發表:1
回覆:1
積分:0
註冊:2009-04-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-09 10:05:04 IP:59.125.xxx.xxx 訂閱
很抱歉,結果發現我之前的寫法是對的,只是因為我使用的TThreadedTimer發生很奇怪的問題,它死活都不動,明明在Application環境時都好好的,後來我改用TTimer之後就ㄧ切正常了。
原來如果我想要在我的物件MyComponent中指定 procedure MyTimer 來接收 TTimer的 onTimer,只需要這樣寫

TTimer1.onTimer := MyTimer;

procedure MyComponent.MyTimer( Sender: TObject );
begin
....
end;

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