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

BCB中以Cast方式存取Protected區之資訊

 
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-06 13:28:21 IP:61.219.xxx.xxx 未訂閱
在VCL元件中, 有很多property或Method宣告在protected區, 必須透過繼承才能使用, 然而繼承後之新元件除非安裝至元件盤, 無法在DesignTime使用. 有時我們只須一些簡單的property    以下以DBGrid之FixedCols為例,設定DBGrid不可捲動之Columns     
typedef
class TTmpGrid : public TDBGrid  //宣告class繼承TDBGrid
{
public:
  __property  FixedCols;//FixedCols為TCustomGrid之protected property
                        //於此將其改為public
}TGrid;    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  (TGrid *)DBGrid1->FixedCols=2; //DBGrid1 Cast成TGird *後可直接用其FixedCols
}
[NOTE] 1. Delphi中Class內之public,protected等定義其"可見度"是以unit為單位,故同樣之做法在Delphi中只須在此unit內宣告如下即可 TTmpGrid =class(TDBGrid); //不須加 public: property FixedCols; BCB之class"可見度"則是以class為base 2. 可直接Cast不須用新class重新construct, 乃因為Class之內容並無任何改變, 只是可見度變了 3. 如此繼承,如果加入了額外的變數, Compiler也不會告訴你錯誤,實際也沒錯誤, 此時若未用新class重新construct, memory就會錯了.
whuang8
一般會員


發表:5
回覆:4
積分:1
註冊:2003-07-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-18 15:33:59 IP:61.222.xxx.xxx 未訂閱
為什麼我執行這個程式會發生error,error 如下: [C Error] odbookin.h(26): E2459 VCL style classes must be constructed using operator new [C Error] odbookin.h(26): E2125 Compiler could not generate default constructor for class 'TTmpGrid' [C Error] odbookin.cpp(146): E2188 Expression syntax
系統時間:2024-07-01 22:28:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!