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 |
|
|
| Aide à la mise au point | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Aide à la mise au point Jeu 14 Aoû 2014 - 16:34 | |
| Il semble que tout le monde soit en train de se faire dorer sur les plages ces jours-ci (euh... et encore, ça dépend lesquelles, vu la météo !). Une petite sub vite faite qui peut servir en cours de mise au point, elle affiche les numéros d'objets sur les objets eux-mêmes (parfois on ne sait plus trop qui fait quoi). C'est imparfait, c'est un peu bricolage et il y a des problèmes pour certaines configurations, par exemple les objets contenus dans un parent, mais ça peut être une base de départ. Les numéros sont affichés en rouge, mais tout ça est modulable, de même je suis parti du principe que les objets étaient compris entre 1 et 1000, mais ça se change facilement. Utilisation: appel à la sub TraceObj() à la fin de la mise en place des objets, juste avant le End. Appel à supprimer ou à mettre en commentaire quand on n'en a plus l'utilité. Et après affichage, on quitte évidemment, on ne va pas lancer le programme après ça. - Code:
-
SUB TraceObj() ' Affichage des numéros d'objets sur les objets (pour mise au point) DIM_LOCAL Obj$(50),v$,i,j,t,p,x,y,sm,dn DATA "Objets:" DATA "SCENE3D","BUTTON","EDIT","MEMO","COMBO","ALPHA","FORM","LIST","PICTURE" DATA "CHECK","OPTION","MAIN_MENU","SUB_MENU","SOUND","MOVIE","TRACKBAR" DATA "OPEN_DIALOG","SAVE_DIALOG","SCROLL_BAR","PROGRESS_BAR","SPIN" DATA "GRID","CONTAINER","","","DLIST","SCENE2D","TIMER","PANEL","","" DATA "CONTAINER_OPTION","","","","","","","","","IMAGE" RESTORE: READ v$: WHILE v$<>"Objets:": READ v$: END_WHILE FOR i = 1 TO 41: READ Obj$(i): NEXT i: ' liste des objets classés par numéro de type for dn = 9999 to 1 step -1: ' recherche dernier objet utilisé if object_exists(dn)=1 then exit_for next dn p = dn+1 for i = 1 TO dn if object_exists(i) = 1 t = object_type(i) if (t<>14 and t<>17 and t<>18 and t<>26 and t<>28 and t<>41) ' sauf les objets invisibles: SOUND, OPEN_DIALOG, SAVE_DIALOG, DLIST, ' TIMER, IMAGE x=0: y=0 if t=12 or t=13: ' MAIN_MENU, SUB_MENU y=-5: if t=13 then sm=sm+25: x=sm: ' sub_menus successifs else x = left(i)+4: if x<0 then x=0 y = top(i)+4: if y<0 then y=0 j = object_parent(i) end_if p=p+1: edit p: if j>0 then parent p,j: ' <---- Klaus top p,y: left p,x: width p,18: height p,16 width p,12: if i>9 then width p,18: if i>99 then width p,24 color p,255,255,0: font_color p,128,0,0: text p, str$(i) hint p,obj$(t) : ' <---- Papydall if t=7 then parent p,i: top p,0: left p,0: ' Form end_if end_if next i END_SUB màj 15/8 17:05 prise en compte des coordonnées des objets 'enfants', merci cosmos ! 22:30 dernière version avec intégration des astuces de Cosmos, Klaus et Papydall.
Dernière édition par JL35 le Ven 15 Aoû 2014 - 22:34, édité 6 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Aide à la mise au point Jeu 14 Aoû 2014 - 19:35 | |
| Très intéressant. Je l'ai testé avec le programme que gigi75 vient de poster (un radar). Certes, on peut améliorer. Le ne vois par exemple pas le numéro sur le scene2d. Mais c'est très intéressant pour identifier facilement l'emplacement des objets. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Jeu 14 Aoû 2014 - 22:16 | |
| Merci Klaus, comme je disais plus haut je suis bien conscient que ce n'est qu'une ébauche qui ne demande qu'à être améliorée, je n'ai pas testé tous les objets, seulement ceux qui me posaient un problème immédiat. Mais tel quel ça peut déjà servir... et motiver pour les améliorations... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 16:19 | |
| Une nouvelle version de la sub, cette fois-ci tous les numéros d'objets sont affichés (sauf les objets virtuels, comme open_dialog, timer, etc). J'affichais précédemment ces numéros dans de petits pictures, mais en général ces pictures se mettent en arrière-plan des objets, donc invisibles. J'ai remplacé par des Edit.
Un bémol toutefois: je ne sais pas afficher au bon endroit les numéros d'objets 'enfants', en fait je ne peux pas savoir que ces objets ont des parents, et a fortiori où sont ces parents. Et avec top() et left() on récupère leur emplacement relatif par rapport au parent.
Je ne connais pas de moyen pour faire ça, il me manque une instruction du genre: x = PARENT(y) à moins qu'il y ait un moyen que j'ignore ? (évidemment sans avoir à analyser tout le source du programme !).
PS dans la sub, la liste des objets sous forme de datas, rangée par ordre de numéro d'objet, est là pour mémoire, elle ne sert à rien pour le moment. | |
| | | Invité Invité
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 16:46 | |
| JL35, il y a OBJECT_PARENT()
Je pense que c'est cela que tu cherches. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 16:51 | |
| Je peux aisément faire une fonction KGF.dll retournant le handle de l'objet "parent" de n'importe quel objet Panoramic. A partir de là, tu pourrais faire une boucle sur tous les objets et comparer leur handle avec celui que ma fonction retournerait, afin d'identifier le parent... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 16:51 | |
| Très bien, Cosmos70 ! Voilà mon idée caduque ! Tant mieux ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 17:00 | |
| Un grand merci cosmos, celui-là m'avait échappé, j'ai mal cherché ! Bon, je m'y remets ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 17:07 | |
| Voilà, c'est fait, merci bien cosmos ! J'ai aussi aligné les sub_menus éventuels successivement après le main_menu pour qu'ils ne soient pas superposés. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 19:24 | |
| Tu vas avoir un problème avec les objets à plusieurs niveaux, et avec des objets recouverts par d'autres. Exemple: - Code:
-
container 1 : top 1,40 : left 1,50 : width 1,300 : height 1,300 button 2 : parent 2,1 : top 2,30 : left 2,40
container 3 : parent 3,1 : top 3,60 : left 3,20 button 4 : parent 4,3 : top 4,30 : left 4,50
TraceObj()
end Avec une petite modif, c'est bon, quelque soit le niveau de complexité: - Code:
-
SUB TraceObj() ' Affichage des numéros d'objets sur les objets (pour mise au point) ' label s_aff, errs, errt dim_local Obj$(50),v$,i,j,t,p,x,y,sm DATA "Objets:" DATA "SCENE3D","BUTTON","EDIT","MEMO","COMBO","ALPHA","FORM","LIST","PICTURE" DATA "CHECK","OPTION","MAIN_MENU","SUB_MENU","SOUND","MOVIE","TRACKBAR" DATA "OPEN_DIALOG","SAVE_DIALOG","SCROLL_BAR","PROGRESS_BAR","SPIN" DATA "GRID","CONTAINER","","","DLIST","SCENE2D","TIMER","PANEL","","" DATA "CONTAINER_OPTION","","","","","","","","","IMAGE" RESTORE: READ v$: WHILE v$<>"Objets:": READ v$: END_WHILE FOR i = 1 TO 41: READ Obj$(i): NEXT i: ' liste des objets classés par numéro de type p = 5000 for i = 1 TO 1000 if object_exists(i) = 1 t = object_type(i) if (t<>14 and t<>17 and t<>18 and t<>26 and t<>28 and t<>41) ' sauf les objets invisibles: SOUND, OPEN_DIALOG, SAVE_DIALOG, DLIST, ' TIMER, IMAGE x=0: y=0 if t=12 or t=13: ' MAIN_MENU, SUB_MENU y=-5: if t=13 then sm=sm+25: x=sm: ' sub_menus successifs else x = left(i)+4: if x<0 then x=0 y = top(i)+4: if y<0 then y=0 j = object_parent(i) end_if p=p+1: edit p: if j>0 then parent p,j top p,y: left p,x: width p,18: height p,16 width p,12: if i>9 then width p,18: if i>99 then width p,24 color p,255,255,0: font_color p,255,0,0: text p, str$(i) if t=7 then parent p,i: top p,0: left p,0: ' Form end_if end_if next i END_SUB Bravo pour cette SUB - je la garde ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 20:32 | |
| J’apporte un tout petit plus à cette SUB fort utile d’ailleurs. Merci JL35. Mon plus ? Ajout de HINT sur les numéros d’objets affichés. - Code:
-
rem ============================================================================ ' Exemple d'utilisation de TraceObj() de JL35 ' Maintenir le curseur de la souris sur le numéro de l'objet pour afficher le HINT rem ============================================================================ label quitter form 10 : top 10,100 : left 10,100 : width 10,400 : height 10,400 container 20 : top 20,40 : left 20,50 : width 20,300 : height 20,300 : parent 20,10 button 30 : parent 30,20 : top 30,30 : left 30,40
container 40 : parent 40,20 : top 40,60 : left 40,20 button 50 : parent 50,40 : top 50,30 : left 50,50
alpha 60 : parent 60,20 : top 60,250 : left 60,50 : caption 60,string$(8," ")+"Salut tout le monde"
button 100 : parent 100,0 : top 100,20 : left 100,200 : caption 100,string$(10," ") + "Quitter" : on_click 100,quitter
TraceObj()
end rem ============================================================================ quitter: terminate return rem ============================================================================ SUB TraceObj() ' Affichage des numéros d'objets sur les objets (pour mise au point) ' label s_aff, errs, errt dim_local Obj$(50),v$,i,j,t,p,x,y,sm DATA "Objets:" DATA "SCENE3D","BUTTON","EDIT","MEMO","COMBO","ALPHA","FORM","LIST","PICTURE" DATA "CHECK","OPTION","MAIN_MENU","SUB_MENU","SOUND","MOVIE","TRACKBAR" DATA "OPEN_DIALOG","SAVE_DIALOG","SCROLL_BAR","PROGRESS_BAR","SPIN" DATA "GRID","CONTAINER","","","DLIST","SCENE2D","TIMER","PANEL","","" DATA "CONTAINER_OPTION","","","","","","","","","IMAGE" RESTORE: READ v$: WHILE v$<>"Objets:": READ v$: END_WHILE FOR i = 1 TO 41: READ Obj$(i): NEXT i: ' liste des objets classés par numéro de type p = 5000 for i = 1 TO 1000 if object_exists(i) = 1 t = object_type(i) if (t<>14 and t<>17 and t<>18 and t<>26 and t<>28 and t<>41) ' sauf les objets invisibles: SOUND, OPEN_DIALOG, SAVE_DIALOG, DLIST, ' TIMER, IMAGE x=0: y=0 if t=12 or t=13: ' MAIN_MENU, SUB_MENU y=-5: if t=13 then sm=sm+25: x=sm: ' sub_menus successifs else x = left(i)+4: if x<0 then x=0 y = top(i)+4: if y<0 then y=0 j = object_parent(i) end_if p=p+1: edit p: if j>0 then parent p,j top p,y: left p,x: width p,18: height p,16 width p,12: if i>9 then width p,18: if i>99 then width p,24 color p,255,255,0: font_color p,255,0,0: text p, str$(i) hint p,obj$(t) : ' <---- Papydall if t=7 then parent p,i: top p,0: left p,0: ' Form end_if end_if next i END_SUB rem ============================================================================
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 21:35 | |
| Je le savais bien que j'allais réussir à vous donner des idées !!!
Merci à tous les deux (et à cosmos également qui m'a bien dépanné), et papydall super l'idée du Hint, j'avais bien pensé à afficher le nom d'objet mais ça faisait trop chargé, avec le Hint c'est la solution idéale. Et il me semblait bien que mon tableau d'objets allait servir à quelque chose !
Et Klaus, ta modif est astucieuse également, il fallait y penser. Comme la version de papydall intègre le tout, je considère que c'est la version à jour et c'est celle que je garde et que j'archive dans mes tiroirs. (la ligne 3 de la sub en commentaire est à supprimer: label...).
Voilà un petit travail collectif comme j'aime bien.
Dernière édition par JL35 le Ven 15 Aoû 2014 - 22:00, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 15 Aoû 2014 - 21:59 | |
| Pour l' anecdote, ceux qui utilise la variable no% pour numéroter les objets n' ont qu' à remplacer 1000 par no%... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:02 | |
| C'est sûr, et penser aussi à augmenter éventuellement la variable p (qu'on peut définir dans ce cas comme no%+1).
On a bien une variable (Number_Objects) qui donne le nombre d'objets utilisés, mais pas le numéro du dernier objet défini, sinon ça pourrait être intégré à la sub. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 15 Aoû 2014 - 22:09 | |
| Pour no%, tu n' as plus à te soucier de l' existence du numéro d' objet puisque no% est le dernier numéro d' objet... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:21 | |
| A condition d'utiliser ce système de no%, c'est un choix personnel mais ce n'est pas universel, je ne l'utilise d'ailleurs pas sauf exception. Je n'ai vu nulle part le numéro maximum d'objet (mais j'ai peut-être mal regardé), par expérience il est de 9999. On pourrait donc faire ceci: - Code:
-
dim dn%: dn% = 0 for i% = 1 TO 9999 if object_exists(i%)=1 if i%>dn% then dn%=i% end_if next i% ou mieux encore: - Code:
-
dim dn% for dn% = 9999 to 1 step -1 if object_exists(dn%)=1 then exit_for next dn% (la boucle met 1s à se dérouler, c'est supportable, on est en mise au point pas en exploitation), et dn% donne le dernier numéro utilisé, et on ferait p = dn%+1, ça marcherait à tous les coups. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:28 | |
| Bien que la documentation de Panoramic n’en parle pas, le numéro maximum d’objets autorisé est de 9999 : c’est qui est plus que suffisant. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:36 | |
| Super, cette idée du "hint". J'adopte. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:36 | |
| C'est ce que j'avais déduit, par expérience, et il est bien évident que c'est bien suffisant.
Je viens de mettre à jour la version au début du post, avec les dernières contributions.
On s'est croisés Klaus, oui le hint est une idée géniale. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:40 | |
| Il m'arrive parfois d'avoir une ou deux idées géniale(s). Tiens, en voilà une : Avec une précision d’horloger, le numéro maximum d'objet autorisé par Panoramic c’est 9999.499999999999 et pas un iota de plus ! Devinez pourquoi? - Code:
-
button 9999.499999999999
Dernière édition par papydall le Ven 15 Aoû 2014 - 23:00, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 15 Aoû 2014 - 22:47 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:48 | |
| V'là aut'chose ! on peut mettre une valeur non entière ???
Oui, effectivement, mais il ne retient que la partie entière: on peut faire List 9999.1 mais si on fait ensuite Alpha 9999.2 ça coince (doublé). C'est du folklore... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:51 | |
| Le voici: - Code:
-
message handle(0.4999999999999999) Edit : En vérité l’identificateur d’un objet est un entier ou un réel transformé en un entier par Panoramic.
Dernière édition par papydall le Ven 15 Aoû 2014 - 22:55, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 22:53 | |
| Oui, mais Panoramic convertit toujours cette valeur en un entier. La preuve: - Code:
-
button 1 : top 1,10 : left 1,10 : caption 1,"1" button 1.3 : top 1.3,40 : left 1.3,10 :caption 1.3,"1.3" end
La bouton 1.3 est en fait le bouton 1, et sa définition provoque une erreur. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Aide à la mise au point Ven 15 Aoû 2014 - 23:06 | |
| - Code:
-
button sin(.59) : ' c'est correct puisque sin(.59) est > .5 et est donc arrondi à 1
| |
| | | Contenu sponsorisé
| Sujet: Re: Aide à la mise au point | |
| |
| | | | Aide à la mise au point | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |