FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar Klaus Aujourd'hui à 14:18

» Gestion d'un système client-serveur.
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar Klaus Aujourd'hui à 13:18

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar Froggy One Aujourd'hui à 11:16

» @Jack
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
'List index out of bounds (-1)' avec ITEM_INDEX$ Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier

 

 'List index out of bounds (-1)' avec ITEM_INDEX$

Aller en bas 
3 participants
AuteurMessage
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 11:55

Bonjour,

Comme il n'existe pas de boite de dialogue permettant de sélectionner un répertoire, je me suis dis que j'allais essayer d'en faire une...

pour l'instant, je tâtonne un peu et je remplis une liste avec
le nom des répertoires.

Je voudrais récupérer l'item sélectionné dans la liste

voila mon bout de code :

Code:


dim init$,c$,bStart
dim idList


idList=1
bStart=1
init$=DIR_CURRENT$
c$="C:"


LIST idList
WIDTH idList,width(0) : height idList,height(0)
rem ********************************************************
rem * Prog principal
rem ********************************************************


DIR_CHANGE c$

repeat
  if bStart=1
    bStart=0
    c$=file_find_first$
  else
    c$=file_find_next$
  end_if
  if file_exists(c$)=0 and c$<>"_"
    ITEM_ADD idList,DIR_CURRENT$+c$
  end_if
until c$="_"

file_find_close

c$=ITEM_INDEX$(idList)

' repeat
' until ITEM_INDEX$(idList)<>""
' message ITEM_INDEX$(idList)
message c$

DIR_CHANGE init$
end

j'ai mis en commentaire ma boucle d'attente.
Tel que c'est écris là, je dois m'attendre à avoir en retour une chaine vide ou alors le premier item (si c'est celui sélectionné par défaut)...

Malheureusement c'est le message d'erreur 'List index out of bounds (-1)' qui apparait. Je ne trouve pas d'info dans la doc ni sur le forum.
Ca doit être gros comme une maison, mais là je dois avouer que je sèche un peu... scratch
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 12:41

Je n'ai pas essayé ton bout de programme, mais par expérience, fais toujours ce teste: if count( N° de l'objet) >0 then ...
Si il n'y a rien et que tu essayes de lire un list, un memo ou autre tu auras ce genre d'erreur.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 13:33

Je viens de rajouter un test après le file_find_close et j'ai toujours mon message d'erreur :

Code:

if count(idList)>0
  message str$(count(idList)) : ' <--- à cet endroit le message affiche 26
  c$=ITEM_INDEX$(idList) : ' <--- là ça plante !
  message "après Item_index" : ' Ce message n'apparait pas... normal...
end_if

Vraiment je ne vois pas où se trouve mon erreur...

Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 14:00

ITEM_INDEX$(objet) renvoie l'article SÉLECTIONNÉ dans la LIST par l'utilisateur et dont l'index est ITEM_INDEX(objet).
S'il n'y a aucun objet sélectionné, comme c'est le cas ici, l'index est 0, et aucun article ne correspond à 0, d'où l'erreur.

Une remarque, si tu pars avec c$ = "C:", tu démarres de l'emplacement de l'Editeur Panoramic.
Si tu veux partir de la racine de C:, il faut mettre c$ = "C:"


Dernière édition par JL35 le Mer 7 Juil 2010 - 14:26, édité 1 fois
Revenir en haut Aller en bas
Invité
Invité




'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 14:10

JL35 a plus que raison.
Item_index ou item_index$ est utilisé par on_click donc par un évènement, et c'est à partir de là dans un sous programme que l'index est lu.
Si tu veux lire la liste, on emploi item_read$(N, ligne), et évidemment avec ligne >0 et une valeur dont le contenu existe.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 14:30

Je me suis fait piéger par l'affichage du \ que je voulais mettre après C: dans mon post précédent, mais il a disparu. J'ai essayé d'éditer, il ne s'affiche toujours pas. Je persiste à dire que cette histoire de l'antislash qui ne s'affiche pas, c'est un phénomène nouveau, ça marchait bien avant.
Je détaille: il faut mettre
Code:
C:\
au lieu de
C:

Je présume qu'avec ton programme tu essaies de descendre les répertoires.
Il te faut pour cela, comme dit cosmos, gérer l'événement clic souris, pour gérer le choix de l'utilisateur.
Un exemple en partant de ton code (ce n'est qu'une ébauche rapide, il faut aussi gérer le choix final pour terminer, et aussi la possibilité de retour en arrière):
Code:
dim init$,c$,add$,antislash$
dim idList
LABEL Chrep, Chrep1

idList=1
init$=DIR_CURRENT$
antislash$ = CHR$(92)
c$="C:"+antislash$


LIST idList
WIDTH idList,width(0) : height idList,height(0)
ON_CLICK idList, Chrep

GOSUB Chrep1
end

DIR_CHANGE init$
terminate

Chrep:
c$ = ITEM_INDEX$(idList)
Chrep1:
DIR_CHANGE c$
CLEAR idList
c$ = file_find_first$
while c$ <> "_"
    if file_exists(c$)=0
        add$ = "": IF LEN(DIR_CURRENT$) > 3 THEN add$ = antislash$
        ITEM_ADD idList,DIR_CURRENT$ + add$ + c$
    end_if
    c$ = file_find_next$
end_while
file_find_close
RETURN

EDIT: A LA LIGNE 7 IL FAUT BIEN METTRE C: + antislash
(satané antislash qui disparaît corps et biens...) Evil or Very Mad
Et aussi à la fin de la ligne 28: a$ = antislash

Le mieux c'est de faire
Code:
antislash$ = CHR$(92)
et de passer par là à chaque fois. Je rectifie le code ci-dessus.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 14:53

Ok merci à tous les deux !

Oui j'avais bien l'anti-slash dans mon code, c'est pénible ce bug d'affichage du forum !

Ca marche beaucoup mieux maintenant !!!

Il y a seulement 2 jours que j'ai découvert Panoramic... soyez indulgent envers le "newbie" que je suis... Smile

En fait, je ne pensais pas que c'était forcément évènementiel vu que dans la doc (ben oui je m'appuie sur la doc study ) il est précisé que si aucune ligne n'est sélectionnée, ITEM_INDEX$(N) retourne "". Ce qui n'est pas possible vu qu'il faut forcément une sélection pour déclencher un évènement...

Faudrait modifier la doc de façon que la 'Remarque 1' passe dans la rubrique 'Erreur' ... mais je pense que Jack a d'autres choses de plus importante à faire... notamment la sélection de répertoire, ce qui m'arrangerai beaucoup !
Wink

Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 15:07

Je ne sais pas si tu es newbie, mais en tout cas tu ne te débrouilles pas si mal que ça, et le codage de la sélection d'un répertoire est tout à fait à ta portée, tu ne vas pas embêter Jack avec ça ! Very Happy

Perso je passe par la sélection de fichier (OPEN_DIALOG), jusqu'au répertoire désiré, je clique un fichier quelconque dans ce répertoire et je considère que c'est le répertoire choisi, ça marche très bien.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 16:28

Un petit conseil si tu continues ton programme qui au demeurant est intéressant: un répertoire n'est pas si facile que cela à identifier. Il y a des fichiers sans extension ou avec plusieurs "." dans le nom, et il y a des répertoires avec extension ou même avec plusieurs points dans leur nom. Il faut trouver un moyen sûr de distinguer un répertoire d'un fichier, et ce n'est pas si simple. Un moyen possible est:
Code:

if fileexists(nom_du_fichier$)=1
    ' ici, le fichier existe
else
    '  ici, on a un répertoire
end_if
Il y a d'autres méthodes. A toi de jouer...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 16:33

Je prends pas le temps de réfléchir longuement, j'allais partir.
Il y a dir_exists, et peut-être peut servir.
Je file.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 7 Juil 2010 - 16:42

Non, ce n'est pas suffisant avec dir_exists(). Si tu lui passes un string contenant le nom d'un fichier, dir_exists retourne quand_même 1 car la directory du fichier existe ! Cela ne permet pas de déterminer s'il s'agit d'une directory ou d'on répertoire.

Exemple: dir_exists("C:\Program Files\xxx.xxx") retourne 1, et dir_exists("C:\Program Files") retourne 1 aussi ! Par contre, file_exists() ne retourne 1 que si le FICHIER existe, et s'il n'y a pas de nom de fichier, donc seulement une directory, il retourne 0 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyJeu 8 Juil 2010 - 5:11

Merci Klaus,

Mais c'est déjà ce que j'utilise...

Ce que j'essaye de faire c'est que lorsque l'on clique sur un item de répertoire, celui-ci se déplie en dessous (à l'aide de item_insert) et affiche ses répertoires fils...
Je sais, c'est un peu prise de tête (car il faut penser à l'indentation et au repliage...) mais c'est surtout dans le but d'apprendre...

Le plus simple serait de faire appel à la boite standard de windows via une dll. Wink (j'ai déjà fait un essai avec Dev-C++, dll_on, etc... mais ça plante grave !)

Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyJeu 8 Juil 2010 - 13:02

J'ai remanié légèrement ton programme pour éviter le plantage. J'ai ajouté un traitement on_click sur ta liste qui te montre l'utilisation de item_index$() et to donne la main pour faire quelque chose sur un répertoire choisi.

En ce qui concerne les appels aux DLL, c'est compliqué. J'en sais quelque chose puisque j'en écris une que je mets à disposition pour Panoramic.

Tout d'abord, n'importe quelle DLL ne peut pas être utilisée à partir de Panoramic. Il faut qu'elle corresponde à des règles bien précises. Je l'ai appris à mes dépens. Ensuite, une seule DLL peut être active dans un programme Panoramic à un instant donné. Avant de l'utiliser, il faut faire DLL_on "nom_de_la_DLL.dll", puis appeler ces fonctions par une instruction du type I%=DLL_calln("Nom_de_la_fonction_DLL",p1%, ..., pn%). on ne peut appeller que des fonctions qui retournent une valeur integer sur 32 bits, pas autre chose, et pas de procédure ne retournant pas de valeur. Le nom de la fonction DLL doit être spécifié sous forme de string, entre guillemets ou dans une variable string (f$). Important: le nom de la fonction doit être spécifié de façon EXACTE, en respectant les majuscules et minuscules ! TOUS les paramêtres doivent être du type integer et sont passées par valeur. Si la routine DLL attent une adresse, il faut passer adr(v%), adr(v) ou adr(v$). Si la fonction attend un handle windows, il faut passer handle(objet_panoramic). Et à la fin, il faut faire DLL_off.

Dans la DLL que je propose (voir le fil de discussion "Le site de Klaus" sur la page d'accueil du forum, et dans ce site, la rubrique Panoramic, puis la ligne "KGF.dll avec mes routines de service". Le fichier zip téléchargeable contient la DLL (à placer dans le même répertoire que l'éditeur Panoramic), et un fichier mode d'emploi en format RTF. Cette DLL contient ente autres des fonctions pour appeler la boite de dialogue d'ouverture et de sauvegarde de fichiers, de même que la commande open_dialog et save_dialog de Panoramic. La différence, c'est qu'on peut préciser un répertoire de démarrage ce qui n'est pas possible pour le moment) avec les commandes Panoramic.

Bon, assez de baratin, voici ton programme modifié:
Code:
label click_idlist

dim init$,c$,bStart
dim idList


idList=1
bStart=1
init$=DIR_CURRENT$
c$="C:"


LIST idList
WIDTH idList,width(0) : height idList,height(0)
on_click idlist,click_idlist
rem ********************************************************
rem * Prog principal
rem ********************************************************


DIR_CHANGE c$

repeat
  if bStart=1
    bStart=0
    c$=file_find_first$
  else
    c$=file_find_next$
  end_if
  if file_exists(c$)=0 and c$<>"_"
    ITEM_ADD idList,DIR_CURRENT$+c$
  end_if
until c$="_"

file_find_close

' c$=ITEM_INDEX$(idList)
c$ = item_read$(idlist,1)

' repeat
' until ITEM_INDEX$(idList)<>""
' message ITEM_INDEX$(idList)
message "Premier: "+c$

DIR_CHANGE init$
end

click_idlist:
c$ = item_index$(idlist)
message "Choix: "+c$
' traitement ici
return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyVen 9 Juil 2010 - 6:45

Merci Klaus pour tes explications.

Je pense utiliser les fonctions FileOpen / FileCreate de ta dll pour mon utilitaire de base Radars GPS.

j'vous l'demande mon bon monsieur :
A quoi ça sert que Klaus se décarcasse, si on ne les utilise pas ses fonctions !! hein ? Wink .

Je perdrais beaucoup moins de temps ainsi et cela me permettra de poursuivre la suite du développement de mon utilitaire.

Cela ne m'empêchera pas de temps en temps de continuer de réfléchir sur cette idée de SelectDir( ) à l'aide de List() en Panoramic...

Quand aux dll, c'est bien dommage de ne pas pouvoir utiliser plusieurs dll... le chargement en dynamique plante d'après ce que j'ai lu...et vu car j'ai fait une dll en Dev-C++ (la dll de base : addition) ça plante... j'en en fait une autre aussi en Delphi6 : ça plante grave aussi ! (tiens ça rime)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyVen 9 Juil 2010 - 10:37

Tiens, regarde ma DLL version 1.08 d'hier: j'ai ajouté une fonction FolderSelect permettant de choisir un dossier et éventuellement d'en créer un, sans avoir à sélectionner un fichier.

Si tu t'intéresses à l'écriture d'une DLL en Delphi 6 (comme c'est mon cas), je peux te communiquer les sources de ma DLL pour que tu voies comment on peut le faire sans plantage. Peut-être pourrions-nous échanger des techniques de programmation en Delphi autour des DLL ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyVen 9 Juil 2010 - 18:02

Merci Klaus !
Bien sur que ça m'intéresse !
Encore que tu as certainement plus à m'apprendre que moi à t'apprendre sur Delphi.... vu que j'ai commencé Delphi peu de temps après Panoramic... Smile
En fait il y a longtemps que j'ai pas toucher au langage Pascal.... ça me rappelle mes études il y a déjà un certain nombre d'années... Smile
En gros on va dire que j'ai 20/25 ans d'expe en programmation en PLM/C/assembleur sur micro-contrôleurs Moto, un peu de Python, HTML, quelques base en Java etc... sur des systèmes embarqués (y'a pas beaucoup de développement d'IHM sur des cartes électroniques de bas niveau... d'où mes lacunes en tout ce qui concerne l'interfaçage graphique) . il me reste quelques vagues souvenirs de mes début en ASM6809 (MO5), Basic GFA et 68000 (Atari1040 Stf) et turbo Pascal (pdt mes études)...

Mouais, c'était le bon vieux temps où à l'époque quand on achetait l'extension 16Ko pour le ZX81 on se sentait le roi du monde !! Smile
Les gônes n'ont pas connu ça eux ! (je suis pas vieux, mais je me sens vieux quand on voit l'évolution qu'il y a eu en quoi... 20/25 ans?)

Une idée de dll qui plante: (je sais c'est hors sujet, on est sur un forum panoramic, je ne recommencerai plus!)



Code:

library Project1;

uses
 SysUtils,
 FileCtrl,
 Classes;

($R *.res)

var
 chosenDirectory : string;

function SelDir(A: PString): Integer; stdcall;
begin
 result :=1;
 if SelectDirectory('Choisissez un répertoire','C:\', chosenDirectory)
  then A^ := chosenDirectory else result := 0;
end;

exports
  SelDir;

begin
end.


Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyVen 9 Juil 2010 - 19:19

Le problème est certainement la façon dont tu retournes le résultat string à Panoramic. Par expérience, je peux te dire que ce n'est pas simple. Tout d'abord, to DOIS réserver de l'espace en Panoramic pour le string de retour, par exemple en faisant
dim rep$
rep$ = string$(255," ")
ce qui crée un espace de 255 caractères à blanc. Ensuite, le retour du string tel que tu le fais, "détruit" le string dans Panoramic. Il faut passer l'adresse du string par adr(rep$) à la routine, puis copier caractère par caractère en remplaçant les espaces préétablis. Il faut aussi prendre les précautions nécessaires pour ne pas dépasser la longueur du string réservé: je passe la longueur en paramètre à cet effet. Voici le sour opérationnel de ma DLL pour faire la même chose:

Code:
// sélection un répertoire sans création
const
  SELDIRHELP = 1000;
function FolderSelectNoCreate(root, folder, sfolder: integer): integer; stdcall;
var
    dir: widestring;
    res: string;
    sfic, sfold: integer;
    pstr: pstring;
    i: integer;
    PB: pByte;
    char: pchar;
begin
    pstr := pstring(root);
    dir := pstr^;
    if SelectDirectory('Choix de répertoire',dir,res) then begin
        sfic := length(res);
        sfold := sfolder;
        PB := pbyte(pstring(folder)^);
        if sfic<sfold then sfold := sfic;
        pstr := pstring(folder);
        for i:=1 to sfold do begin
            char := pchar(midstr(res,i,1));
            PB^ := Byte(char^);
            inc(PB);
        end;
        result := 1;
    end else begin
        result := 0;
    end;
end;
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptySam 10 Juil 2010 - 7:02

Bonjour Klaus,

En effet, je vois où se trouve mon erreur (entre la chaise et le clavier? geek ). ma fonction était un peu bourin...
Le coup de la réservation de place au niveau de Panoramic j'y avais pensé... Je suis bien d'accord, il faut allouer un buffer avant l'appel à la fonction...

J'ai trouvé un tuto qui explique bien la manière dont Delphi gère les chaine de caractère :
http://reisubar.developpez.com/tutoriel/delphi/strings-pchars/

conclusion : Delphi n'utilise pas \0 pour marquer la fin d'une chaine.
il faut donc faire un RTRIM après le retour de la fonction dll, sinon on conserve l'espace résiduel de l'init de départ (STR$(255," ") par ex.)

Je vois que tu as galéré un petit peu pour définir PB... Smile il reste un résidu d'un test précédent que tu as du faire (la ligne juste au dessus du for fait crier Delphi, il suffit juste de la supprimer car elle ne sert à rien)

Bon, pour en revenir à notre langage Favori (Panoramic bien sûr !!) je vais utiliser ta dll pour finir mon utilitaire de conversion GPS CSV2GPX...
Je transmettrai le code si cela intéresse quelqu'un...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptySam 10 Juil 2010 - 10:41

Tu as raison pour la ligne mentionnée - un résidu que j'ai retiré maintenant. Je fais une procédure pour remlacer la boucle for et pour l'appeler partout où il faut retourner une chaîne - ce sera plus élégant.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMar 13 Juil 2010 - 16:22

Le programme Klaus que tu publies en Panoramic sur la page précédente, plante à le ligne 38 (vu en déplaçant un STOP pour connaitre l'endroit) avec l'erreur:
Citation :
List index out of bounds(0)
Je pense que cela doit être en rapport avec le répertoire, vu que l'autre fois je n'avais pas cette erreur.

J'ai refait l'essai oujourd'hui, parce que pris par le temps, je n'avais pas répondu, et que j'avais oublié.
Dans la liste affichée, un répertoire n'était pas affiché: $AVG8.VAULT$
Je pense que cela faisait partie de l'ancien anti-virus installé.
Pourquoi ce répertoire n'est pas dans la liste???. Est un BUG de Panoramic?.

L'oubli est réparé.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12279
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMar 13 Juil 2010 - 19:08

Je ne retrouve pas chez moi l'erreur dont tu parles. C'est peut-être lié à une mauvaise initialisation du repertoire de base en ligne 10 ? Je le remets en ligne avec 2 modifs: d'abord, deux chargements différents de la variable c$, puis l'ajout d'un antislash dans l'affichage des répertoires.

Pour ce qui est des répertoires qui ne s'affichent pas, cela peut être lié aux attibuts de ces répertoires. As-tu regardé s'ils sont cachés ou système ?

Voici le source:
Code:
label click_idlist

dim init$,c$,bStart
dim idList


idList=1
bStart=1
init$=DIR_CURRENT$
' c$="C:\Documents and settings\"
c$="C:\Program Files\"


LIST idList
WIDTH idList,width(0) : height idList,height(0)
on_click idlist,click_idlist
rem ********************************************************
rem * Prog principal
rem ********************************************************


DIR_CHANGE c$

repeat
  if bStart=1
    bStart=0
    c$=file_find_first$
  else
    c$=file_find_next$
  end_if
  if file_exists(c$)=0 and c$<>"_"
    ITEM_ADD idList,DIR_CURRENT$+"\"+c$          : ' j'ai ajoute be backslash ici !
  end_if
until c$="_"

file_find_close

' c$=ITEM_INDEX$(idList)
c$ = item_read$(idlist,1)

' repeat
' until ITEM_INDEX$(idList)<>""
' message ITEM_INDEX$(idList)
message "Premier: "+c$

DIR_CHANGE init$
end

click_idlist:
c$ = item_index$(idlist)
message "Choix: "+c$
' traitement ici
return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ EmptyMer 14 Juil 2010 - 14:27

Je viens de refaire l'essai de ton programme. C'était un fichier caché. J'ai enlevé les attributs caché et lecture seuls. Le problème reste le même, le fichier:$AVG8.VAULT$ ne s'affiche pas, et je ne pense pas que tu sois en cause.
Il n'y a plus d'erreur comme je l'ai signalé sur list...bound... je ne sais plus quoi.

Par contre lorsque on regarde le répertoire à la racine: "C:", on se retrouve avec 2 antislashs après le ":" alors que pour les autres répertoires, ce n'est pas le cas.
Revenir en haut Aller en bas
Contenu sponsorisé





'List index out of bounds (-1)' avec ITEM_INDEX$ Empty
MessageSujet: Re: 'List index out of bounds (-1)' avec ITEM_INDEX$   'List index out of bounds (-1)' avec ITEM_INDEX$ Empty

Revenir en haut Aller en bas
 
'List index out of bounds (-1)' avec ITEM_INDEX$
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» List index out of bounds (927)
» List index out of bounds (927)
» Bug quand on ne sélectionne rien dans un list avec item_inde
» Compilateur FBPano
» Créer une liste d'articles avec l'objet LIST

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: