Kylix 3 圖表(Chart) 解決方案 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
■ Kylix 3 上並無 Chart 元件,但好玩的地方就在可發揮自己的創意,所以閒來無事寫了一個簡單的Function , 以 Image 元件為 Base , 然後加上簡單的國小數學,就寫成了一個 Chart Solution,功能雖簡單,但以可以滿足初步的需求,本範例資料來源為同一ListBox (Items->Count 不限數量),繪圖輸出於三個不同Size 的 Image , 函式會自動計算繪圖比例 .... ■ 函式名稱 MyChart(TStrings *MyStrings , TImage *MyImage)
//-------------------------------------------------------------------- void __fastcall TForm1::MyChart(TStrings *MyStrings , TImage *MyImage) { float w_unit=MyImage->Width/(MyStrings->Count*2); int max_h=0; for (int i=0 ; i<=MyStrings->Count-1;i++) { if (StrToInt(MyStrings->Strings[i])>max_h) max_h=StrToInt(MyStrings->Strings[i]); } float h_unit=(MyImage->Height*0.8)/max_h; //ShowMessage(IntToStr(h_unit)); float y1,y2; for (int i=0 ; i<=MyStrings->Count-1;i++) { y1=MyImage->Height-0; y2=MyImage->Height-StrToInt(MyStrings->Strings[i])*h_unit; if (y2==MyImage->Height) y2=MyImage->Height-1; String text=MyStrings->Strings[i]; MyImage->Canvas->Pen->Color=clBlue; MyImage->Canvas->Pen->Width=w_unit; MyImage->Canvas->MoveTo(i*2*w_unit+w_unit,y1); MyImage->Canvas->LineTo(i*2*w_unit+w_unit,y2); MyImage->Canvas->TextOut(i*2*w_unit+w_unit-2,y2-15,text); } }■ 函式特性 可自動按照輸出的 Image Size 自動分配 Chart 內容比例 ■ 使用方法(參照上圖) 資料來源 : TStrings (如 ListBox 之 Items 或 Memo 之 Lines) 繪圖輸出 : TImage 如上圖中 Button 中呼叫該函式三次 來源都是 ListBox1 輸出於三個不同 Size 的 Image 上 Button 之 OnClick 內容如下 void __fastcall TForm1::Button1Click(TObject *Sender) { MyChart(ListBox1->Items,Image1); MyChart(ListBox1->Items,Image2); MyChart(ListBox1->Items,Image3); }■ 功能加強 在您的創意之中 .... (Kylix 源碼任務 http://home.kimo.com.tw/bruce0211/Kylix/ ) 發表人 - bruce0211 於 2002/11/09 02:14:23 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |