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

請問如何製作:自動感測 TField 中 DisplayLabel 屬性之 TLabel

尚未結案
borland_delphi70
中階會員


發表:8
回覆:50
積分:51
註冊:2002-12-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-24 03:08:38 IP:220.132.xxx.xxx 未訂閱
請問各位先進,要如何製作一個 TLabel 讓他能自動感測 TField 中 DisplayLabel 屬性,然後自動更正 Caption ?
jamests
初階會員


發表:0
回覆:43
積分:28
註冊:2005-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-24 11:13:46 IP:211.75.xxx.xxx 未訂閱
您好: 關於您的需求, 我想您應該有使用到資料感知元件如TDbEdit. 建議您從感知元件繼承下手應該比較容易些. TDbEdit繼承TMyDbEdit. 開個property指向TLabel做為DisplayLabel顯示用. 然後改寫DataField. 在property DataFile onset時. TLabel的Caption即改成該DataField指到的TField.DisplayLabel 希望有所幫助. 供參考.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-24 12:03:23 IP:61.31.xxx.xxx 未訂閱
個人建議從TDBtext修改程式碼 將TDBtext元件另外複製出來並改為自行設計的元件名稱。 利用 FFieldDataLink 中若異動 Field 將會觸發FOnDataChange {DisplayLabel異動將可能先由Filed異動} DisplayLabel本身異動並未有觸發事件。 應此去除原先不必要的程式碼。 加入顯示DisplayLabel 以上純屬個人看法,並未深入瞭解。 期望對您有些助益。
jamests
初階會員


發表:0
回覆:43
積分:28
註冊:2005-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-24 13:31:39 IP:211.75.xxx.xxx 未訂閱
站長提供的方法也很好. 一個是這個感知元件還有關連元件, 該關連元件就負責顯示DisplayLabel. 一個是這個感知元件就專門顯示DisplayLabel用. 不管怎樣. 從資料感知元件下手會比從TLabel等元件下手方便多了就是了. 而一般經驗上有資料欄位(TDbEdit)附近會放個TLabel來表示該欄位標題(即pair components型態). 改寫TDbEdit, 引入TLabel的方式也許更好表現出成對. eg. TDbEdit選擇時. 再加工一下讓TLabel也閃一閃之類的. 僅供參考, 希望有所幫助.
borland_delphi70
中階會員


發表:8
回覆:50
積分:51
註冊:2002-12-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-24 15:47:29 IP:220.130.xxx.xxx 未訂閱
首先感謝各位先進的幫助。 很抱歉我之前所寫的問題可能不夠詳細! 我用 TDBEditX 連結到 TLable 想要做的功能是當我調整 TField.DisplayLabel 時 TLable.Caption 會被 DataLink 觸發,達成自動更正的效果,就如同我們修改 TField.DisplayLabel 時 TDBGrid.Columns.Column.Title.Caption 會自行更正一般。 我追了 Source 1.在 DBGrid.DrawCell 事件中會觸發 DrawTitleCell 執行 Title 的重繪動作。 2.在 TField.SetDisplayLabel 無法找到觸發 Title 的重繪的動作。 3.在 TGridDataLink 中也無法找到觸發 Title 的重繪的動作。 有點頭大,所以我想要知道的應該是:TGridDataLink 如何通知 Column 依照 Field.DisplayLabel 重新設定 Caption。 最後再次感謝大家熱心的協助,謝謝!
jamests
初階會員


發表:0
回覆:43
積分:28
註冊:2005-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-24 17:17:25 IP:211.75.xxx.xxx 未訂閱
您好: 依照您的做法似乎是第一個方法, 即還有關聯元件(TLabel). 如此的話您應該可以繼承TDbEdit後, 改寫SetDataField, 在DataField值被改變的同時. if FDisplayLabel<>nil then FDisplayLabel.Caption=FDataLink.Field.DisplayLabel 如此即能在DataField被改變時, 所指到的TLabel也能跟著變. 希望有所幫助, 供參考.
borland_delphi70
中階會員


發表:8
回覆:50
積分:51
註冊:2002-12-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-24 18:28:26 IP:220.130.xxx.xxx 未訂閱
感謝您的協助: 但是這與我要的功能並不相同,因為我會在設定完 DataField 後再去修改 TField.DisplayLabel 如下: begin vDBEdit1.CaptionLabel:=Label1; vDBEdit1.DataField:='RSIOA'; Query1.FieldByName('RSIOA').DisplayLabel:='單號'; end; 在此種狀況下 Label1.Caption 即無法自動變更。 無論如何 還是在次感謝您熱心的回覆,謝謝! ^_^|||... 對我而言,程式設計是一場令人興奮又刺激的惡夢
jamests
初階會員


發表:0
回覆:43
積分:28
註冊:2005-01-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-25 10:04:44 IP:211.75.xxx.xxx 未訂閱
您好:    依照您的需求: 似乎可以您的vDBEdit1加個Method UpdateDisplayLabel 用法如: >>begin >>  vDBEdit1.CaptionLabel:=Label1; >>  vDBEdit1.DataField:='RSIOA'; >>  Query1.FieldByName('RSIOA').DisplayLabel:='單號';     vDBEdit1.UpdateDisplayLabel >>end; 我想您需要的是: 改了DisplayLabel就自動Update了. 但在最小修改原則下, 這應該是最easy的方式. 希望有所幫助, 供參考.
borland_delphi70
中階會員


發表:8
回覆:50
積分:51
註冊:2002-12-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-01-25 16:22:03 IP:220.130.xxx.xxx 未訂閱
感謝兩位大力幫助,元件已順利完成,謝謝。 ^_^|||... 對我而言,程式設計是一場令人興奮又刺激的惡夢
系統時間:2024-11-23 12:35:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!