Affectation parentale d'un composant créé dynamiquement sur image

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 24 mai 2012 à 12:05
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 25 mai 2012 à 14:57
Yo les delphistes,

Si je pose un composant TListBox sur une image, cela va de soi. Par défaut, la propriété Parent du TListBox se fait en toute transparence pour le programmeur.

Par contre si j'utilise un TlistBox créé dynamiquement, il me faut définir la propriété parent du composant créé.

si je fais :

TMaListBox.Create(Self);
With MaListBox do
begin
  ...
  Parent := Image1;
  ... 
end;


Le compilateur me génère une erreur TWinControl et TImage: logique.
j'utilise alors une astuce en prenant un autre composant qui est déposé sur l'image et ça marche.

With MaListBox do
begin
  ...
  Parent := Panel1.Parent;
  ... 
end;


Mais je préfèrerai une écriture plus propre. J'ai pas trouvé...

Merci aux puristes qui ont une idée.

Jean_Jean

7 réponses

cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 13
24 mai 2012 à 12:45
Salut,
pour moi tu ne peux pas avoir un TImage comme parent
Ton ListBox aura toujours un TWinControl comme parent, donc si tu pose un TListBox sur un TImage son parent est un TWinControl donc la Form par exemple...
Après quand tu pose ton TPanel, son parent est pour moi pas TImage mais la Form...
Un petit test avec un bouton par exemple pour être sur ShowMessage(Panel1.Parent.Name);
Après c'est mon avis personnel...
@+
3
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 13
25 mai 2012 à 11:44
Salut,
petite précision sur le LBT.Free, c'est carrément vrai, création, suppression mais ici il me semble que le parent le libère à la fermeture...
Quand je te parle de génération d'erreur à la fermeture c'est que j'ai vu dans le code le style à lbOwnerDrawFixed et ayant déjà utiliser ce genre de style avec les composants créer dynamiquement, il me semblait avoir eu un problème à la libération avec les styles différent du lbStandard...et après avoir fait l'essai ce matin avec ton code j'ai effectivement un message d'erreur ! Donc pour ne pas avoir de message d'erreur à la libération, j'utilisais une petite pirouette pourri en repassant le style à lbStandard dans le destructor...
Ah oui et quand je mettais un composant non créée dynamiquement qui avait la même propriété style sur la form je n'avais plus le problème...
Je n'avais pas regardé plus en profondeur à l’époque pour trouver le pourquoi du comment...
Mais bon apparemment toi tu n'as pas le problème
Bon courage @+
3
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
24 mai 2012 à 13:00
Yo,

Si je comprends bien, j'ai pas d'autre solution que d'utiliser mon astuce!

Je suis sûr qu'on peut référencer ça par autre chose que mon TPanel...

A+

Jean_Jean
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
24 mai 2012 à 15:35
Il faut nécessairement un conteneur :

- TForm
- TPanel
- TGroupBox
- TFrame
- TTabControl
- TPageControl
- ?
et j'en oublie certainement..

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 13
24 mai 2012 à 17:01
J'ai regardé ton essai...
Tu mets LBT.Free; dans FormClose, ben pas utile il me semble, et génère peut-être même une erreur à la fermeture...
Après pour que ta TTransparentListBox soit derrière l'image c'est que l'image a été redessinée et pas ton TTransparentListBox ou...
Pour être sûr de ce que je pense, ajouter un Image1.Refresh dans ton LBTclic
Voilà peut-être une piste...
@+
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
24 mai 2012 à 17:55
Merci yan pour ta remarque! Je vais y regarder...

A parir du moment ou tu créer un objet toi-même tu dois le détruire. Mon code ne génère pas d'erreur à la fermeture...

Ton commentaire aurait mieux sur le code qu'ici mais pas grave!

Jean_Jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
25 mai 2012 à 14:57
Si yanb, j'ai eu exactement le même prob que toi!
Je confirme ton dernier post

Je répond la suite des commentaires sur le code c'est mieux je trouve pour d'éventuels autres delphistes...

Bien à toi


Jean_Jean
0