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

各位大大有個元件設計問題請教(有關屬性的)

尚未結案
fcfa2x
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-26 10:38:25 IP:202.145.xxx.xxx 未訂閱
各位大大有個元件設計問題請教 我自行設計一個元件如下所示 TStorageMessage3 = class(TComponent) private FConnection: TADOConnection; protected public published property Connection: TADOConnection read GetConnection write setConnection; end; 在上面我設計了一個TADOConnection類型的屬性,此元件我也安裝到元件盤上 ,之後我新建一個專案,再Form上拉了一個TADOConnection的元件(名稱設為adoConn1)及上面我自行開發的元件(名稱設為AAA),並且把AAA的Connection屬性,指定為adoConn1然後存檔,這時如果我把adoConn1刪除,則會出現錯誤訊息,感覺上是AAA元件在讀取Connection屬性時出錯,請問各位大大有沒有解決方法?
fcfa2x
一般會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-26 10:56:44 IP:202.145.xxx.xxx 未訂閱
以上的問題有打錯,我重新KEY IN 如下 我自行設計一個元件如下所示 TStorageMessage3 = class(TComponent) private FConnection: TADOConnection; protected public published property Connection: TADOConnection read FConnection write FConnection; end; 在上面我設計了一個TADOConnection類型的屬性,此元件我也安裝到元件盤上 ,之後我新建一個專案,再Form上拉了一個TADOConnection的元件(名稱設為adoConn1)及上面我自行開發的元件(名稱設為AAA),並且把AAA的Connection屬性,指定為adoConn1然後存檔,這時如果我把adoConn1刪除,則會出現錯誤訊息,感覺上是AAA元件在讀取Connection屬性時出錯,請問各位大大有沒有解決方法?
hagar
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-26 11:23:32 IP:202.39.xxx.xxx 未訂閱
什麼地方出現 AV 的? 您可在存取 FConnection 這個變數時加個如下的判斷:
begin
  if Assigned(FConnection) then
  begin
    // ...
  end;
end;
-- hagar.
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-26 13:54:31 IP:220.228.xxx.xxx 未訂閱
unit Test;    interface    uses Classes, ADODB;    type
  TStorageMessage3 = class(TComponent)
  private
    FConnection: TADOConnection;
  protected
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
  public
  published
    property Connection: TADOConnection read FConnection write FConnection;
  end;
procedure Register;    implementation    procedure Register;
begin
  RegisterComponents('SC', [TStorageMessage3]);
end;    { TStorageMessage3 }    procedure TStorageMessage3.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (FConnection <> nil) and
    (AComponent = Connection) then Connection := nil;
end;    end.
請加上Notification這個Method即可! Ian
wameng
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-26 15:11:10 IP:61.222.xxx.xxx 未訂閱
為何不模仿 TADODataset 。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-26 19:53:03 IP:210.68.xxx.xxx 未訂閱
fcfa2x您好: 提醒您PO程式碼的方式請參考版規說明 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991
funs
一般會員


發表:0
回覆:2
積分:0
註冊:2005-04-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-27 22:49:11 IP:221.7.xxx.xxx 未訂閱
直接write FConnection不好: TStorageMessage3 = class(TComponent) private FConnection: TADOConnection; procedure SetConnection(const value:TADOConnection) ; protected public published property Connection: TADOConnection read Connection write SetConnection; end; procedure SetConnection(const value:TADOConnection) ; begin FConnection := Value ; end ;
funs
一般會員


發表:0
回覆:2
積分:0
註冊:2005-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-27 22:50:35 IP:221.7.xxx.xxx 未訂閱
直接write FConnection不好: TStorageMessage3 = class(TComponent) private FConnection: TADOConnection; procedure SetConnection(const value:TADOConnection) ; protected public published property Connection: TADOConnection read Connection write SetConnection; end; procedure SetConnection(const value:TADOConnection) ; begin FConnection := Value ; end ;
fcfa2x
一般會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-28 09:17:21 IP:202.145.xxx.xxx 未訂閱
謝謝各位大大的解答,我已經從VCL原始碼中找到答案了,但還是感謝各位大大的熱心
系統時間:2024-07-01 16:19:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!