Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Liste des objets d'un programme | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Liste des objets d'un programme Ven 3 Aoû 2012 - 17:45 | |
| Un petit bout de code sans prétention et certainement très perfectible, qui donne la liste et les caractéristiques de tous les objets déclarés d'un programme, ça peut être utile en cours de mise au point. C'est un sous-programme à mettre n'importe où dans le programme cible, il gère ses propres ressources.Il faut simplement insérer juste avant le END du programme-cible (donc après toutes les déclarations d'objets) l'appel au code sous la forme: - Code:
-
#INCLUDE "TRACOBJ.BAS" ligne à mettre en commentaire (ou à supprimer) quand on ne veut plus 'tracer'. Ça se termine par un STOP, on peut choisir de continuer ou d'arrêter, au choix, les ressources prises par le sous-programme sont libérées si on continue, donc sans incidence sur le programme cible. Le code ci-dessous est à enregistrer tel quel dans les sources Panoramic sous le nom TRACOBJ.BAS. - Code:
-
' ¶¶¶¶¶ DÉBUT DE LA SÉQUENCE LISTE DES OBJETS, ENREGISTRÉE SOUS TRACOBJ.BAS ¶¶¶¶ ' A INSÉRER JUSTE AVANT LE END DU PROGRAMME PAR: #INCLUDE TRACOBJ.BAS ' Variable F_tst = 990 (objet de manoeuvre créé) à modifier éventuellement ' (doit être supérieur à tous les objets existants du programme cible). DIM F_tst, D_tst, L_tst, G_tst, s_tst%, o_tst%, t_tst%, a_tst$ DATA "Objets:" DATA "SCENE3D","BUTTON","EDIT","MEMO","COMBO","ALPHA","FORM","LIST","PICTURE" DATA "CHECK","OPTION","MAIN_MENU","SUB_MENU","SOUND","MOVIE","TRACK_BAR" DATA "OPEN_DIALOG","SAVE_DIALOG","SCROLL_BAR","PROGRESS_BAR","SPIN","GRID","CONTAINER" DATA "","","DLIST","SCENE2D","TIMER","","","","CONTAINER_OPTION","","","","","","" DATA "","","IMAGE","F"
F_tst = 990: D_tst = F_tst+1: L_tst = F_tst+2: G_tst = F_tst+3 FORM F_tst: WIDTH F_tst, 640: HEIGHT F_tst,SCREEN_Y-30 DLIST D_tst: DLIST L_tst READ a_tst$: WHILE a_tst$ <> "Objets:": READ a_tst$: END_WHILE READ a_tst$: WHILE a_tst$<>"F": ITEM_ADD L_tst, a_tst$: READ a_tst$: END_WHILE FOR s_tst% = 1 TO F_tst-1 IF OBJECT_EXISTS(s_tst%) = 1 THEN ITEM_ADD D_tst, STR$(s_tst%) NEXT s_tst% IF COUNT(D_tst) = 0 THEN MESSAGE "Aucun objet trouvé !": STOP GRID G_tst: PARENT G_tst,F_tst: GRID_COLUMN G_tst,8: GRID_ROW G_tst,COUNT(D_tst)+1 WIDTH G_tst,WIDTH(F_tst)-16: HEIGHT G_tst,HEIGHT(F_tst)-40: FONT_BOLD G_tst COLOR G_tst,255,210,255 GRID_COLUMN_WIDTH G_tst,50: GRID_ROW_HEIGHT G_tst,14 GRID_ONE_COLUMN_WIDTH G_tst,1,40 GRID_ONE_COLUMN_WIDTH G_tst,2,110: GRID_ONE_COLUMN_WIDTH G_tst,8,210 GRID_WRITE G_tst, 1, 1, "Objet": GRID_WRITE G_tst, 1, 2, " -- TYPE --" GRID_WRITE G_tst, 1, 3, "TOP": GRID_WRITE G_tst, 1, 4, "LEFT" GRID_WRITE G_tst, 1, 5, "WIDTH": GRID_WRITE G_tst, 1, 6, "HEIGHT" GRID_WRITE G_tst, 1, 7, "PARENT": GRID_WRITE G_tst, 1, 8, " -- CAPTION --" FOR s_tst% = 1 TO COUNT(D_tst) o_tst% = VAL(ITEM_READ$(D_tst, s_tst%)): t_tst% = OBJECT_TYPE(o_tst%) GRID_WRITE G_tst, s_tst%+1, 1, STR$(o_tst%) GRID_WRITE G_tst, s_tst%+1, 2, ITEM_READ$(L_tst,t_tst%) IF t_tst%<>12 AND t_tst%<>13 AND t_tst%<>14 AND t_tst%<>17 AND t_tst%<>18 AND t_tst%<>26 GRID_WRITE G_tst, s_tst%+1, 3, STR$(TOP(o_tst%)) GRID_WRITE G_tst, s_tst%+1, 4, STR$(LEFT(o_tst%)) GRID_WRITE G_tst, s_tst%+1, 5, STR$(WIDTH(o_tst%)) GRID_WRITE G_tst, s_tst%+1, 6, STR$(HEIGHT(o_tst%)) END_IF GRID_WRITE G_tst, s_tst%+1, 7, STR$(OBJECT_PARENT(o_tst%)) IF t_tst%=2 OR t_tst%=6 OR t_tst%=7 OR t_tst%=10 OR t_tst%=11 OR t_tst%=13 GRID_WRITE G_tst, s_tst%+1, 8, CAPTION$(o_tst%) END_IF NEXT s_tst% s_tst% = MESSAGE_CONFIRMATION_YES_NO("Voulez-vous continuer le programme ?") IF s_tst% <> 1 THEN TERMINATE DELETE F_tst: DELETE D_tst: DELETE L_tst FREE F_tst: FREE D_tst: FREE L_tst: FREE G_tst: FREE s_tst%: FREE o_tst%: FREE t_tst% FREE a_tst$ ' ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ FIN DE LA SÉQUENCE DE LISTE DES OBJETS ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ (mis à jour le 6 / 8
Dernière édition par JL35 le Lun 6 Aoû 2012 - 17:22, édité 7 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 18:09 | |
| Hello JL35
J’ai chargé, j’ai RUNé (j’invente parfois des mots). Et j’ai eu comme récompense le message suivant : (79) Zero or negative value. Line 21
A part ça B,R,A,V,O
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 18:21 | |
| Ligne 10 : "PROGRESS_BAR" au lieu de "PROGRESS_BAT" Sur cette même ligne : c’est quoi "SOIN" ? c'est "SPIN" non ?
Ligne 21 : COUNT(D_tst) vaut 0 d’où l’erreur
A+
Dernière édition par papydall le Ven 3 Aoû 2012 - 18:27, édité 1 fois | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 18:25 | |
| chez moi ca fonctionne.
vraiement tres pratique effectivement. a conserver. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 18:40 | |
| Rien ne t'échappe papydall ! tu as raison, j'ai fait ça un peu vite fait pour un besoin ponctuel, mais il faut que je révise mon orthographe ! effectivement, c'est PROGRESS_BAR et SPIN dans les datas. Allez, je corrige !
sinon les autres erreurs doivent être liées à ça, reessaye si tu veux ?
Bon j'ai rajouté un test pour le cas où il n'y a aucun objet trouvé (ce qui t'est arrivé, et ce qui arrive si on l'essaye tout seul, sans programme cible), et là il ne faut évidemment pas continuer au stop. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 18:49 | |
| Le Forum sert à ça aussi : trouver les erreurs d’inattention, de frappes etc. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 18:53 | |
| C'est bien évident, rien de tel que de soumettre un programme pour que les autres y trouvent les erreurs, tout seul dans son coin on ne pense pas à tout, et c'est salutaire pour tout le monde. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 19:31 | |
| J’ai réessayé et ça marche. Et maintenant si on remplace les STOP par END pour éviter le message d’erreur si on veut malgré tout continuer même après STOP juste pour embêter le concepteur du programme ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Ven 3 Aoû 2012 - 20:32 | |
| Là papydall tu fais quelque chose avec les mouches... Tu peux même carrément enlever le stop, ça marche, mais tu n'as pas le temps de voir le résultat !
(j'ai enlevé le FREE d'une variable qui n'existait plus)...
Allez papydall, pour t'être agréable j'ai remplacé le STOP par une question 'voulez-vous continuer ou non'. Si oui le programme se déroule normalement, si non terminate. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Liste des objets d'un programme Sam 4 Aoû 2012 - 18:28 | |
| Pas mal ce truc, J'y verrais bien tout les numéros de ligne ou l'objet est utilisé.... Heu... sans abuser Et aussi que l'on puisse l’appeler pendant qu'on code par une touche spéciale...Heu... sans abuser Et aussi que... (bon j'arrête, on est encore bons copains JL35, il ne faut pas que çà change.) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Sam 4 Aoû 2012 - 18:32 | |
| Jean Claude, tu es un vrai abuseur public ! d'ailleurs c'est très abusant tout ça !
Bon, cela dit, ça me paraît très difficile de lister les lignes où on fait appel à un objet, d'abord il y en a beaucoup, et puis on peut désigner l'objet de différentes façons, directement ou par une variable, éventuellement indexée, alors là impossible de s'y retrouver. Et ça deviendrait une véritable usine à gaz, un programme indépendant qui irait lire et analyser le source du programme-cible, plus du tout un sous-programme tout simple à insérer et ôter après usage dans le code lui-même, comme j'ai fait. Et l'intérêt de ça est peut-être assez limité.
Mais bon, mon code étant tombé dans le domaine public, rien n'empêche un amateur de le reprendre (Jean Claude, tu m'écoutes toujours ?) et d'y implémenter des fonctions supplémentaires (tu es toujours là ?). Et après on pourra demander les variables, et les structures, boucles, etc. on avait fait un peu tout ça avec Nardo autrefois, tu t'en souviens peut-être (analyse d'un code source), ça a été assez épique (et même hippique, avec jjn4 qui nous titillait derrière). | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste des objets d'un programme Sam 4 Aoû 2012 - 21:41 | |
| Bien sûr, JC est toujours là et il t’écoute ou plutôt il te lit. Mais n’abuse pas de ce que lui–même n’a pas osé abuser. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Sam 4 Aoû 2012 - 22:41 | |
| Je crois bien que je vais aller me coucher sur cette réflexion philosophique tellement profonde que j'ai peur de tomber dedans Mais en attendant j'ai fait quelque chose d'un peu plus simple à mettre en oeuvre: enregistrer la routine avec les sources Panoramic sous son nom propre, en .bas, par exemple TRACOBJ.BAS, et dans le programme principal à tester, il suffit d' insérer juste avant le END: - Code:
-
#INCLUDE "TRACOBJ.BAS" puis de supprimer (ou mettre en commentaire) cette ligne quand on n'en a plus besoin. Comme ça c'est universel. Voilà ce qu'il faut enregistrer en TRACOBJ.BAS (ou autre nom quelconque), il n'y a plus de Label ni de Return: - Code:
-
' ¶¶¶¶¶ DÉBUT DE LA SÉQUENCE LISTE DES OBJETS ENREGISTRÉE SOUS TRACOBJ.BAS ¶¶¶¶¶ ' A INSÉRER JUSTE AVANT LE END DU PROGRAMME PAR: #INCLUDE TRACOBJ.BAS ' Variable F_tst = 990 (objet de manoeuvre créé) à modifier éventuellement ' (doit être supérieur à tous les objets existants du programme cible). DIM F_tst, D_tst, L_tst, G_tst, s_tst%, o_tst%, t_tst%, a_tst$ DATA "Objets:" DATA "SCENE3D","BUTTON","EDIT","MEMO","COMBO","ALPHA","FORM","LIST","PICTURE" DATA "CHECK","OPTION","MAIN_MENU","SUB_MENU","SOUND","MOVIE","TRACK_BAR" DATA "OPEN_DIALOG","SAVE_DIALOG","SCROLL_BAR","PROGRESS_BAR","SPIN","GRID","CONTAINER" DATA "","","DLIST","SCENE2D","TIMER","","","","CONTAINER_OPTION","","","","","","" DATA "","","IMAGE","F"
F_tst = 990: D_tst = F_tst+1: L_tst = F_tst+2: G_tst = F_tst+3 FORM F_tst: WIDTH F_tst, 640: HEIGHT F_tst,SCREEN_Y-30 DLIST D_tst: DLIST L_tst READ a_tst$: WHILE a_tst$ <> "Objets:": READ a_tst$: END_WHILE READ a_tst$: WHILE a_tst$<>"F": ITEM_ADD L_tst, a_tst$: READ a_tst$: END_WHILE FOR s_tst% = 1 TO F_tst-1 IF OBJECT_EXISTS(s_tst%) = 1 THEN ITEM_ADD D_tst, STR$(s_tst%) NEXT s_tst% IF COUNT(D_tst) = 0 THEN MESSAGE "Aucun objet trouvé !": STOP GRID G_tst: PARENT G_tst,F_tst: GRID_COLUMN G_tst,8: GRID_ROW G_tst,COUNT(D_tst) WIDTH G_tst,WIDTH(F_tst)-16: HEIGHT G_tst,HEIGHT(F_tst)-40: FONT_BOLD G_tst COLOR G_tst,255,210,255 GRID_COLUMN_WIDTH G_tst,50: GRID_ROW_HEIGHT G_tst,14 GRID_ONE_COLUMN_WIDTH G_tst,1,40 GRID_ONE_COLUMN_WIDTH G_tst,2,110: GRID_ONE_COLUMN_WIDTH G_tst,8,210 GRID_WRITE G_tst, 1, 1, "Objet": GRID_WRITE G_tst, 1, 2, " -- TYPE --" GRID_WRITE G_tst, 1, 3, "TOP": GRID_WRITE G_tst, 1, 4, "LEFT" GRID_WRITE G_tst, 1, 5, "WIDTH": GRID_WRITE G_tst, 1, 6, "HEIGHT" GRID_WRITE G_tst, 1, 7, "PARENT": GRID_WRITE G_tst, 1, 8, " -- CAPTION --" FOR s_tst% = 1 TO COUNT(D_tst) o_tst% = VAL(ITEM_READ$(D_tst, s_tst%)): t_tst% = OBJECT_TYPE(o_tst%) GRID_WRITE G_tst, s_tst%+1, 1, STR$(o_tst%) GRID_WRITE G_tst, s_tst%+1, 2, ITEM_READ$(L_tst,t_tst%) IF t_tst%<>12 AND t_tst%<>13 AND t_tst%<>14 AND t_tst%<>17 AND t_tst%<>18 AND t_tst%<>26 GRID_WRITE G_tst, s_tst%+1, 3, STR$(TOP(o_tst%)) GRID_WRITE G_tst, s_tst%+1, 4, STR$(LEFT(o_tst%)) GRID_WRITE G_tst, s_tst%+1, 5, STR$(WIDTH(o_tst%)) GRID_WRITE G_tst, s_tst%+1, 6, STR$(HEIGHT(o_tst%)) END_IF GRID_WRITE G_tst, s_tst%+1, 7, STR$(OBJECT_PARENT(o_tst%)) IF t_tst%=2 OR t_tst%=6 OR t_tst%=7 OR t_tst%=10 OR t_tst%=11 OR t_tst%=13 GRID_WRITE G_tst, s_tst%+1, 8, CAPTION$(o_tst%) END_IF NEXT s_tst% s_tst% = MESSAGE_CONFIRMATION_YES_NO("Voulez-vous continuer le programme ?") IF s_tst% <> 1 THEN TERMINATE DELETE F_tst: DELETE D_tst: DELETE L_tst FREE F_tst: FREE D_tst: FREE L_tst: FREE G_tst: FREE s_tst%: FREE o_tst%: FREE t_tst% FREE a_tst$ ' ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ FIN DE LA SÉQUENCE DE LISTE DES OBJETS ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
Dernière édition par JL35 le Sam 4 Aoû 2012 - 23:26, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Liste des objets d'un programme Sam 4 Aoû 2012 - 23:15 | |
| @JL35 - Citation :
- et puis on peut désigner l'objet de différentes façons, directement ou par une variable, ...
j'ai testé ton programme avec le jeu que je vous prépare. Et mes objets je n'en connais pas le numéro, vu que j’applique désormais "no%=no%+1:objet%=no%:l'objet...etc". J'ai testé ton programme avec cette construction et çà ne l'a pas dérangé du tout, il m'a tout ressorti avec les N° que je ne voyais pas. Mais bon, comme tu l'as deviné, je te taquine..... , Néanmoins ton programme offre des possibilités intéressantes. Quant aux pensées profondes de Papydall, n'ai pas peur de tomber dedans, elles sont pas aussi profondes que çà.. (Heu..., j'ai peut-être dit une connerie) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Sam 4 Aoû 2012 - 23:33 | |
| D'accord Jean Claude, mais si on désigne ses objets par des variables (ce qui est une très bonne chose), moi dans mon programme je les désigne par leur numéro, bien obligé, et il faut faire le rapprochement ce qui n'est pas forcément évident. Mais ça peut être utile. Je viens d'éditer mon petit code juste au-dessus, pour simplifier un peu, ça me semble bien plus facile à utiliser avec le coup du INCLUDE, il y a juste une ligne à mettre ou à enlever dans le programme à tester. Par contre, si on poursuit le programme après test, en cas d'erreur il faut ôter de la ligne d'erreur signalée la longueur de l'include (dans mon cas enlever 52) pour avoir la ligne réelle, c'est l'inconvénient de l'include. Quand aux pensées de Pascal... euh, Papydall, je vais essayer de remettre ça à une autre fois, parce que maintenant ce n'est plus le moment de se prendre la tête Bonne nuit les amis ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste des objets d'un programme Dim 5 Aoû 2012 - 0:44 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste des objets d'un programme Dim 5 Aoû 2012 - 10:08 | |
| C'est vrai pour l'include, ce n'est pas génial mais le tout c'est d'y penser (je ne l'avais jamais utilisé), et c'est bien pratique. Bonne journée à tous, je vais au château de Fontainebleau. Pas comme résident mais comme visiteur !
PS J'ai fait un petite mise à jour aujourd'hui 6/8, en effet il manquait le dernier objet trouvé, il m'a fallu déclarer une ligne supplémentaire dans le GRID créé, je ne sais pas trop pourquoi, mais ça marche comme ça. | |
| | | Contenu sponsorisé
| Sujet: Re: Liste des objets d'un programme | |
| |
| | | | Liste des objets d'un programme | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |