線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:880
推到 Plurk!
推到 Facebook!

請問一個製作元件的問題...

尚未結案
kelon
一般會員


發表:17
回覆:27
積分:18
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-20 10:58:36 IP:211.20.xxx.xxx 未訂閱
請問... 我現在自製一個元件 繼承自StringGrid 現在想多一個property Columns; 所以在 private:     std::vector ShowCol; void __fastcall SetCol(AnsiString str); __published: __property AnsiString Columns={write=SetCol}; 如果我想在其後再有屬性 比如像ListBox List->Items->String[]=""; 想寫出 MyGrid->Columns->String[]=""; 這樣該如何下筆呢???
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-20 20:11:53 IP:211.76.xxx.xxx 未訂閱
你可以試試TStringList ^^    試試這個很好用的class唷, 可以處理文字, 效率又超高 就可以作到等效的作用唷
kelon
一般會員


發表:17
回覆:27
積分:18
註冊:2002-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-27 14:21:22 IP:211.20.xxx.xxx 未訂閱
請問...我目前做到... //MyGrid.h============================================================ class StringColumnsItem:public TObject { private:   AnsiString _Caption;   void __fastcall SetCaption (AnsiString Value); __published:   __property AnsiString Caption={read=_Caption,write=SetCaption}; }; //.................................................................... class StringColumns:public TObject { friend class MyGrid; private:   std::vector <> ShowCols; //=>顯示欄位設定 void __fastcall SetCols (AnsiString Value); std::vector <> Content; //=>欄位內容設定 StringColumnsItem* __fastcall GetItem (int Index); void __fastcall SetItem (int Index,StringColumnsItem* Value); public: __published: __property AnsiString ShowColumns = {write =SetCols}; __property StringColumnsItem* Items [int Index] = {read=GetItem,write = SetItem }; }; //.................................................................... class PACKAGE MyGrid : public TDrawGrid { private: StringColumns* MyColumns; void __fastcall SetCols (StringColumns* Value); __published: __property StringColumns* Columns = {read=MyColumns,write=SetCols}; } //MyGrid.cpp========================================================== void __fastcall StringColumnsItem::SetCaption (AnsiString Value) { _Caption=Value; } //.................................................................... void __fastcall StringColumns::SetCols (AnsiString Value) { AnsiString Temp=""; for (int i=1;i<=Value.Length();i ) { if (Value[i]!=',') //以逗號分隔字串 Temp=Temp Value[i]; if (Value[i]==','||i==Value.Length()) //轉為int存入vector,Temp清空 { ShowCols.push_back(Temp.ToInt()); Temp=""; } } } //.................................................................... StringColumnsItem* __fastcall StringColumns::GetItem (int Index) { if (Content.size()>Index) return Content [Index]; return NULL; } //.................................................................... void __fastcall StringColumns::SetItem (int Index,StringColumnsItem* Value) { if (Content.size()<=Index) //若vector的大小<=index,則要擴大vector至index 1 for (int i=Content.size();iColumns->ShowColumns="1,3,5,7"; Grid->Columns->Items[1]->Caption="Test"; //==================================================================== 在IDE設計階段 目前Grid->Columns->ShowColumns="1,3,5,7" 要顯示的Cols 1,3,5,7行 可以存入 我的vector ShowCols裡 (此Grid會由另一個程式取得所要顯示的Default Cols) 然後我在MyGrid的event中可以使用vector內的值判斷顯示的col 但是當我要用Grid->Columns->Items[1]->Caption="Test"時 由於Grid->Columns->Items[1]->Caption="Test" ....^^^^^^^^^^^^^^^^^^^^^^^先到GetItem傳回NULL 所以NULL都不會傳入Caption值到我的 vector Content裡 請問該如何寫出這個property呢???
kelon
一般會員


發表:17
回覆:27
積分:18
註冊:2002-07-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-27 15:44:03 IP:211.20.xxx.xxx 未訂閱
經過嚐試已經解決了 用了一個怪方法 在 StringColumnsItem* __fastcall StringColumns::GetItem (int Index) { if (Content.size()>Index)   return Content [Index]; else   {   for (int i=Content.size();i<=Index;i++)     {     Content.push_back(new StringColumnsItem);     }   return Content[Index];   } } 現在要想辦法把產生的東西殺掉 < > 佔了空間 不好意思 < > 發表人 - kelon 於 2003/05/27 15:50:40
系統時間:2024-04-29 16:43:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!