Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
1 mars 2007 à 16:50
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
2 mars 2007 à 18:46
salut a tous, cette question me semblait simple, et pourtant, je n'arrive pas a editer un record dans l'inspecteur d'objet d'un composant que j'ai créé.
et quand je pose ce composant, la propriete Vect n'apparait pas dans l'inspecteur d'objet !!!
Dans le cas ou ce ne soit pas possible, peut etre qu'en implementant un editeur de propriete (comme celui de la TStringList par exemple), cela fonctionnerai???
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 1 mars 2007 à 22:30
c'est la ou avoir lu le guide du concepteur de composants est utile.
les type structuré ou tableau ne sont pas visible dans l'inspecteur d'objet, il faut pour cela developper un editeur de propriété (TPropertyEditor) qui permet a l'inspecteur d'objet d'editer les propriétés de ce type.
donc tu as bien repondus toi meme a la question :)
sinon il y'a egalement une autre possibilitée c'est celle de créer une classe TPersistent qui ressemblerais a un TRect
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 1 mars 2007 à 23:06
j'ai effectivement lu le guide du concepteur de composant il y a quelques temps, mais je ne l'avais pas sous la main, et ne me rappelais pas qu'il y etait dit que l'on ne pouvait pas faire de record published.
je vais donc me pencher sur le probleme des property editors, et aller voir a quoi ressemble le TRect.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 2 mars 2007 à 18:46
en fait, ça vient que l'inspecteur d'objet ne peu pas deviner ce qu'il y a dans un record, object ou tableau, normal puisqu'aucun des trois de possede d'enumerateur de propriété ou de donnée...
il faut donc le developper soit meme.
pour ta classe tu peu faire ça :
TEVector = class(TPersistent)
private
fX : extended;
fY : extended;
fZ : extended;
fOnChange: TNotifyEvent;
fControl : TControl;
procedure SetExtended(index : integer; val : extended);
protected
procedure Change; virtual;
property Control : TControl read FControl;
property OnChange : TNotifyEvent read fOnChange write fOnChange;
public
constructor Create(Control : TControl); virtual;
procedure AssignTo(Dest : TPersistent); override;
procedure Assign(Source : TPersistent); override;
published
property X : extended index 0 read fX write SetExtended;
property Y : extended index 1 read fY write SetExtended;
property Z : extended index 2 read fZ write SetExtended;
end;
constructor TEVector.Create(Control: TControl);
begin
inherited Create;
fControl := Control;
fX := 0;
fY := 0;
fZ := 0;
end;
procedure TEVector.Change;
begin
if Assigned(fOnChange) then
fOnChange(Self);
end;
procedure TEVector.AssignTo(Dest: TPersistent);
begin
if Dest is TEVector then
begin
with TEVector(Dest) do
begin
fX := Self.fZ;
fY := Self.fY;
fZ := Self.fX;
Change;
end;
end
else
inherited AssignTo(Dest);
end;
procedure TCustomBarSettings.Assign(Source : TPersistent);
begin
if Source is TEVector then
begin
with TEVector(Source) do
begin
AssignTo(Self);
end;
end
else
inherited Assign(Source);
end;
procedure TEVector.SetExtended(index : integer; val : extended);
begin
case index of
0: if fX <> Val then
begin
fX := Val;
Change;
end;
1: if fY <> Val then
begin
fY := Val;
Change;
end;
2: if fZ <> Val then
begin
fZ := Val;
Change;
end;
end;
end;