디자인 타임 구성 요소로 등록한 사용자 지정 TClientDataset을 만들었습니다. 작성 방법 사용자 지정 TClientDataSet을 등록했지만 생성자에서 필드가 표시되지 않습니다.
TMyDataset = class(TClientDataset)
public
constructor Create(AOwner : TComponent); override;
end;
는,이 데이터 세트의 필드를 만든
implementation
constructor TMyDataset.Create(aOwner : TComponent);
var
lField : TStringField;
begin
inherited Create(aOwner);
lField := TStringField.Create(Self);
lField.FieldName := 'NAME';
lField.Dataset := Self;
Fields.Add(lField);
end;
같은
procedure Register;
begin
RegisterComponents('Queries', [TMyDataset]);
end;
같은 구성 요소를 등록하고, 형태 상 TMyDataset 떨어지고, 내가 이 데이터 집합의 필드 컬렉션에 NAME
필드가 표시되지 않습니다..
내 목표는 디자인 타임에 사용할 수 있도록 이러한 미리 정의 된 쿼리를 정의하고 등록하는 것입니다.
이 구성 요소를 사용하는 모든 사용자가이 데이터 집합의 필드를 다시 정의하지 못하도록하고 싶지만 시각적 편집기에서 cxGrid 또는 그와 같은 (자동 열 작성 등)를 계속 바인드 할 수는 있습니다.
또한이 데이터 집합은 다른 데이터 집합의 자리 표시 자입니다. Fields 컬렉션을 바인딩 할 수있는 다른 시각적 편집자에게만 Fields 컬렉션을 제공하는 역할을합니다.
내 질문은 :
내가 비주얼 편집기에서 생성자에서 만든 필드를 볼 수없고, 나는 그것이 눈에 보이는 방법을 만들 수 있습니다 왜?
TField의 사용자 수정 사항을 DFM에 저장하지 않도록 구성 요소의 동작을 재정의하려면 어떻게해야합니까?
uses
SysUtils, Classes, DB, DBClient;
type
TMyDataSet = class(TClientDataSet)
private
FMyStringField : TStringField;
function GetMyStringField: TStringField;
protected
public
constructor Create(AOwner : TComponent); override;
property MyStringField : TStringField read GetMyStringField;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Data Access', [TMyDataSet]);
end;
{ TMyDataSet }
constructor TMyDataSet.Create(AOwner: TComponent);
begin
inherited;
FMyStringField := TStringField.Create(AOwner);
FMyStringField.FieldName := 'NAME';
FMyStringField.Size := 80;
FMyStringField.DataSet := Self;
end;
function TMyDataSet.GetMyStringField: TStringField;
begin
Result := FMyStringField;
end;
당신은 쉽게 당신의 코드가 작동하기를 수정해야하는 방법을 식별 할 수 있어야한다 :
다음은 TMyDataSet 필드 편집기에서 보여주는NAME
필드를 포함하여, 나를 위해 잘 작동 당신에게
내가 필드의 AOwner는 데이터 집합의 소유자 여야한다는 생각을, 그게 내가 내 코드 – Ludo
를 수정할 때 일을 무엇 감사합니다 내가 DFM의 변경을 방지하는 방법을 알고 계십니까 사용자가? (필드 추가/수정 금지)? – Ludo
"수정을 막아줍니다 ..."근사하지는 않지만,이 q에 대한 SertacAkyuz의 답변은 Delphi가 내 코드를 사용하여 중복 된 '이름'필드에 대해 불평한다는 사실과 관련이 있습니다. http : //stackoverflow.com/questions/38293072/how-to-correctly-stream-a-tcollection-property-of-a-subcomponent-eg-the-colum – MartynA