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

請問怎樣可以弄一個property包著多個property

尚未結案
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-05 12:47:59 IP:218.103.xxx.xxx 未訂閱
想請問一下 我知道我不太懂怎麼問這個問題 如果說得不清楚請多多包含 我是想說 property 怎樣寫到.. 有一個加的符號... 就是說 比如 property size : <- 但是size 是包含 width , height ,...etc 我真的不知道怎樣問 不好意思 如果不懂我問什麼請告訴我盡力的回答 謝謝大大
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-05 13:28:55 IP:203.69.xxx.xxx 未訂閱
像這樣的宣告
  private
    { Private declarations }
    FRect: TRect;
  public
    { Public declarations }
  published
    property MyRect: TRect read FRect write FRect;
    ...      end;
就可以這樣用 MyRect.Left := 100; MyRect.Top := 20; ... 要學怎樣 去做出你想要的 property 最快的方式 就是參考 Delphi 所提供的 Source... 發表人 - malanlk 於 2005/09/05 13:29:58
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-05 16:02:02 IP:220.139.xxx.xxx 未訂閱
引言: 我是想說 property 怎樣寫到.. 有一個加的符號... 就是說 比如 property size : <- 但是size 是包含 width , height ,...etc
如果你想建一個可供物件檢視器處理的結構化的prperty的話 首先你必須為該結構化prperty建立一個類別(必須從TPersistent繼承下來 才具備永續儲存的能力) 接著在你設計的元件上定義該屬性,特別注意的事由於該屬性是類別 因此 你必須在你設計物件的建構者(Constructor) 中事先建立 解構者(Destructor)中釋放 架構範例如下
unit Component1;    interface    uses
  SysUtils, Classes;    type
  //用來處理Size結構的類別
  TSizeClass = Class(TPersistent)
  private
    FHeight: Integer;
    FWidth: Integer;
    procedure SetHeight(const Value: Integer);
    procedure SetWidth(const Value: Integer);      published
   property Width : Integer read FWidth write SetWidth;
   property Height : Integer read FHeight write SetHeight;
  end;      //你設計的元件
  TComponent1 = class(TComponent)
  private
    FSize: TSizeClass;
    procedure SetSize(const Value: TSizeClass);      public        constructor Create(AOwner:TComponent);override;
    destructor Destroy;override;
  published
     property Size :TSizeClass read FSize write SetSize;      end;    procedure Register;    implementation    procedure Register;
begin
  RegisterComponents('Samples', [TComponent1]);
end;    { TSizeClass }    procedure TSizeClass.SetHeight(const Value: Integer);
begin
  FHeight := Value;
end;    procedure TSizeClass.SetWidth(const Value: Integer);
begin
  FWidth := Value;
end;    { TComponent1 }    constructor TComponent1.Create(AOwner: TComponent);
begin
  inherited;
  FSize :=  TSizeClass.Create;
end;    destructor TComponent1.Destroy;
begin
  FreeAndNil(FSize);
  inherited;
end;    procedure TComponent1.SetSize(const Value: TSizeClass);
begin
  FSize := Value;
end;    end. 
混心雜欲 棄修身~唉
------
唉~
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-06 11:51:45 IP:218.103.xxx.xxx 未訂閱
謝謝speedup 的回答 問題是得到解決 但想多口問一下 為什麼 -> (必須從TPersistent繼承下來 才具備永續儲存的能力) 我還是不太了解delpi 的架構 謝謝 也謝謝malanlk
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-12 11:08:00 IP:220.139.xxx.xxx 未訂閱
引言: 謝謝speedup 的回答 問題是得到解決 但想多口問一下 為什麼 -> (必須從TPersistent繼承下來 才具備永續儲存的能力)
永續儲存(Persistent )是指將物件的狀態儲存起來(例如將設計期的屬性存在 DFM中),新一代的程式語言基本上都會實作此依機制(例如Java 的Serialization) 而Delphi在VCL架構中從TPersistent中實作此一機制,也因此Delphi的元件(TComponent 繼承至TPersistent)具備將屬性狀態儲存起來的能力 由此可見雖然VCL 已經推出近十年了但其設計理念絕對不輸給現今的 Java /.Net 混心雜欲 棄修身~唉
------
唉~
系統時間:2024-05-19 14:14:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!