// Je ne sais pas comment poser la question mieux ... //inspecteur d'objets ne concerne pas les propriétés modifiées
J'INSCRITS nouvelle classe de mon (tDISPLAY). A l'intérieur de cette classe se trouve un objet (TRectangle - aussi le mien), qui est créé dans le constructeur de TCustomDisplay - predecestor de TDisplay. Lorsque je mets TDisplay sur le formulaire, je peux modifier toutes les propriétés publiées de mes deux objets (TDisplay, TRectangle) comme d'habitude, mais seul TDisplay est configuré en fonction de l'inspecteur d'objets. TRectangle reste dans ses valeurs par défaut (gauche 0, Haut 0 droite 30, bas 20), malgré cela, que ces propriétés sont définies à gauche 0, Top 0 droite 100, bas 100.
Que dois-je vérifier à le faire fonctionner correctement?
Thanx
P.S Lorsque les propriétés définies dans l'inspecteur d'objets sont effectivement chargés dans un objet?
Voici l'exemple de code ("short one"). Il n'est pas « propre » alors s'il vous plaît, être tolérant ...
TRectangle = class(TComponent)
private
FOnAdjustContent: TNotifyEvent;
FLeft, FRight, FBottom, FTop:Integer;
FoutLeft, FoutRight, FoutBottom, FoutTop:integer;
FinLeft, FinRight, FinBottom, FinTop:integer;
FAligning:TAligning;
FAdjustContent:TAdjustContent;
FAnchors:TAnchors;
FList:Tlist;
FRectangleContainer:TRectangleContainer;
FParentRectangle:TRectangle;
FdLeft, FdTop, FdBottom, FdRight: integer;
// function FindParent(AName:string):TRectangle;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy; override;
procedure Assign(Source : TPersistent); override;
published
property AdjustContent:TAdjustContent read FAdjustContent write SetAdjustContent;
property Aligning:TAligning read FAligning write SetAlign;
property Anchors:TAnchors read FAnchors write SetAnchors;
.
.
.
end;
TTextObject = class (TRectangle)
public
procedure Assign(Source : TPersistent); override;
published
property AlignmentInCell:integer read FAlignmentInCell write FAlignmentInCell;
property Brush:TBrush read FBrush write FBrush;
property CanMove:Boolean read FCanMove write FCanmove;
.
.
.
end;
TCustomDisplay = class (TCustomControl)
private
FRootTextObject:TTextObject;
procedure SetRootTextObject(Value:TTextObject);
protected
public
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
procedure Assign(Source:TPersistent); override;
published
property RootTextObject:TTextObject read FRootTextObject write SetRootTextObject;
end;
TDesignDisplay = class (TCustomDisplay)
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
public
procedure Paint; override;
end;
TDisplay = class (TCustomDisplay)
private
function GetFirstMovable: TTextObject;
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
public
procedure Paint; override;
end;
procedure Register;
begin
RegisterComponents('My Palette', [TDisplay, TDesignDisplay]);
end;
constructor TCustomDisplay.Create(AOwner:TComponent);
var i:integer;
begin
inherited;
FRootTextObject:=TTextObject.Create(Self);
// ShowMessage(FRootTextObject.Name);
// FRootTextObject.Name:='Root';
FRootTextObject.OnAdjustContent:=DoAdjustContent;
// FRootTextObject.Right:=Width;
// FRootTextObject.Bottom:=Height;
FRootTextObject.CanMove:=False;
TabStop:=True;
end;
procedure TCustomDisplay.SetRootTextObject(Value:TTextObject);
begin
FRootTextObject.Assign(Value);
end;
procedure TRectangle.Assign(Source: TPersistent);
var ARectangle:TRectangle;
begin
if Source is TRectangle then
begin
ARectangle:=Source as TRectangle;
// Name:=ARectangle.Name;
// FRect:=Rectangle.Rect;
FLeft:=ARectangle.Left;
FTop:=ARectangle.Top;
FRight:=ARectangle.Right;
FBottom:=ARectangle.Bottom;
FoutLeft:=ARectangle.outLeft;
FoutTop:=ARectangle.outTop;
FoutRight:=ARectangle.outRight;
FoutBottom:=ARectangle.outBottom;
FinLeft:=ARectangle.inLeft;
FinTop:=ARectangle.inTop;
FinRight:=ARectangle.inRight;
FinBottom:=ARectangle.inBottom;
end
else
inherited;
end;
procedure TTextObject.Assign(Source : TPersistent);
var ATextObject:TTextObject;
begin
inherited;
if Source is TTextObject then
begin
ATextObject:=Source as TTextObject;
AlignmentInCell:=ATextObject.AlignmentInCell;
AttachedWP:=ATextObject.AttachedWP;
Brush.Assign(ATextObject.Brush);
Caption:=ATextObject.Caption;
Font.Assign(ATextObject.Font);
Painting.Assign(ATextObject.Painting);
Pen.Assign(ATextObject.Pen);
RichString:=ATextObject.RichString;
StateDrawing:=ATextObject.StateDrawing;
TabState:=ATextObject.TabState;
TextFormat:=ATextObject.TextFormat;
Thickness:=ATextObject.Thickness;
Transparent:=ATextObject.Transparent;
Value:=ATextObject.Value;
WPname:=ATextObject.WPname;
end;
end;
J'ai effectué mon code pour ressembler à votre code. Ça ne fonctionne pas bien. La différence est que, dans le constructeur de TRectangle, j'ai défini Fright: = 30, Fbottom: = 20. Et il utilise toujours ces valeurs ... Je suppose que l'instruction Showmessage (Value.Right) dans la procédure SetRectangle devrait afficher 100 de 30. Dans mon cas, il ne ... Merci beaucoup de toute façon. Ah, ce qui est très intéressant: TRectangle est TComponent. Si le nom du Trectangle diffère de celui de l'inspecteur d'objets. SetRectangle n'est pas exécuté ... – lyborko
Pouvez-vous fournir un exemple de code qui reproduit votre problème? – vcldeveloper
OK ... Je vais essayer ... Je l'ai mis dans les réponses ... – lyborko