Piège ou bug?

J’ai ce bout de code :

LISTBOX FIXER HAUTEUR LIGNES(Self->;Num(Storage.TB_Interface.LG_LB_NBLigne);1)

dans une méthode objet d’une listbox qui ne possède PAS de nom de variable qui se déclenche sur l’événement formulaire sur chargement; ce code fonctionne en interprété, MAIS, il ne fonctionne pas en compilé !? :thinking:

En utilisant ce bout de code :

LISTBOX FIXER HAUTEUR LIGNES(*;"LB_GestionLgBdC";Num(Storage.TB_Interface.LG_LB_NBLigne);1)

cela fonctionne également en compilé, alors que se passe-t-il ? normal, bug, …

J’aurais tendance à préférer (de loin…) la syntaxe par nom d’objet, mais tu as peut-être une bonne raison d’utiliser celle avec la variable. As-tu essayé de voir si c’est Self la fautive, en la remplaçant par OBJET lire pointeur ?
« Cette commande est conservée pour des raisons de compatibilité uniquement. A compter de la version 12 de 4D, il est conseillé d’utiliser la commande OBJET Lire pointeur. »

Oui, la bonne raison c’est la généricité du code qui du coup ne demandait pas explicitement le nom de la listbox sur laquelle il s’appliquait.

J’ai pas testé, mais je peux; par contre, je vois mal ce qui pourrait changer entre Self et Objet lire pointeur.

Et cela ne me dit pas si c’est normal ou un bug ou un piège ?

Je te confirme que ce bout de code ne fonctionne pas mieux en compilé :

LISTBOX FIXER HAUTEUR LIGNES(OBJET Lire pointeur->;Num(Storage.TB_Interface.LG_LB_NBLigne);1)

Peut-être que déconseillé signifie piégé :wink:

Ne peux-tu utiliser OBJET lire nom ? Si ce code est lancé par la listbox, ça règle 2 soucis, la généricité et le pointeur récalcitrant. Je pense qu’on a intérêt à traiter les pointeurs sur les objets d’interface comme une espèce en voie d’extinction.

1 Like

Ah ben voilà, cette solution est effectivement la meilleure :+1:

Ce bout de code fonctionne en compilé.

LISTBOX FIXER HAUTEUR LIGNES(*;OBJET Lire nom;Num(Storage.TB_Interface.LG_LB_NBLigne);1)

mais, dans ce cas, il faudrait corriger la doc pour qu’il n’y ait pas de piège pour les développeurs…
Et c’est DÉJÀ mort, car cela NE FONCTIONNE PLUS EN COMPILÉ :hot_face:

Bonjour Manuel,

essaye de passer par une variable intermédiaire pour le OBJET Lire nom. Un truc du genre :joy:

$nom:=OBJET Lire nom
LISTBOX FIXER HAUTEUR LIGNES(*;$nom;Num(Storage.TB_Interface.LG_LB_NBLigne);1)

Non testé

Bonjour Em… Patrick :wink:,

Pourquoi s’embêter puisque le passage direct fonctionne ?

Facile pour toi :rofl:

parce que j’ai rencontré un cas, ou en interprété c’était OK et en compilé pas
Mais je ne me souviens plus :thinking:

Tu me fais peur, si en plus il faut maintenant passer par des variables intermédiaires ça va rapidement se compliquer.

T’es sûr que tu confonds pas avec des paramètres objets style $objet.prop ?

L’oracle de la Roche sur Yon m’a dit une fois « plus il y a de vert, mieux c’est ».
Là t’as ajouté du bleu, donc c’est mal.

Bon j’ai retrouvé une ligne qui est toute verte et qui fini bleue :rofl:

$Search:=(OBJECT Get pointer(Object named;OBJECT Get name(Object current)))->

J’espère que l’Oracle de la Roche-Sur-Yon va bien, en tout cas et qu’il ne m’en voudra pas trop de ce bleu :wink:

Pour en revenir, je viens de vérifier dans QST, pour les LB, je passe bien par une variable intermédiaire pour le nom du widget à utiliser.