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;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager