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

請問如何讓物件(Panel / Image)依照面積大小排列

答題得分者是:dllee
zeal
一般會員


發表:8
回覆:7
積分:3
註冊:2007-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-18 00:55:44 IP:61.223.xxx.xxx 訂閱
各位大大們 您好

我是初學者,已學會寫手動任意移動東西的程式了

但是我想要學使物件能依照大小排列,這樣就不用手動了 @@"

不知道是不是我關鍵字使用不恰當,我找不到類似的程式可以參考,不知道大大們能不能指點一下?!
如果我想學這方面的程式,不知道要用什麼關鍵字搜尋比較好呢 ^__^

非常感謝大大
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-18 10:51:03 IP:59.105.xxx.xxx 訂閱
您是的問題是這樣子嗎?
表單內有 10 個 Panel(或 Image),想要找出第一大的 Panel 第二大的 Panel...
是這樣子嗎?如果是的話

TStringList *TempSort=new TStringList;
TempSort->Duplicates=dupIgnore;
TempSort->Sorted=true;
TempSort->AddObject(Panel1->Width*Panel1->Height,Panel1);
TempSort->AddObject(Panel2->Width*Panel2->Height,Panel2);
TempSort->AddObject(Panel3->Width*Panel3->Height,Panel3);
TempSort->AddObject(Panel4->Width*Panel4->Height,Panel4);
TempSort->AddObject(Panel5->Width*Panel5->Height,Panel5);
TempSort->AddObject(Panel6->Width*Panel6->Height,Panel6);
TempSort->AddObject(Panel7->Width*Panel7->Height,Panel7);
TempSort->AddObject(Panel8->Width*Panel8->Height,Panel8);
TempSort->AddObject(Panel9->Width*Panel9->Height,Panel9);
TempSort->AddObject(Panel10->Width*Panel10->Height,Panel10);
for(int i=0;i<10;i )
{
Memo1->Lines->Add(String("Size No.") String(i 1) String(" is ")
((TPanel*)TempSort->Objects[i])->Name);
}
delete TempSort;
------
http://www.ViewMove.com
編輯記錄
dllee 重新編輯於 2007-08-18 10:52:32, 註解 修改 for loop 編輯器誤判 Tag 改用 <‧
dllee 重新編輯於 2007-08-18 10:53:48, 註解 改 for loop 為 10 看看是否就不會誤判 Tag‧
dllee 重新編輯於 2007-08-18 23:26:33, 註解 修正 Add 為 AddObject‧
zeal
一般會員


發表:8
回覆:7
積分:3
註冊:2007-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-18 17:02:16 IP:59.116.xxx.xxx 訂閱
是的

我希望能將不同大小的PANEL按照大小排列好,但不是只有顯示名稱唷~~

親愛的大大,我一直在嘗試
但是可能由於我是初學者,所以不太暸你的例子

能否請你再提示我一點呢?


因為我之前在學手動調整時,是認PANEL的左上角那點的位置,然後再經手動調整到適當位置
可是,我目前有想到的問題就是,不知道如何去寫程式讓電腦知道兩個PANEL的面積後,讓電腦將大的面積放到前面
而且兩者還必須互斥(不能重疊)


可以請大大提示我一下嗎? 謝謝大大

dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-18 23:28:00 IP:59.105.xxx.xxx 訂閱
請問您是否已試過我的程式?是否已找到您要的大小排序?
如果是的話,只需按您要的順序排好即可。
只是我不知道您的 Panel 的大小,您要橫一排, 還是直一排?還是兩排/三排?
以下是直一排的排法,Panel 間隔 5 (以下程式加在之前程式的
int CurrentY=5;
for(int i=0;i<10;i )
{
TPanel *panel=(TPanel*)Panel1->Width*Panel1->Height

只是要它把算出來的數值自動轉成字串再加入 TStringList 內。例如,算出面積可能為
12345678
34567
9876
以上的按數值是由大到小,但如果以字串去排序會變成
9876 > 34567 > 12345678
因為它是以字元去作比對的。

您可以使用其他排序的方式如 QuickSort 函式,或是把 TSringList 加入的數值前置空白
或前罝0 如前例把數值變成
12345678
00034567
00009876
這樣就可以使用 TStringList 內建的排序功能來排了。
使用 TStringList 除了排序的功能,最主要是 TStringList 還可以放一個 TObject 物件
與放入的字串是對應的,因此,使用 AddObject(面積數值,對應的Panel)
當前面的面積數值排序好時,加入的對應Panel也會排好,此時使用 Objects[i] 即可
取出使用。

P.S. 使用 TStringList 的排序其實排出來是由小到大。
------
http://www.ViewMove.com
編輯記錄
dllee 重新編輯於 2007-08-18 23:32:52, 註解 補上 PS 及 panel->Left=5 ‧
zeal
一般會員


發表:8
回覆:7
積分:3
註冊:2007-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-22 14:43:55 IP:210.70.xxx.xxx 訂閱
^____^

謝謝你的回答唷~~~

學到很多 ^____^

我會繼續TRY的~~~ 感謝您們

也謝謝您們程式能力很強之後,還想到要回饋給初學者,並也和大家一起分享所學

謝~~~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-22 19:59:00 IP:59.105.xxx.xxx 訂閱
哈哈, 我不強啦, 只能算有經驗, 寫程式重點是要有清楚的邏輯,
如果想都想錯了, 怎麼作也不會作對, 規劃及構想是很重要的。

即使是初學者, 仍然可以有貢獻的。
程式語言對任何人來說都是一樣的, 不論初學或資深, 要寫對
的程式才會 Work,而會不會 Work 自己作完就可以驗證,
當然, 如果太複雜又沒分割或元件化的程式就不易驗證了,
不過, 對初學或是資深來說都應該不會遇到, 因為初學程式
不會寫得太複雜, 資深會作適當的元件化/模組化, 所以, 即使
是初學者, 仍然可以試著回覆別人的問題, 自己試作看看,
久了, 自然就熟練了。

程式語言與外語是一樣的, 要多說, 多練習, 自然, 說得就會流利,
不說不練習, 自然說不出半句話。

加油囉!
------
http://www.ViewMove.com
zeal
一般會員


發表:8
回覆:7
積分:3
註冊:2007-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-24 16:12:47 IP:210.70.xxx.xxx 訂閱
呵呵~~遇到一個善良的大大,真是開心

謝謝你給的指引,我會更努力學習的!! ^_______^

我也會多在站內看看文章,增加自己的能力~~~如果有一天可以回饋給大家,我想我ㄧ定要這麼做~~ ^__^

~~~到時,ㄧ定很有成就感~~~

謝謝大大囉~~ ^____^
系統時間:2024-04-20 13:08:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!