ellandebasque
Messages postés24Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention29 septembre 2010
-
26 mars 2004 à 16:54
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 2013
-
30 mars 2004 à 15:24
Bonjour,
je fais un prog qui affiche des images à partir d'un répertoire donné par le clic sur le treeview. Tout fonctionne bien, sauf lorsque l'on clique comme un malade sur l'arbre, au bout d'un moment le message d'erreur "stack overflow at line : 0". J'utilise un code qui me permet de dire que ce débordement de pile n'est pas dû au nombre d'images à afficher ni à la taille du code qu'il a à mettre en mémoire (n fois). Je pense plus à un pb de gestion des événements. Ceci dit comment régler ce pb ? Comment lever cette exception ? (try catch sur tout le code ?)
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 27 mars 2004 à 07:48
Bonjour
ce genre de problème est souvent du à une
fonction que l'on appelle de manière récursive
indéfiniment. je pencherais donc plutôt pour
rechercher une erreur de logique de ce type.
maintenant un petit bout de code nous
aiderait.
Cordialement. Bul.
ellandebasque
Messages postés24Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention29 septembre 2010 29 mars 2004 à 09:50
Voici ma fonction permmettant la gestion de l'affichage des images. Cette fonction est appelée sur l'événement clic sur l'arbre. J'ajoute la fonction permettant l'affichage du "picto", qui est appelée depuis cette fonction.
// permet d'afficher les picto d'un répertoire
// création à la volée d'un tableau dans lequel sera affiché les picto
function PrintPictoFromFolder(folder)
{
window.parent.SetWaitCursor(true);
var tabExtensions = getExtensionSelected();
// indice de la colonne courante du tableau
var col = 0;
// largeur/hauteur de la cellule --> Dans le fichier .css
// CellSpacing entre les cellules
var iCellSpacing = "5px";
// objet du tableau
var oCell; // cellule
var oRow; // ligne
while (window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key == folder.Path)
{
var iPictoParCol = getMaxPictoByLine();
viderFrame();
var oFiles = folder.Files;
enumFiles = new Enumerator(oFiles);
var oTBody = document.createElement("tbody");
oTBody.vAlign = "middle";
oTable.appendChild(oTBody);
// variable qui va servir à savoir si l'on affiche une image ou pas
// si on en affiche pas, on met une image nous même pour dire qu'il n'y en a pas
var compteurImages = 0;
for (; !enumFiles.atEnd(); enumFiles.moveNext())
{
setTimeout("", 50);
if (window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key != folder.Path)
{
break;
}
File = enumFiles.item();
if (testExtension(File, tabExtensions) == true)
{
compteurImages++;
// cas où on a pas encore crée de ligne (début de la création)
if (col == 0)
{
oRow = document.createElement("tr");
oTBody.appendChild(oRow);
col++;
}
else
{
// si on arrive au max de picto pour la ligne, on crée une autre ligne
if (col == iPictoParCol + 1)
{
col = 1;
oRow = document.createElement("tr");
oTBody.appendChild(oRow);
}
}
// on cherche à savoir si on affiche l'extension des fichiers
var bAfficherPicto;
if (bAfficherPicto != true && bAfficherPicto != false)
bAfficherPicto = true;
else
bAfficherPicto = window.dialogArguments.bAfficheExtension;
if (rAffichageGd.value == "true")
var iTailleImage = "100";
else
var iTailleImage = "25";
// ajout d'une image
iImg = new Image;
iImg.src = File.Path;
AttendreFin(iImg);
pictoCreate(iImg, oCell, bAfficherPicto, iTailleImage);
// ajoute un picto à la cellule
function pictoCreate(iImg, oCell, bAfficherExtension, iTailleImage)
{
var oTable = document.createElement("table");
oCell.appendChild(oTable);
var oTbody = document.createElement("tbody");
oTbody.className = "clsTBodyLibNormal";
oTable.appendChild(oTbody);
// ligne du tableau qui contiendra l'image
var oTr, oTd1, oTd2;
oTr = document.createElement("tr");
// on fixe la taille de ce TR pour éviter que l'image ne bouge
if (rAffichageGd.value == "true")
oTr.className = "clsTrImageGd";
else
oTr.className = "clsTrImagePt";
oTbody.appendChild(oTr);
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 30 mars 2004 à 15:24
Bonjour
un petit bout de code un extrait simplifié au maximum,
[ là, ça ne donne pas envie de regarder ]
et ça permet parfois de trouver la
solution, l'erreur, tout seul.
Cordialement. Bul.