Créer composant

Résolu
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 26 juil. 2006 à 16:07
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 2 août 2006 à 10:57
Je crée un petit composant sur la base d'un TPanel. Sur ce panel sont
posés différents controles dont un bouton (avec une petite croix) qui
est censé libérer le composant.

1) Est-ce possible ? (j'ai quelques doutes...)

2) Je n'arrive pas à lier le OnClick de ce bouton au destructor sans
avoir d'erreur abstraite ou de violation d'accès. Est-ce normal ? sinon
comment puis-je faire ?

Merci...

Simon

31 réponses

sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
28 juil. 2006 à 09:54
Désolé Japee, mais ton code n'a pas pu m'aider  , parce que le "BTNFreeOnClick(Sender
: TObject);" fait appel à un MyPanel créé sur la form... et non au
"Self.free" (Mais bon, c'est pas grave, merci quand même !)



destructor TMyPanel.Destroy;
begin
     EDValeur.Free;
     BTNFree.Free;
     inherited destroy;
end;



procedure TMyPanel.BTNFreeOnClick(Sender : TObject);
begin
  //  ???
  MyPanel.Free; // <- aucun problème, MyPanel est libéré
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
  MyPanel := TMyPanel.Create(self);
  MyPanel.Parent := Self;
end;




Simon
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
28 juil. 2006 à 09:55
Merci Cirec j'essaie de suite

Simon
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
28 juil. 2006 à 11:32
Bon malheureusement, rien ne fonctionne vraiment (sauf ma solution
batarde avec le timer). Je ne vous ai surement pas donné assez de de
renseignements… Je vais donc vous prendre un peu la tête avec des
précisions un peu lourdes.


Je crée le composant TmyPanel pour en poser plusieurs sur une même
fiche. Chaque composant est lié à un élément de ma base de donnée. Je
choisis un élément dans la listbox et je clique sur « Ajouter » pour
créer un TmyPanel correspondant à mon élément. (Le principe étant de
saisir dans le « EDValeur » de chaque Tmypanel  une valeur pour
l’élément de la base de donnée. )


_______________________________________

|                          

                                              
|           

|    [MyPanel1]    
|     [ListBox éléments
BDD]       |

|                          
|  
                                             
|

|    [MyPanel2]     | 
    [Bouton Ajouter]     
           | 

|    
…                 
|   
                                            
|

|    [MyPanelN]   
|                                                
|

|_____________ |________________________ | 


- J’ai rajouté un Timer sur le Tmypanel. Dans le constructor du Tmypanel, je crée le timer sur nil avec un interval à 1.

- J’ai mis sur l’unité un compteur en variable globale (NBComp :
integer) qui comptabilise le nombre de composant TmyPanel que j’ai
créé. J’ai également une variable globale « IxSup : integer» qui me
sert pour la suppression du composant. IxSup est initialisé à -1.

- Sur le Constructor du Tmypanel, j’incrémente le NBComp, je nomme le
Tmypanel créé « PNL_ + NBComp » et je lui donne un tag = NBComp

- Sur le BTNFreeOnClick (qui est censé supprimer le Tmypanel) je lance le timer.

- Le timer renvoie le tag du Tmypanel à IxSup et appelle le free du
Tmypanel. Le Tmypanel est libéré sans message d’erreur (mais je me
demande si c’est bien propre…)


Pendant ce temps, sur ma form, J’ai un autre timer qui est censé réagir
dès que IxSup est différent de -1. A ce moment là, je réajuste le
NBComp et je re-tag et renomme les Tmypanel restant de façon à toujours
consever X Tmypanel(s) nommés de « PNL_1 » à  « PNL_X » (plus
pratique pour les libérer sur le formclose et pour me servir des
données dans « ED_Valeur »).


Voilà, je pense vous avoir tout expliqué, si vous voyez un autre moyen que mon timer… (et dans la mesure où ça vous interesse…)


Simon
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
28 juil. 2006 à 11:34
bizarres tous ces points d'interrogation...

Simon
0

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

Posez votre question
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
28 juil. 2006 à 12:04
Une simple question, Simon : pourquoi créer un TMyPanel pour chaque élément ? Un seul ne suffirait-il pas, simplement en adaptant la valeur de ton TEdit en fonction de l'élément sélectionné et à modifier?
A +
Thierry 
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
28 juil. 2006 à 14:16
hélas non, car je souhaite combiner les différentes valeurs des edit
pour lancer une opération (du genre moyenne) et avoir toutes les
valeurs sous les yeux pour plus de convivialité... (et puis aussi, ça
met du piment dans la sauce )

Simon
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
28 juil. 2006 à 20:51
Salut Cirec,


Confirmation : ton code marche impeccablement. Bravo.


Il ne reste plus à notre ami Simon que de transformer ton array[1..10] en tableau dynamique et d'en gérer les entrées-sorties (car je suppose que le nb d'éléments n'est pas connu d'avance).

A +
Thierry
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 juil. 2006 à 22:31
Salut Thierry,


Merci pour la confirmation, maintenant il ne manque plus que l'avis de Simon.


Pour le tableau dynamique ce serait en effet plus judicieux, avec en prime une gestion des éléments supprimés (par Move), ce qui serait, je pense, plus propre et cela éviterait, du coup, le contrôle "If MyPanelArray[I] <> Nil" avant suppression !

Mais bon c'était pas le but de la manip
Le but était pour moi de démontrer, par l'exemple, que ce que j'ai avancé (voir mon premier message) fonctionne

@+
Cirec
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
31 juil. 2006 à 09:46
Merci beaucoup Cirec, c'est nickel... (quel site merveilleux tout de même)

Simon
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
1 août 2006 à 17:59
Simon: en passant, je t'invite à te renseigner sur TComponentList qui pourrait t'être utile.

bon code,
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
2 août 2006 à 10:57
Merci je regarde ça des que possible

Simon
0
Rejoignez-nous