anisb
Messages postés22Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention19 février 2007
-
5 sept. 2006 à 10:27
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 2009
-
7 sept. 2006 à 08:56
Bonjour à tous,
Je vais essayer d'être clair...
1) Mon projet contient une Form: dans le formCreate, j'instancie un certain nombre de Panel dont le Owner et le Parent est la Form. Dans le Create des Panels, j'utilise des fonctions qui font appels au canvas du Panel et tout ce passe bien (car le Parent est bien positionné avant l'utilisation de ces fonctions ).
2) J'ai changé certaines choses : maintenant, j'ai décidé de placer tous les composants qui étaient sur la Form dans un Panel. Ce Panel Englobant est instancié dans le FormCreate de la Form. Le Parent et le Owner de ce Panel est la Form. Les Panels Englobés sont instanciés dans le Panel Englobant, leur Owner et leur Parent seront donc le Panel Englobant. Mais maintenant, ça plante à l'éxecution lorsque j'arrive sur des instructions qui font appels au Canvas des Panels Englobés. Et je ne comprends pas ce qui se passe...
N.B : Toutes les créations sont éffectuées en Run Time (à l'éxécution) et non en Design Time (Conception)
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 5 sept. 2006 à 11:02
salut,
t'as posé ta question de manière très clair. bravo.
Et, pour moi du moins, tu instancies correctement tes panels. Ca devrait marcher.
Pourrais tu nous indiquer l'erreur (message et emplacement)? une AV?
Pour contourner le problème, peut-être pourrais-tu executer ton code sur le canvas dans le formShow et non le form create. (vu que de toute façon le canevas ne serra pas visible avant et redessiner au pèremier affichage)
un test qui marche chez moi (pas d'erreur au runtime):
anisb
Messages postés22Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention19 février 20071 5 sept. 2006 à 11:10
Bonjour et merci pour la rapidité de ta réaction.
Le code que tu viens de poster est effectivement le cas que nous avions auparavant, et ça marchait bien.
C'est lors de l'appel d'une fonction de Canvas sur le sous panel pnl2 que ça ne fonctionnerait pas.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 5 sept. 2006 à 11:56
ho,
désolé, j'ai mis pnl1 dans le test.... *sleepy*
notes que si ton seul problème est des trucs genre TextWidth, tu peux appeler ces methode depuis un autre canvas. si la font est la même, t'aurras le même resultat.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 5 sept. 2006 à 18:16
Je suis d'accord avec Loda, pour une fois, la question est bien posée
Le problème ne se situerait-il pas ici ?
TMonPanel.PanelCreate;
begin
SousPanel := TMonSousPanel.Create( Self );
SousPanel.Parent := Self;
SousPanel.PanelCreate;
end;
Chaque composant visuel créé sur une fiche a comme propriétaire la fiche.
Par conséquent, tout en gardant une souplesse dans le code, tu peux donc écrire :
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 5 sept. 2006 à 21:17
Deja separe les Classe TMonPanel et TMonSousPanel de l'unitée de la fiche ce serat 100 fois mieux.
Ensuite, tu devrais lister les tpanel pour pouvoir y acceder plus facilement.
Sois en utilisant une TList, sois avec les TCollection, TCollectionItem.
De plus cela faciliteras les creations/liberations, avec des fonctions Add et Delete, sans parler de l'indexation des TPanel qui faciliteras l'accés a ces derniers, comme cela on obtient un contenant principal et des objet pouvant contenir a leurs tours des objets, un peu dans l'esprit d'un TTreeView.
anisb
Messages postés22Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention19 février 20071 6 sept. 2006 à 17:16
En fait il s'agit d'une erreur de ma part ... le plantage ne se situe pas au niveau du Canvas (j'ai dit qu'elle n'était pas Nil ) mais en fait parce que ces appels declenchent un évenement de Resize. Or ayant reimplémenté cette méthode pour resizer tous les composants de ce panel elle me fait planter... Voici ce qui se passe :
MonPanel.Create --> TMonSousPanel.Create dans ce create je fais appel au fonction de canvas
---> Resize Appelée (je ne sais pas pk) --> Dans Resize j'ai des opérations sur d'autres Panels et de composants non encore crées ... donc plantage
J'espère que la solution est aussi claire que la question et vous remercie pour votre aide et votre réactivité
Vive DelphiFR