全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1263
推到 Plurk!
推到 Facebook!

後代自製元件可以隱藏父代元件的屬性嗎?

答題得分者是:Mickey
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-14 12:44:48 IP:203.67.xxx.xxx 未訂閱
我自製一個元件(Component)繼承自TQuery 可是卻不想讓他的SQL屬性出現 父代(TQuery)原屬性如下 published property SQL: TStrings read FSQL write SetQuery; 有辦法嗎?? 謝謝
Mickey
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-14 22:40:51 IP:218.32.xxx.xxx 未訂閱
sanhang 你好: 我想...你應該考慮繼承自 TDBDataSet, 或新 Class 將 TQuery 包入 Private 區段, 想 Published/Public 的才放出來.
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-14 23:56:43 IP:203.67.xxx.xxx 未訂閱
引言: sanhang 你好: 我想...你應該考慮繼承自 TDBDataSet, 或新 Class 將 TQuery 包入 Private 區段, 想 Published/Public 的才放出來.
我剛開始規劃的元件如下
unit Employee;
interface
uses
  SysUtils, Classes, DB, DBTables;
type
  TEmployee = class(TQuery)
  private
    FEmpNO : string;
    procedure SetEmpNO(Value:string);
  protected
    { Protected declarations }
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property EmpNO : string read FEmpNO write SetEmpNO;
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('CustomComponents', [TEmployee]);
end;
{ TEmployee }
constructor TEmployee.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Self.SQL.Clear;
  Self.SQL.Add('Select * From Employees Where Employee_Number=:EMPNO');
  Self.Prepare;
end;
destructor TEmployee.Destroy;
begin
  inherited Destroy;
end;
procedure TEmployee.SetEmpNO(Value: string);
begin
  FEmpNO := Value;
  Self.Close;
  Self.ParamByName('EMPNO').AsString := FEmpNO;
  Self.Open;
end;
end.
 
如果我要繼承TDBDataSet, 我看了一下 那我好像還要處理FSQL(TStringList), FParams(TParams) 以及跟資料庫的連線 FDataLink(TQueryDataLink) 不過有很多地方看不太懂, 可否請前輩指點一下從TDBDataSet實做上述功能 要從哪邊著手呢?? 謝謝
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-15 00:17:04 IP:203.204.xxx.xxx 未訂閱
sanhang 你好     元件的屬性、方法在繼承後只能從可見低的往可見度高的方向開放,卻無法往可見度低的方向隱藏。 所以你的需求,真的只能如Mickey大大所云,繼承自TQuery的父類別(當TQuery的兄弟)TDBDataSet。 要從哪邊著手呢?很簡單呀!只要複製TQuery的元件程式碼,把類別名稱改成你要的,這樣你就有了一個與TQuery一模一樣的元件啦!然後你再將SQL屬性的宣告位置移到Private 或你認為適當的位置,一切就OK了。 PS:不懂為何不想讓SQL屬性出現? _______________________________________ 深藍的魚,祝您好運..........連連
Mickey
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-15 00:23:36 IP:218.32.xxx.xxx 未訂閱
DBTable.pas 中 TQuery 的相關 Source Code 複製一下.    將 SQL Property 拿掉.    Note: Chance36 兄......辛苦了......晚安. 發表人 -
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-15 00:36:37 IP:203.67.xxx.xxx 未訂閱
引言: DBTable.pas 中 TQuery 的相關 Source Code 複製一下. 將 SQL Property 拿掉. Note: Chance36 兄......辛苦了......晚安. 發表人 - >< face="Verdana, Arial, Helvetica"> 感謝Mickey兄跟Chance36 兄的指教
系統時間:2024-11-22 12:36:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!