Bonjour est il possible de changer le propriétaire d'un objet à la volée , merci d'avance ...
Bonjour est il possible de changer le propriétaire d'un objet à la volée , merci d'avance ...
Assez simplement
Si ton Owner est une forme, que ton Component passé en paramètre est une référence publiée et que tu souhaite ne pas perdre cette référence publiée du composant, bon j'ai bidouillé ça pour une application récemment, c'était plus simple que de me taper toute la modification d'un code basée sur le owner, ça reste une bidouille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure ChangeOwner(const AComponent, AOwner: TComponent); begin if Assigned(AComponent) then if Assigned(AComponent.Owner) then AComponent.Owner.RemoveComponent(AComponent); if Assigned(AOwner) then AOwner.InsertComponent(AComponent); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 procedure ChangeOwnerKeepReference(var AComponent: TComponent; AOwner: TComponent); var SaveComponent: TComponent; Field: ^TComponent; I: Integer; begin if Assigned(AComponent) and Assigned(AComponent.Owner) and Assigned(AOwner) then begin if AComponent.Owner <> AOwner then begin SaveComponent := AComponent; // Mémorise la référence avant qu'elle soit mis à nil AComponent.Owner.RemoveComponent(AComponent); // RemoveComponent mets la référence publiée de AComponent dans son Owner a nil ! AOwner.InsertComponent(SaveComponent); AComponent := SaveComponent; if AComponent is TWinControl then for I := 0 to TWinControl(AComponent).ControlCount - 1 do begin SaveComponent := TComponent(TWinControl(AComponent).Controls[I]); Field := SaveComponent.Owner.FieldAddress(SaveComponent.Name); ChangeOwner(SaveComponent, AOwner); if Field <> nil then Field^ := SaveComponent; end; end; end; end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Partager