| bug off_activate 0 : sans effet | |
|
|
Auteur | Message |
---|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: bug off_activate 0 : sans effet Ven 6 Juil 2018 - 13:02 | |
| Off_activate sur le form 0 reste sans effet. En reprenant l'exemple de l'aide: - Code:
-
label active0,active1 dim k0%,k1% k0%=0 k1%=0 height 0,200:width 0,300 alpha 10:top 10,20:left 10,20:caption 10, "Cliquez sur ce FORM" form 1:left 1,310:height 1,200:width 1,300 alpha 11:parent 11,1:top 11,20:left 11,20 on_activate 0,active0 on_activate 1,active1 end active0: k0%=k0%+1 caption 0, "nombre d'activations: "+str$(k0%)+" : "+str$(NUMBER_ACTIVATE) caption 10, "" caption 11, "Cliquez sur ce FORM" OFF_ACTIVATE 0 :' <--- pas pris en compte return active1: k1%=k1%+1 caption 1, "nombre d'activations: "+str$(k1%)+" : "+str$(NUMBER_ACTIVATE) caption 10, "Cliquez sur ce FORM" caption 11, "" OFF_ACTIVATE 1 :' <--- ok return
| |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: bug off_activate 0 : sans effet Lun 25 Mar 2019 - 15:03 | |
| Un autre exemple court qui provoque une erreur: - Code:
-
' V 0929i7 label traitement
caption 0,"Cliquez dans Form 11" form 11 : left 11,600 : caption 11,"Form 11" synedit 222 : set_focus 222
on_activate 0,traitement on_activate 11,traitement
END traitement: off_activate 0 :' <--- bug : provoque une erreur car sans effet off_activate 11 test() on_activate 0,traitement on_activate 11,traitement return
sub test() dim_local my_var set_focus 222 :' dès que form 11 est cliqué, "set_focus 222" activate le form 0 et cela entraine le déclenchement de la procédure 'traitement:' :' Du coup, 'END_SUB' n'a pas été atteind et le rappel de 'traitement:' éxécute à nouveau la sub 'test()'. Il en résulte que 'my_var' n'a pas été détruit ---> erreur(35) end_sub | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: bug off_activate 0 : sans effet Mer 27 Mar 2019 - 19:41 | |
| OK, il y a des problèmes. je regarde cela. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: bug off_activate 0 : sans effet Jeu 28 Mar 2019 - 18:30 | |
| Le problème est corrigé. La correction sera disponible dans la prochaine version. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bug off_activate 0 : sans effet Jeu 28 Mar 2019 - 21:11 | |
| Jack, je m'excuse par avance du hors-sujet que je m'apprête à faire. Mais j'ai l'impression que l'occasion est trop belle, juste avant la sortie d'une nouvelle version corrigeant entre autres un bug. Serait-il possible d'introduire, dans une position fixe, une structure comme suit: - Code:
-
var NumberOfArrayPointers: integer; ArrayPointers: array [0..NumberOfArrayPointers] of pinteger; ... ArrayPointers[0] := @vt; ArrayPointers[1] := @... ...
Ainsi, en récupérant l'adresse de ce tableau, j'aurais tout ce qui est nécessaire... Si cette proposition est en-dehors de ta vision de Panoramic, oublie - ce n'est pas grave. | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: bug off_activate 0 : sans effet Mer 3 Avr 2019 - 7:47 | |
| @Klaus: J'ai créé une variable système ADR_VARTAB qui donne l'adresse du début de la structure (Var_Nom) du premier élément de la table des variables (tv[0]). Cela donne quelque chose comme ça: - Code:
-
Addr(tv[0].Var_Nom) Ce sera disponible dans la prochaine version. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bug off_activate 0 : sans effet Mer 3 Avr 2019 - 9:36 | |
| Je te remercie, Jack, de prendre en compte ma suggestion.
Malheureusement, ce n'est pas tout à fait ce qu'il faut. Toutes ces tables sont créées sur le heap, et donc, à chaque modification de longueur d'une des tables, elle est recopiée avec agrandissement à un autre endroit du heap, et donc cette adresse change également. Je l'ai vérifié à de maintes reprises. Et on ne peut même pas garantir que les tables restent physiquement en mémoire dans l'ordre dans lequel elles ont été définies, du fait du mécanisme de copie/réallocation table par table, et non de l'ensemble des tables.
Ce qui ne change pas, c'est la valeur de @vt et ainsi de suite pour les autres tables. Ce qui serait bien, ce serait de créer un array de PInteger d'une seule dimension, mais un array fixe, non dynamique. Soit VarTab le nom de ce tableau. Alors, dans VarTab[0], on met @VT, et dans les autres les valeurs de @xxx pour chacune des tables. Ensuite, la nouvelle variable devrait contenir @VarTab[0] - là, c'est possible car étant un array fixe, VarTab n'est pas alloué sur le heap et donc son adresse ne change pas.
C'est juste une suggestion, Jack, puisque je vois que tu essaies de trouver une solution. Mais techniquement, on n'y est pas encore... | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: bug off_activate 0 : sans effet Mer 3 Avr 2019 - 19:35 | |
| J'ai compris ton problème. Un code valant mieux qu'un long discours, voici comment cela va être codé. ADR_VARTAB est une variable système pour Panoramic, mais en Delphi, c'est une fonction sans paramètre, d'où la présence d'un Return dans le code. Données communes: - Code:
-
var Ptr_Var : pointer; VarTab : array [0..9] of pinteger; // tableau statique contenant 10 pointeurs Code de la fonction ADR_VARTAB: - Code:
-
Ptr_Var := Addr(tv[0].Var_Nom); // pointe sur TV VarTab[0] := Ptr_Var; Result := integer(Ptr_Var); // Valeur rendue par la variable système ADR_VARTAB VarTab[1] := Addr(ti[0]); // pointe sur TI VarTab[2] := Addr(tr[0]); // pointe sur TR VarTab[3] := Addr(tc[0]); // pointe sur TC VarTab[4] := Addr(ti2[0]); // pointe sur TI2 VarTab[5] := Addr(tr2[0]); // pointe sur TR2 VarTab[6] := Addr(tc2[0]); // pointe sur TC2 VarTab[7] := Addr(ti3[0]); // pointe sur TI3 VarTab[8] := Addr(tr3[0]); // pointe sur TR3 VarTab[9] := Addr(tc3[0]); // pointe sur TC3 _________________ username : panoramic@jack-panoramic password : panoramic123
Dernière édition par Jack le Mar 9 Avr 2019 - 11:56, édité 1 fois | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bug off_activate 0 : sans effet Ven 5 Avr 2019 - 7:50 | |
| Onn y est presque, Jack ! Mais pas encore tout à fait... En effet, tv[0].Var_Nom étant alloué sur le heap, son adresse change lorsque tu fais un SetLength(tv,...) puisque ce tableau est alors recopié. Idem pour ti[0] etc. Il faudrait utiliser addr(tv), addr(ti), etc comme suit: - Code:
-
Ptr_Var := Addr(tv); // pointe sur TV VarTab[0] := Ptr_Var; Result := integer(Ptr_Var); // Valeur rendue par la variable système ADR_VARTAB VarTab[1] := Addr(ti); // pointe sur TI VarTab[2] := Addr(tr); // pointe sur TR VarTab[3] := Addr(tc); // pointe sur TC VarTab[4] := Addr(ti2); // pointe sur TI2 VarTab[5] := Addr(tr2); // pointe sur TR2 VarTab[6] := Addr(tc2); // pointe sur TC2 VarTab[7] := Addr(ti3); // pointe sur TI3 VarTab[8] := Addr(tr3); // pointe sur TR3 VarTab[9] := Addr(tc3); // pointe sur TC3 Ainsi, on aura un tableau avec les adresses des variables, pas des données de ces variables. Et les adresses des variables sont fixes. Fais l'essai - compare addr(tv) avec addr(tv[0].Var_Nom) après un SetLength(tv,...). Mais je vois que tu prends ma requête au sérieux ce dont je te suis très reconnaissant. | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: bug off_activate 0 : sans effet Lun 8 Avr 2019 - 20:07 | |
| C'est fait dans la version instantanée V 0.9.29i8 du 08/04/2019. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: bug off_activate 0 : sans effet Lun 8 Avr 2019 - 21:50 | |
| Ah, super, Jack ! Je vais la télécharger de ce pas et continuer mes tests avec ça ! Ca devrait aller beaucoup mieux, ainsi ! | |
|
| |
Contenu sponsorisé
| Sujet: Re: bug off_activate 0 : sans effet | |
| |
|
| |
| bug off_activate 0 : sans effet | |
|