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

如何讓兩個元件內某個屬性的值做到同步化

尚未結案
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-11 09:55:48 IP:61.230.xxx.xxx 訂閱
各位前輩好~ 小弟最近在寫BCB上碰到一個問題
我使用了兩個元件
1.ValueListEditor
2.某廠商提供之視覺元件 在此稱他為 AOI

假設AOI下面有三個屬性
color , X ,Y

於是我在ValueListEditor上面插入了三行

Key Value
color 1
X 100
Y 150

如果使用者直接修改value值
我必須要
if(修改的是color)
AOI->color = 新的值
if(修改的是X)
AOI->X= 新的值
if(修改的是Y)
AOI->Y= 新的值
這樣一來 如果AOI下面的屬性有幾十個 我的程式會變得很大(AOI本身又分好幾種類型)
因此小弟想利用address map的方式 將ValueListEditor的value欄位 address 直接設給AOI對應屬性的位址
想請問一下這樣應該怎麼做
還是說各位前輩有更好的方法可以免去上面的判斷式呢??
謝謝!!
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-11 21:14:40 IP:122.116.xxx.xxx 未訂閱
您好,

參考一下
http://delphi.ktop.com.tw/board.php?cid=169&fid=1016&tid=25780
雖是 delphi 版本, 很多觀念相通

或是
http://delphi.ktop.com.tw/board.php?cid=168&fid=918&tid=43483


或是 google 一下
GetPropList

====================================================
2009-03-12
參考別人的寫法拼湊出來的, 沒測, 請參考一下, (注意, 我沒有處理型別);
int ii, jj;
PPropList Properties;

for (jj=1; jj<=ValueListEditor1->rowcount; jj ) {
for (ii=0; ii < GetPropList(AOI, Properties); ii ) {
if (Properties[ii]->Name == ValueListEditor1->cells[0][jj]) {
SetPropValue(AOI, Properties[ii]->Name, ValueListEditor1->cells[1][jj]);
}
}
}
============================================
2009-03-12
或是大膽一點
int jj;

for (jj=1; jj<=ValueListEditor1->rowcount; jj ) {
try {
SetPropValue(AOI, ValueListEditor1->cells[0][jj], ValueListEditor1->cells[1][jj]);
}
catch {...}
}
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-03-11 21:34:55, 註解 無‧
st33chen 重新編輯於 2009-03-11 21:46:44, 註解 無‧
st33chen 重新編輯於 2009-03-12 13:41:25, 註解 無‧
st33chen 重新編輯於 2009-03-12 13:50:12, 註解 無‧
st33chen 重新編輯於 2009-03-12 17:29:03, 註解 無‧
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-12 15:42:36 IP:61.230.xxx.xxx 訂閱
感謝ST大熱心的指導!!! 只是小弟看了您提供的資訊後發現
這種方式是否只能用在BCB的標準VCL元件(從TObject繼承下來的元件??)
(還是說只要做成VCL的東西一定是從Object繼承下來的....對不起我這邊觀念不好....)
而小弟的這個AOI元件並不是BCB的內建元件
舉例來說 我想要抓到AOI下面的AngleIsFitted屬性值
Variant a;
a = GetPropValue(AOI,"AngleIsFitted");
這樣就會顯示AngleIsFitted這個屬性並不存在
而同樣的方式

Variant a;
a = GetPropValue(Form1,"Align");
就沒有問題


這是小弟上網找到的一點資料

http://www.dev.idv.tw/mediawiki/index.php/BCB中的RTTI機制

PS: 我的終極目標 就是希望能寫成像S大上一篇回復所寫的大膽的寫法 如果能實現就太好了請大家幫幫忙> <


編輯記錄
chang1981 重新編輯於 2009-03-12 15:46:14, 註解 無‧
chang1981 重新編輯於 2009-03-12 15:48:06, 註解 無‧
chang1981 重新編輯於 2009-03-12 16:02:54, 註解 無‧
系統時間:2024-04-26 10:52:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!