sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
26 juil. 2006 à 16:07
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDerniè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 ?
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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;
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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…)
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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 )
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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).
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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