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

如何讓程式一開始執行時,屬性能依序讀取

尚未結案
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-08 20:39:07 IP:203.204.xxx.xxx 未訂閱
我寫了一個元件 有兩個屬性如下 published Property btn:TComponent read Fbtn write setbtn; property btnIndex:Integer read FbtnIndex write SetbtnIndex; 如何才能讓程式一開始run時,先去read 和 write "btn"屬性而不是先read 和 write "btnIndex"屬性, 我記得只寫在前面的屬性會被先讀取,但我的程式就先讀btnIndex,不知有沒有人能指點一下。謝謝
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-13 09:00:44 IP:203.222.xxx.xxx 未訂閱
引言: 我寫了一個元件 有兩個屬性如下 published Property btn:TComponent read Fbtn write setbtn; property btnIndex:Integer read FbtnIndex write SetbtnIndex; 如何才能讓程式一開始run時,先去read 和 write "btn"屬性而不是先read 和 write "btnIndex"屬性, 我記得只寫在前面的屬性會被先讀取,但我的程式就先讀btnIndex,不知有沒有人能指點一下。謝謝
建議你重新思考你的設計架構 屬性是不應該有依賴性的,尤其是會出錯的那種依賴性
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-13 10:25:48 IP:61.224.xxx.xxx 未訂閱
引言: 我寫了一個元件 有兩個屬性如下 published Property btn:TComponent read Fbtn write setbtn; property btnIndex:Integer read FbtnIndex write SetbtnIndex; 如何才能讓程式一開始run時,先去read 和 write "btn"屬性而不是先read 和 write "btnIndex"屬性, 我記得只寫在前面的屬性會被先讀取,但我的程式就先讀btnIndex,不知有沒有人能指點一下。謝謝
針對這種有相依性的屬性可Override Loaded方法,在Loaded中控制實際寫入邏輯,Loaded方法會在元件屬性全部載入後再呼叫,因此大部分VCL元件處理相依性屬性時,在SetXXXX的方法內會用csReading判斷目前是否正由資源檔載入屬性
      if csReading in ComponentState  then     
    FXXXX := Value//表示正在讀入屬性值,不做處理邏輯,只暫時寫入Flag
  else begin
    DoPhysicalSetLogic; 
  end;
  //最後在 loaded Method 中由於全部屬性已經寫入FXXXX
  你可以安心處理DoPhysicalSetLogic
 
ps.Loaded只會呼叫一次 混心雜欲 棄修身~唉
------
唉~
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-13 18:15:52 IP:203.204.xxx.xxx 未訂閱
3q,我想這也算是解決方法之一,謝謝
系統時間:2024-11-24 13:31:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!