全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4680
推到 Plurk!
推到 Facebook!

GetText與SetText的問題?

答題得分者是:T.J.B
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-12 10:06:27 IP:61.218.xxx.xxx 未訂閱
各位Delphi高手、先進們: TField其中有兩個Event分別是GetText與SetText,請問這兩個Event的使用時機,目的及用法?如果可以請寫一範例參考!感激不盡!!
------
~小弟淺見,參考看看~
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-12 10:42:04 IP:61.220.xxx.xxx 未訂閱
1:OnGetText ---> 當你想要顯示的資料與資料庫的資料不同時 即可用此事件   例如 :
  if Query1.FieldByName('Sex').asstring = 'M' then
     Edit1.Text := '男'
  else
     Edit1.Text := '女';
2:OnSetText -->直接將參數 Text指定回去給Sender 例如 :
  Sender.Value :=strtoint(Trim(Text)); //Sender 為數字型態
< >< > 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-12 15:08:40 IP:61.218.xxx.xxx 未訂閱
依照T.J.B的說法,歸納觸發時機為: OnGetText:顯示每一筆資料時,就觸發一次 OnSetText:儲存時才觸發 另外OnValidate:即離開該欄位時(OnExit)時觸發 不知這觀念是否正確?
------
~小弟淺見,參考看看~
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-13 09:41:02 IP:61.220.xxx.xxx 未訂閱
前面2點大致正確 不過OnValidate事件 應是有資料才會觸發去做檢查 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-13 12:50:59 IP:61.218.xxx.xxx 未訂閱
感謝T.J.B版主的回答!
------
~小弟淺見,參考看看~
rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-05 15:42:42 IP:203.66.xxx.xxx 訂閱
我在OnGetText事件中沒寫任何程式 <textarea cols="60" rows="10" class="delphi" name="code"> procedure TDM.Table1AFieldOnGetText(var Text: String; DisplayText: Boolean); begin //沒寫任何東西 end; </textarea> 結果Table1的AField欄位在TDBGrid上顯示為空值,除非取消 OnGetText property指向以上事件, 照說我對參數沒做更動,當然是用原來的值,這是VCL原來的設計嗎?為何要這樣?
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-18 23:22:28 IP:124.10.xxx.xxx 訂閱
GetText 與 SetText 要使用 Text 屬性存取 TField 的值時,才會發生作用
如果用 AsString 屬性存取 TField 的值時,不發生作用
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-20 13:58:19 IP:203.66.xxx.xxx 訂閱

===================引 用 sryang 文 章===================
GetText 與 SetText 要使用 Text 屬性存取 TField 的值時,才會發生作用
如果用 AsString 屬性存取 TField 的值時,不發生作用


不懂吔!
我沒有寫任何東西阿,那不是就Text, DisplayText的都沒變嗎?為何會是空值,
照說原來值是什麼就不變阿?
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-20 14:31:33 IP:59.125.xxx.xxx 訂閱
我們來看一下 TField 的原始程式碼,就可以解釋你的疑問

這是 Text 屬性的宣告:
<textarea cols="80" rows="1" class="delphi" name="code">property Text: string read GetEditText write SetEditText; </textarea>
Text 屬性,取值時是呼叫 GetEditText 設值時是呼叫 SetEditText

這是 OnGetText 事件的宣告
<textarea cols="80" rows="1" class="delphi" name="code">property OnGetText: TFieldGetTextEvent read FOnGetText write FOnGetText; </textarea>
OnGetText 事件的事件指標用 FOnGetText 變數來存放

而 GetEditText 內容是這樣的
<textarea cols="80" rows="6" class="delphi" name="code"> function TField.GetEditText: string; begin Result := ''; if Assigned(FOnGetText) then FOnGetText(Self, Result, False) else GetText(Result, False); end; </textarea>
我們可以看到,Assigned(FOnGetText) 時,會執行 OnGetText,否則就執行 GetText
這就解釋了你寫的 OnGetText 事件中,若沒有指定 Text 引數的值時,Text 屬性就是空白的狀況了
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-07-20 16:03:45 IP:203.66.xxx.xxx 訂閱
已刪
編輯記錄
rachex2000 重新編輯於 2007-07-20 16:52:00, 註解 無‧
rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-07-20 16:50:36 IP:203.66.xxx.xxx 訂閱
感謝sryang的回答,閣下真是高手,我豁然開朗,
只是好奇為何要這樣設計,因為一般我們常會有
設事件但不寫Code的情形,不會遇到這種問題,
這樣設計不是增加學習VCL的門檻嗎?似乎不太好!
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-07-20 16:59:46 IP:59.125.xxx.xxx 訂閱
我不是高手,豹頭才是「高手高手高高手」

其實 VCL 的學習門檻不算高,因為有 VCL 的 Source code 可以看
對於 VCL 一些行為有疑慮,可以看看 VCL Source code 是怎麼寫的,還可以從中學到很多經典寫法。
看 VCL Source code 是相當有助益的
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
HireMan
一般會員


發表:0
回覆:12
積分:2
註冊:2004-12-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-07-25 00:21:14 IP:125.77.xxx.xxx 訂閱
GetText ,SetText?
其实遇到些问题时可以浏览borland 给我们的sourcecode,GetText,SetText如何处理的,相信问题就很快得到解决.也因有这种学习方式能力提高很快.
===
分享快乐: www.delphichm.com
系統時間:2024-05-18 23:39:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!