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

請問要如何用SetPropValue去設定Anchors屬性呢?

答題得分者是:senso
renard
一般會員


發表:3
回覆:43
積分:24
註冊:2007-06-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-07-01 15:50:58 IP:61.62.xxx.xxx 訂閱
Dear All大大:

Me想在程式執行時期,去改變元件的Anchors,
但是用SetPropValue無法實現Me的想法,
不知道各位先進大大是否可以給小弟Me一點指點,3q3q.

TAnchors as1<
TComponent *com=Form1->FindComponent("Button1");
if (GetPropInfo(com->ClassType(),"Anchors",as2=GetPropValue(com,"Anchors") ; //因為沒辦法用這種寫法去抓屬性

senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-07-02 11:51:44 IP:61.219.xxx.xxx 訂閱
Set集合屬性 請參考 Delphi 的RTTI机制浅探(续) 中的 GetSetProp / SetSetProp 函数
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=68579

[code cpp]
TComponent *com = Form1->FindComponent("Button1");
PPropInfo PropInfo = GetPropInfo(com->ClassType(),"Anchors");

if (PropInfo)
{
AnsiString sAnc = GetSetProp(com,PropInfo); //PropInfo可寫"Anchors"
int iAnc = StringToSet(PropInfo,sAnc);
TAnchors Anchors = TAnchors(iAnc); //轉為TAnchors

//更改Anchors set屬性 ex: sAnc = "akLeft,akRight";
Anchors = TAnchors(0)< sAnc = SetToString(PropInfo,Anchors.ToInt());

SetSetProp(com,PropInfo,sAnc); //PropInfo可寫"Anchors"
Panel1->Width = 300;
}
[/code]
renard
一般會員


發表:3
回覆:43
積分:24
註冊:2007-06-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-07-06 09:34:58 IP:220.133.xxx.xxx 訂閱
Dear Senso大大:

感謝您再度協助小弟排除困難,
但是以下這三行在BCB6下過不了,

TAnchors Anchors=TAnchors(iAnc);
Anchors=TAnchors(0) < akRight; //
sAnc=SetToString(PropInfo,Anchors.ToInt());


所以我改用以下的方式去處理:
AnsiString SetSetProp(com,PropInfo,as1);

再次感謝您的熱情相助.
編輯記錄
renard 重新編輯於 2010-07-06 09:36:18, 註解 無‧
renard 重新編輯於 2010-07-06 09:37:19, 註解 無‧
renard 重新編輯於 2010-07-06 09:39:08, 註解 無‧
renard 重新編輯於 2010-07-06 09:39:48, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-07-07 13:07:40 IP:61.219.xxx.xxx 訂閱
我是用CB2007沒問題~
BCB6已經移掉了XD~
renard
一般會員


發表:3
回覆:43
積分:24
註冊:2007-06-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-07-16 15:57:52 IP:61.62.xxx.xxx 訂閱
Dear Senso大大:

請問一下,如果要變更的那個元件的屬性是Items,
要怎樣將StringList加入呢?

PPropInfo PropInfo2=GetPropInfo(com->ClassType(),"list=new TStringList();
for(int i=0;i<10;i ) list->Add((String)i);

//SetSetProp(com,PropInfo2,//SetSetProp不能用,請問有SetItemProp這種函式嗎?
delete list;
}
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-07-19 11:10:43 IP:61.219.xxx.xxx 訂閱
搜尋GetPropInfo items參考以下兩篇
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=56447
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=56261


[code cpp]
TComponent *com = Form1->FindComponent("ComboBox1");
PPropInfo PropInfo = GetPropInfo(com->ClassType(),"Items");

if (PropInfo)
{
TStrings *Items = new TStringList();
Pointer ptr = Pointer(GetOrdProp(com,PropInfo));
Items->Assign((TStrings*)ptr);
//Items->Clear();
Items->Add("aa");
Items->Add("bb");
if (Items->Count>0)
SetOrdProp(com,PropInfo,Longint(Pointer(Items)));
delete Items;
}
[/code]

renard
一般會員


發表:3
回覆:43
積分:24
註冊:2007-06-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-07-19 11:59:13 IP:220.133.xxx.xxx 訂閱
沒想到六年前也有人跟我一樣問過相同的問題
只不過偶不會用Delphi,
所以Delphi的相關文章通常是有看沒有到,
更別說那麼艱深的用法了,3q3q,偶再去試試看,..
系統時間:2024-04-26 11:35:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!