dc46
Messages postés20Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 7 juillet 2022
-
Modifié le 3 nov. 2018 à 22:38
dc46
Messages postés20Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 7 juillet 2022
-
4 nov. 2018 à 08:22
Bonjour.
Je porte une application développé en Delphi 5 vers la version 10.2.
c := frmMain.gbChangeur.Controls[Box] as Tlabel;
Sachant que c est une variable déclaré TLabel, que frmMain est une TForm , que gbChangeur est un TGroupbox qui contient divers composant dont des labels.
Pas de problème à la compilation mais erreur d'exécution EInvalidCast.
J'attend donc une idée voir une solution.
Merci à tous.
sinon vous prendriez un Tbutton pour un tLABEL par exemple
dc46
Messages postés20Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 7 juillet 2022 Modifié le 3 nov. 2018 à 22:38
Bonjour et merci de vous pencher sur mon problème.
Je comprend parfaitement votre raisonnement, mais ce qui me dérange le plus c'est que l'application développé en Delphi 5 fonctionne parfaitement avec le code tel que le l'ai écrit sachant que le groupbox ne contient pas que des labels.
Je ferais un test avec votre proposition, mais en attendant un avis j'ai modifier cette séquence par la séquence suivante :
c := TLabel(frmMain.FindComponent('capT' + IntToStr(Box)));
D'autant plus intéressant que je suis sur de m'adresser au bon Label alors qu'avec Controls[Box] je ne savait pas forcément comment étais indexé ma série de Label.
Dans l'ancienne version j'avais du créer mes labels dans l'ordre avant d'ajouter d'autre composants ce qui fais que mon label 'capT1' correspondait bien à Controls[1] et ainsi de suite.
Encore Mille Merci
hoby500
Messages postés86Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention26 mai 2019 4 nov. 2018 à 00:31
Je pense que DELPHI 5 compilait en mode "SANS vérification des types"
donc ca passait à la compilation
et je me demande s'il ne tolérait pas le transtypage lors de l'exécution.
hoby500
Messages postés86Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention26 mai 2019 Modifié le 4 nov. 2018 à 08:29
En attendant votre solution peut être optimisée :
c := TLabel(frmMain.gbChangeur.FindComponent('capT' + IntToStr(Box)));
afin de parcourir les enfants de gbChangeur
et pas ceux de la fiche
dc46
Messages postés20Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 7 juillet 2022 4 nov. 2018 à 08:22
Bonjour hoby500
J'ai testé l'écriture de ta première réponse qui effectivement évite l'exception de cast que j'avais. Mais vu la chronologie de création des composants c'était le souk.
Sur ta dernière proposition d'optimisation je peux en revanche te dire que ce ne sera pas accepté par le système du fait que la fonction 'FindComponent' ne peux s'appliquer que sur une 'Form' (dixit documentation Embarcadero).
Merci et bon dimanche.
Modifié le 3 nov. 2018 à 22:38
Je comprend parfaitement votre raisonnement, mais ce qui me dérange le plus c'est que l'application développé en Delphi 5 fonctionne parfaitement avec le code tel que le l'ai écrit sachant que le groupbox ne contient pas que des labels.
Je ferais un test avec votre proposition, mais en attendant un avis j'ai modifier cette séquence par la séquence suivante :
D'autant plus intéressant que je suis sur de m'adresser au bon Label alors qu'avec Controls[Box] je ne savait pas forcément comment étais indexé ma série de Label.
Dans l'ancienne version j'avais du créer mes labels dans l'ordre avant d'ajouter d'autre composants ce qui fais que mon label 'capT1' correspondait bien à Controls[1] et ainsi de suite.
Encore Mille Merci
EDIT : Ajout des balises de code
4 nov. 2018 à 00:31
donc ca passait à la compilation
et je me demande s'il ne tolérait pas le transtypage lors de l'exécution.
Modifié le 4 nov. 2018 à 08:29
afin de parcourir les enfants de gbChangeur
et pas ceux de la fiche
EDIT : Ajout des balises de code
4 nov. 2018 à 08:22
J'ai testé l'écriture de ta première réponse qui effectivement évite l'exception de cast que j'avais. Mais vu la chronologie de création des composants c'était le souk.
Sur ta dernière proposition d'optimisation je peux en revanche te dire que ce ne sera pas accepté par le système du fait que la fonction 'FindComponent' ne peux s'appliquer que sur une 'Form' (dixit documentation Embarcadero).
Merci et bon dimanche.