Propriedades de componente
04/12/2003
0
a unit abaixo não funciona, já que na propriedade datasource deveria poder escolher algum datasource do formulário e a datafield deveria apresetar os campos do datasource selecionado.
a parte de datasource funciona corretamente, mas a parte de data field não funciona
os campos não aparecem, e nem sequer aparece um drop para poder escolhar algum campo, ele fica apenas esperando um string eu tenho que digitar na mão o campo.
mas se eu retirar o número 2 do NOME da propriedade funciona corretamente, a propriedade datafield começa a exibir os campos do datasource selecionado.
alguem sabe me dizer o pq?????
unit CustomEdit1MM;
interface
uses
SysUtils, Classes, DBCtrls, Controls, StdCtrls, db, dbclient, dxDBELib, Mask;
type
TCustomEditMM = class(TCustomEdit)
private
fdatalink : TFieldDataLink;
fdatalink2: TFieldDataLink;
function GetDataField2: string;
function GetDataSource: TDataSource;
procedure SetDataField2(const Value: string);
procedure SetDataSource(const Value: TDataSource);
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DataField2: string read GetDataField2 write SetDataField2;
// property text;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Standard´, [TCustomEditMM]);
end;
{ TCustomEditMM }
constructor TCustomEditMM.Create(AOwner: TComponent);
begin
inherited;
fdatalink := TFieldDataLink.Create;
fdatalink2:= TFieldDataLink.Create;
end;
function TCustomEditMM.GetDataField2: string;
begin
Result := FDataLink.FieldName;
end;
function TCustomEditMM.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
procedure TCustomEditMM.SetDataField2(const Value: string);
begin
FDataLink.FieldName := Value;
end;
procedure TCustomEditMM.SetDataSource(const Value: TDataSource);
begin
if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
FDataLink.DataSource := Value;
if Value <> nil then Value.FreeNotification(Self);
end;
end.
Devilch
Posts
05/12/2003
Rafael Heise
è isso ae!
28/09/2005
Steve_narancic
28/09/2005
Rafael Heise
Dai teria que dar uma olhada nos .pas que estão dentro de uma pasta do Delphi, que são os fontes do biblioteca VCU. Assim de cabeça eu não me lembro, mas é preciso implementar da mesma forma que esses componentes.
Eu sei também que quando você cria uma propriedade com aquele ´carinha especial´, que abre uma janela ou lista os campos, você pode definir (com um certo código) que toda vez que aparecer uma propriedade com aquele nome ela deve se comportar daquela maneira. Mas mesmo pra isso, é preciso olhar a biblioteca do próprio delphi, porque também não me lembro como se faz, mas sei que em uma revista da ClubeDelphi sai uma matéria sobre isso, acho que era algo como Componentes Avançados, ou algo nesse sentido!
valeu!
Clique aqui para fazer login e interagir na Comunidade :)