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

元件屬性如何在 Object Inspector 做展開

尚未結案
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-04 14:52:40 IP:61.30.xxx.xxx 未訂閱
小弟自行撰寫一元件,主要是要練習用,完整程式碼如下:
unit cusBevel;    interface    uses
  SysUtils, Classes, Controls, ExtCtrls, Graphics;    type
  TcusBevel = class(TBevel)
  private
    AFont: TFont;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    property Font: TFont read AFont write AFont;
  end;    procedure Register;    implementation    procedure Register;
begin
  RegisterComponents('Samples', [TcusBevel]);
end;    end.
小弟發現,新增的 Font 屬性雖然出現在 Object Inspector 中,但卻無法像 TForm.Font 屬性一樣,能夠再展開(如下圖),想請教大大,該如何達成此種效果? -------------------------------- 給我一個支點,我可以撐起整個地球
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-04 16:27:48 IP:147.8.xxx.xxx 未訂閱
You need to create AFont in the constructor first.
change.jian
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-04 16:36:44 IP:61.222.xxx.xxx 未訂閱
如果你自製的元件,屬性的型態不是簡單型態的話,那麼你必需自行註冊該型態的編輯器,例如你所提到的TFont型態. 你可以看一下online help,在 Component writer's guide的Registering the property editor小節裡有說明.另外,你也可以參考在你安裝的Delphi的目錄裡,有個Source\Property Editors\的目錄,裡面有一些Property Editor的source code 提供給您參考
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-04 20:34:26 IP:218.32.xxx.xxx 未訂閱
xBug 你好: 可能有幫助, 參考看看. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48711
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-05 13:32:35 IP:61.30.xxx.xxx 未訂閱
首先感謝各位大大熱心的幫忙,但小弟實在愚昧,試了好久,實在寫不出來我要的結果,所以把原始程式碼 POST 上來,請各位大大幫小弟看看。    
unit UBASE_FORM;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, DesignEditors, DesignIntf;    type
  TdbButtons = class(TPersistent)
  private
    FdbFirst  : TToolButton;
    FdbPrior  : TToolButton;
    FdbNext   : TToolButton;
    FdbLast   : TToolButton;
    FdbInsert : TToolButton;
    FdbDelete : TToolButton;
    FdbEdit   : TToolButton;
    FdbPost   : TToolButton;
    FdbCancel : TToolButton;
    FdbRefresh: TToolButton;
  published
    property dbFirst  : TToolButton read FdbFirst   write FdbFirst;
    property dbPrior  : TToolButton read FdbPrior   write FdbPrior;
    property dbNext   : TToolButton read FdbNext    write FdbNext;
    property dbLast   : TToolButton read FdbLast    write FdbLast;
    property dbInsert : TToolButton read FdbInsert  write FdbInsert;
    property dbDelete : TToolButton read FdbDelete  write FdbDelete;
    property dbEdit   : TToolButton read FdbEdit    write FdbEdit;
    property dbPost   : TToolButton read FdbPost    write FdbPost;
    property dbCancel : TToolButton read FdbCancel  write FdbCancel;
    property dbRefresh: TToolButton read FdbRefresh write FdbRefresh;
  end;    type
  TBASE_FORM = class(TForm)
  private
    FModuleID: integer;
    FAutoMargeToolBar: TToolBar;        FdbButtons: TdbButtons;
  published
    property ModuleID: integer read FModuleID write FModuleID;
    property AutoMargeToolBar: TToolBar read FAutoMargeToolBar write FAutoMargeToolBar;        property dbButtons: TdbButtons read FdbButtons write FdbButtons;
  end;      TdbButtonsProperty = class(TClassProperty )//是否繼承自 TClassProperty 就可以了?
    function GetAttributes: TPropertyAttributes; override;
    procedure GetProperties(Proc: TGetPropProc); override;
  end;    procedure Register;    var
  BASE_FORM: TBASE_FORM;    implementation    {$R *.dfm}    procedure Register;
begin
  RegisterCustomModule(TBASE_FORM, TCustomModule);
  RegisterPropertyEditor(TypeInfo(TdbButtons), TdbButtons, 'dbButtons', TdbButtonsProperty);//這樣的語法正確嗎?
end;    { TBASE_FORM }    { TdbButtonsProperty }    function TdbButtonsProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paSubProperties];//此處應包含哪些 TPropertyAttributes
end;    procedure TdbButtonsProperty.GetProperties(Proc: TGetPropProc);
begin
  inherited;
  //此處應如何實做?
end;    end.
-------------------------------- 給我一個支點,我可以撐起整個地球
lijenyun
一般會員


發表:3
回覆:19
積分:9
註冊:2003-06-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-05 19:08:53 IP:210.244.xxx.xxx 未訂閱
引言: property Font: TFont read AFont write AFont;
這裡改為property Font;即可
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-06 09:28:11 IP:147.8.xxx.xxx 未訂閱
You need to create all the internal objects in your constructor first, e.g. FdbFirst := TToolButton.Create(self)......
ucdesign2
一般會員


發表:24
回覆:33
積分:11
註冊:2002-10-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-06 17:33:26 IP:211.23.xxx.xxx 未訂閱
試試以下的source code,已經測試過!! >> >>
系統時間:2024-06-15 11:48:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!