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

自製 VCL 如何加入自己製的物件(如 Font),到屬性表中做展開

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-17 10:56:46 IP:61.218.xxx.xxx 未訂閱
請教各位前輩 !! 自製 VCL 如何加入自己製的物件(如 Font),到屬性表中做展開    我如以下的程式作好後,在屬性表中顯示(+),但為何無法展開清單??   萬份謝謝各位前輩!!

type      TJFDBEdit = class(TDBEdit)      private
    { Private declarations }        FJFModeColor : TJFDBEdit_Color;      protected
    { Protected declarations }      public
    { Public declarations }
    constructor Create(Aowner:TComponent);override;
  published
    { Published declarations }       Property JFModeColor : TJFDBEdit_Color Read FJFModeColor
                          Write FJFModeColor ;          end;      --------------------------------
TJFDBEdit_Color = class(TPersistent)
  private
    { Private declarations }        FJFViewColor:TColor;
    FJFEditColor:Tcolor;
    FJFAddNewColor:Tcolor;
  //     procedure Assign(Source: TPersistent); override;
  protected
    { Protected declarations }
  public
    { Public declarations }
        Owner: TComponent;
  published
    { Published declarations }       Property JFViewColorA : TColor Read FJFViewColor
                          Write FJFViewColor ;
   Property JFEditColorA : TColor Read FJFEditColor
                          Write FJFEditColor ;
   Property JFAddNewColorA : TColor Read FJFAddNewColor
                          Write FJFAddNewColor ;      end;        發表人 - jeffreck 於 2004/10/17  11:02:20
        
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-17 15:48:54 IP:61.229.xxx.xxx 未訂閱
hi,jeffreck:   如果你自己寫的元件屬性不是一般的簡單型態(如string,integer等)而是其他的自訂型態,那麼你必需自己註冊一個這種型態的編輯程式,讓Object Inspetor在你點選這種型態時,可以自動叫出你設計的編輯程式.試想,Delphi可能會知道你有什麼新訂的型態,還自動產生一個編輯設定的畫面讓你使用呢?你必需呼叫RegisterComponentEditor以註冊你自己的編輯程式
procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
相關的說明,你可以查一下online help,也可以參考在Delphi目錄裡的\Source\ToolsAPI裡的source code
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-17 19:43:41 IP:61.70.xxx.xxx 未訂閱
引言: hi,jeffreck: 如果你自己寫的元件屬性不是一般的簡單型態(如string,integer等)而是其他的自訂型態,那麼你必需自己註冊一個這種型態的編輯程式,讓Object Inspetor在你點選這種型態時,可以自動叫出你設計的編輯程式.試想,Delphi可能會知道你有什麼新訂的型態,還自動產生一個編輯設定的畫面讓你使用呢?你必需呼叫RegisterComponentEditor以註冊你自己的編輯程式
procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
相關的說明,你可以查一下online help,也可以參考在Delphi目錄裡的\Source\ToolsAPI裡的source code
謝謝前輩,但還是試不出?? 有用以下二種方式.但不知那錯了,先改 RegisterPropertyEditor(TypeInfo(String), TJFDBEdit_Color, 'JFAddNewColorA', Designeditors.TStringProperty); ---------- RegisterComponentEditor( TJFDBEdit_Color,TDefaultEditor); 謝謝 change.jian 前輩
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-17 20:32:57 IP:61.229.xxx.xxx 未訂閱
參考這裡 http://sun.cis.scu.edu.tw/~nms9115/articles/delphi/VclWrite2/VclWrite2.htm http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25380 http://delphi.ktop.com.tw/topic.php?topic_id=48711 發表人 - change.jian 於 2004/10/17 20:34:05
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-17 21:45:29 IP:61.31.xxx.xxx 未訂閱
老大! 您連 TJFDBEdit_Color 物件都未建立。 當然屬性就無法展開。 constructor TJFDBEdit.Create(AOwner: TComponent); begin inherited Create(Aowner); FJFModeColor :=TJFDBEdit_Color.Create; end; 記得在Destory 要釋放 FJFModeColor.free 這樣就一切OK。 另外請加入 Assign的方式。 procedure Assign(Source: TPersistent);Override; procedure TJFDBEdit_Color.Assign(Source: TPersistent); begin if Source is TJFDBEdit_Color then begin FJFViewColor := TJFDBEdit_Color(Source).JFViewColorA; FJFEditColor := TJFDBEdit_Color(Source).JFEditColorA; FJFAddNewColor := TJFDBEdit_Color(Source).JFAddNewColorA; end else inherited; end; RegisterComponentEditor 通常是針對 較特殊的屬性為其製作編輯的方式。 發表人 - wameng 於 2004/10/17 21:49:41 發表人 - wameng 於 2004/10/17 21:51:51
系統時間:2024-05-17 11:22:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!