請問如何讓物件(Panel / Image)依照面積大小排列 |
答題得分者是:dllee
|
zeal
一般會員 發表:8 回覆:7 積分:3 註冊:2007-08-12 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
您是的問題是這樣子嗎?
表單內有 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 |
zeal
一般會員 發表:8 回覆:7 積分:3 註冊:2007-08-12 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
請問您是否已試過我的程式?是否已找到您要的大小排序?
如果是的話,只需按您要的順序排好即可。 只是我不知道您的 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 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
哈哈, 我不強啦, 只能算有經驗, 寫程式重點是要有清楚的邏輯,
如果想都想錯了, 怎麼作也不會作對, 規劃及構想是很重要的。 即使是初學者, 仍然可以有貢獻的。 程式語言對任何人來說都是一樣的, 不論初學或資深, 要寫對 的程式才會 Work,而會不會 Work 自己作完就可以驗證, 當然, 如果太複雜又沒分割或元件化的程式就不易驗證了, 不過, 對初學或是資深來說都應該不會遇到, 因為初學程式 不會寫得太複雜, 資深會作適當的元件化/模組化, 所以, 即使 是初學者, 仍然可以試著回覆別人的問題, 自己試作看看, 久了, 自然就熟練了。 程式語言與外語是一樣的, 要多說, 多練習, 自然, 說得就會流利, 不說不練習, 自然說不出半句話。 加油囉!
------
http://www.ViewMove.com |
zeal
一般會員 發表:8 回覆:7 積分:3 註冊:2007-08-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |