Affectation parentale d'un composant créé dynamiquement sur image [Résolu]

Messages postés
641
Date d'inscription
dimanche 13 août 2006
Dernière intervention
13 décembre 2018
- - Dernière réponse : cs_Jean_Jean
Messages postés
641
Date d'inscription
dimanche 13 août 2006
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
260
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
4 mars 2016
5
3
Merci
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...
@+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_yanb
Messages postés
260
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
4 mars 2016
5
3
Merci
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 @+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_yanb
Messages postés
641
Date d'inscription
dimanche 13 août 2006
Dernière intervention
13 décembre 2018
2
0
Merci
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
Commenter la réponse de cs_Jean_Jean
Messages postés
641
Date d'inscription
dimanche 13 août 2006
Dernière intervention
13 décembre 2018
2
0
Merci
C'est bizarre, lorsque j'avais fait :

MaListBox.Parent := TForm1; La listeBox écrivait derrière l'image de fond posée sur Form1.

Mais après avoir réessayé après, ça marche à nouveau. J'ai écris un évènement OnClick entre temps... Voici mon essai :

Ici

@+

Jean_Jean
Commenter la réponse de cs_Jean_Jean
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
15
0
Merci
Il faut nécessairement un conteneur :

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

cantador
Commenter la réponse de cs_cantador
Messages postés
260
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
4 mars 2016
5
0
Merci
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...
@+
Commenter la réponse de cs_yanb
Messages postés
641
Date d'inscription
dimanche 13 août 2006
Dernière intervention
13 décembre 2018
2
0
Merci
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
Commenter la réponse de cs_Jean_Jean
Messages postés
641
Date d'inscription
dimanche 13 août 2006
Dernière intervention
13 décembre 2018
2
0
Merci
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
Commenter la réponse de cs_Jean_Jean

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.