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

ReadComponent 讀不出 Left 與 Top 屬性值

答題得分者是:william
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-04 14:07:13 IP:202.39.xxx.xxx 未訂閱
小弟寫了一個複合式的 TCamera Component, 程式碼如下:
type
  TCameraImage = class(TImage)
  private
    procedure WMRBUTTONDOWN(var Message: TWMRBUTTONDOWN); message WM_RBUTTONDOWN;
  end;    type
  TCamera = class(TButton)
  private
    FImage: TCameraImage;
    FNameLabel: TTntLabel;
  published
    property Image: TCameraImage read FImage write FImage;
    property NameLabel: TTntLabel read FNameLabel write FNameLabel;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;    // ...
{ TCameraImage }    procedure TCameraImage.WMRBUTTONDOWN(var Message: TWMRBUTTONDOWN);
begin
  inherited;
  if Assigned(Owner) and (Owner is TWinControl) then
    TWinControl(Owner).SetFocus;
end;    { TCamera }    constructor TCamera.Create(AOwner: TComponent);
begin
  inherited;      Height := 75;
  Tag := 0;
  Width := 75;      FImage := TCameraImage.Create(AOwner);
  FImage.Align := alClient;
  FImage.Parent := Self;
  FImage.Stretch := True;      FNameLabel := TTntLabel.Create(AOwner);
  FNameLabel.Parent := Self;
  FNameLabel.Transparent := True;
  FNameLabel.BringToFront;
end;
小弟在 Form1 中動態 Create 了一個 TCamera 後 這個 TCamera 的 Owner 是 Form1, Parent 是一個 TPageControl 上的一 TTabSheet 最後在 WriteComponent(Form1) 中記下了 Form1 中的每個 Component 小弟的問題是小弟可以看到記錄檔中有記下了 TCamera.NameLabel 的 Left 與 Top 屬性值 但再次要以 ReadComponent(Form1) 方式讀出時這 Left/Top 屬性時就不成功了 (讀出的值皆為 0) 請問一下大家可能的原因為何?
william
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-04 15:22:26 IP:147.8.xxx.xxx 未訂閱
Too lazy to code , > < face='Lucida Console'>http://pywong.hk.st http://www.lazybones.ca
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-04 15:40:32 IP:202.39.xxx.xxx 未訂閱
小弟剛修改了做法, 將 FNameLabel 與 FImage 的 Owner 都設為 nil 了 問題是出在 constructor TCamera.Create(AOwner: TComponent); 這邊吧 在 TMemoryStream.ReadComponent(Form1) 時, 已經將 NameLabel 與 CameraImage 讀進來了, 可是 constructor TCamera.Create 這裡又 create 出另一個 NameLabel 與 CameraImage 於是每多 WriteComponent / ReadComponent 一次 NameLabel 與 CameraImage 就又多一個 最後小弟將在 TCamera 多設了 NameLabelCaption、NameLabelLeft、NameLabelTop 三個屬性給 NameLabel 用就可以了 不過得在異動 NameLabel 的 Caption/Left/Top 時,  同時將值指定給 TCamera 的 NameLabelCaption/NameLabelLeft/NameLabelTop 三個屬性, 似乎是不好的做法 謝謝 >
william
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-04 15:51:09 IP:147.8.xxx.xxx 未訂閱
Typo >> >>, face='Lucida Console'>http://pywong.hk.st http://www.lazybones.ca
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-04 16:22:45 IP:202.39.xxx.xxx 未訂閱
Owner 要設為 TCamera 一開始也是這麼想 但發現 WriteComponent(Form1) 時發現卻沒存到 FCameraImage 與 FNameLabel 所以就把它的 Owner 設為 Form1 了. > 由於 >
系統時間:2024-05-17 13:27:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!