1

我有课:

TcvDbedit = class(TCustomMaskEdit)
...
private
  ...
  fQuery: TQuery;
  ...
protected
  ...
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
  ...
published
  ...
  property DataQuery: TQuery read fQuery write fQuery;
  ...

通过这种方式,我将 TQuery 作为属性,并且可以更改属性查询。我需要其他东西来更改 tQuery 的属性并将它们保存在 dfm 中。我不希望 TQuery 在表单上可见。实际上我使用 TFDQuery。我怎样才能做到这一点?

4

2 回答 2

3

不要将您的 fQuery 公开为 TcvDbEdit 的公共成员,而是公开您需要的属性 -

interface

TcvDbedit = class(TCustomMaskEdit)
private
  fQuery: TQuery;
  procedure SetSQL(AValue : String);
  function GetSQL;
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
published
  property SQL : TStrings read GetSQL write SetSQL;
end;

implementation

constructor TcvDbedit.Create(AOwner : TComponent);
begin
  fQuery = TQuery.Create(self);
end

destructor TcvDbedit.Destroy;
begin
   fQuery.Free;
end;

procedure TcvDbedit.SetValue(AValue : String);
begin
  fQuery.SQL.Assign(AValue);
end;

function TcvDbedit.GetSQL : TStrings;
begin
  return fQuery.SQL;
end;
于 2015-01-13T13:14:43.740 回答
1

也许你需要 SetSubComponent。

于 2015-01-13T13:01:56.987 回答