Page 1 sur 2

[Résolu] Chemin pour charger un programme

Publié : sam. 05/juil./2014 9:25
par Micoute
Bonjour à tous,

je viens à votre secours, parce que je ne comprend pas pourquoi je dois indiquer le chemin complet pour charger quoi que ce soit (sprite, image, son, programme, etc...)

Le problème vient je pense de la version 5.30, j'en suis à la b5, mais ça le fait depuis le début et je suis surpris d'être obligé d'indiquer le même chemin que le programme lui-même !

Si vous avez une solution, pouvez-vous la partager avec moi, s'il vous plaît, je vous en remercierait grandement !

Merci déjà par anticipation.

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 9:34
par TazNormand
Salut Micoute

Je ne vois rien d'anormal là-dedans. Quelque soit le langage utilisé, tu es obligé de dire où aller chercher les données. Tu peux très bien installer ton programme dans "Program Files" et aller chercher des données ailleurs.

Pour le chemin de ton application, utilises GetCurrentDirectory()

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 9:40
par Backup
il n'a peut etre pas si tord

j'ai pas vérifié , mais ce serait normal que par defaut ça commence par regarder le Path$ du prg ... non ?

bon il y a une fonction pour ça :)

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 9:48
par G-Rom
Reglage du compilateur PB ? Option du compilateur -> compiler exécuter

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 10:38
par falsam
Normalement je stocke mes ressources dans un dossier media ou asset.

J'ai fait un test avec la 5.30 en incluant une image dans le même dossier que le code et je n'ai pas à indiqué le chemin de mon image ni même utilisé GetCurrentDirectory() et je n'ai rien changé à la configuration de l'ide : Je n'ai pas le souci que rencontre Micoute.

Mon code Pure Punch utilise une image et un son qui se trouve dans le même dossier que le code.

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 11:22
par Micoute
Je vous remercie de vos conseils avisés, mais ça ne règle rien à mon problème et je suis toujours obligé de taper le chemin entier et comme chantait Joe : qu'il est long ton chemin papa !

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 11:31
par TazNormand
Peux-tu être un peu plus explicite ?

si tu as sauvegardé ton code source dans un dossier, disons C:\MicouteProg, et que tu stockes tes "ressources" dans ce dossier, ton programme ne va pas chercher dans ce dossier, tu es obligé de le préciser ?

un petit bout de code pour nous montrer ton problème serait le bienvenu (genre un chargement d'un fichier texte bidon)

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 11:35
par falsam
J'ai fais une installation de la version 5.30 Beta 6 dans un nouveau dossier et je n'ai pas rencontré ton souci.

Peux tu refaire une installation de Pure Basic dans un nouveau dossier ? Exemple : C:\Program Files (x86)\PureBasic530
Micoute a écrit :sprite, image, son, programme, etc...
Tu fais bien référence à un code 2d ?

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 12:15
par Micoute
Pour que tout le monde comprenne, je reprend le code de falsam.

Code : Tout sélectionner

;*****************************************************************************
;*
;* July-August 2014 PurePunch contest
;* PureBasic 5.22
;* 50 lines of 80 chars, 2 months delay
;*
;* Name     : Where is the turtle
;* Author   : falsam   
;* Date     : Jul 02, 2014 - Update Jul 04, 2014
;* Notes    : Search and click on a turtle. A turtle found adds time and a tree.
;*
;*****************************************************************************
Structure x:s.i:x.i:y.i:a.i:EndStructure
Global fg,f1,f2,Dim m(15),NewList s.x(),ct,tf,ti,ns,li,i,ev,mr,ac=-1,bs,bo
Procedure f(w):Protected fc.b, mx, my
mx=WindowMouseX(w):my=WindowMouseY(w):MouseLocate(mx,my)
If mx>0 And mx<WindowWidth(w,1)-1 And my>0 And my<WindowHeight(w,1)-1
ReleaseMouse(0):fc=1:Else:fc=0:ReleaseMouse(1):EndIf
ProcedureReturn fc:EndProcedure
Procedure r(i,j):ProcedureReturn Random(i,j):EndProcedure
Procedure ps(f,p):SetSoundFrequency(0,f):SoundPan(0,p):PlaySound(0):EndProcedure
fg=LoadFont(-1,"Arial",20):f1=LoadFont(-1,"Arial",16)
f2=LoadFont(-1,"Arial",50,256)
InitSprite():InitKeyboard():InitMouse():InitSound():UsePNGImageDecoder()
OpenWindow(0,0,0,800,600,"Turtle",13107201):AddWindowTimer(0, 0, 1000)
OpenWindowedScreen(WindowID(0),0,0,800,600):LoadSound(0,"C:\Programmation\Pure Punch 2014\falsam\s.wav")
For i=0 To 15:m(i)=LoadSprite(-1,"C:\Programmation\Pure Punch 2014\falsam\s.png",8):ClipSprite(m(i),i*64,0,64,64):Next
ClipSprite(m(8),0,130,64,64):ClipSprite(m(9),65,130,64,64)
ClipSprite(m(10),129,130,64,64):ClipSprite(m(11),0,360,15,23)
ClipSprite(m(12),0,280,48,48):ClipSprite(m(13),200,280,32,32)
ClipSprite(m(14),280,280,32,32):ClipSprite(m(15),280,130,32,32)
Repeat:Repeat:ev=WindowEvent():If ev=13110 And ti>0:ti=ti-1:EndIf:
If ev=13116:End:EndIf:Until ev=0
FlipBuffers():ExamineKeyboard():ExamineMouse():ClearScreen($18D3D3D3) 
If ac=-1:ac=0:ct=10:ns=1:tf=0:ti=5:li=1:ps(44100,0):EndIf
If ns=1:ClearList(s()):For i=0 To ct:AddElement(s())
s()\s=m(r(7,0)):s()\x=r(692,64):s()\y=r(472,128):s()\a=r(255,128):Next
SelectElement(s(),0):s()\s=m(8):s()\x=r(448,128):s()\y=r(384,128):s()\a=255:ns=0
EndIf:ForEach s():DisplayTransparentSprite(s()\s,s()\x,s()\y,s()\a):Next
SelectElement(s(),0):DisplayTransparentSprite(m(12),380,540)
DisplayTransparentSprite(m(13),610,5):DisplayTransparentSprite(m(14),710,5)
DisplayTransparentSprite(m(15),515,5):If KeyboardReleased(19):ac=-1:EndIf
If f(0):DisplayTransparentSprite(m(11),MouseX(),MouseY()):EndIf
If MouseButton(1):If mr=0:mr=1
If SpriteCollision(m(11),MouseX(),MouseY(),m(12),380,540):ac=-1
ElseIf ac<>-2:If SpriteCollision(m(11),MouseX(),MouseY(),m(8),s()\x,s()\y)
tf+1:ps(r(50000,10000),r(300,100)-200):ti+2:ns=1:ct+1
Else:ac=2:EndIf:EndIf:EndIf:Else:mr=0:EndIf
If tf>49 And bo=0:li+1:bo+1:EndIf:If tf>79 And bo=1:li+1:bo+1:EndIf
If ti=0 And ac<>-2 Or ac<>-1:ac=2:mr=0:EndIf   
If ac=2:If li>0:li-1:ac=0:s()\s=m(9)
Else:ti=0:ac=-2:ps(4700,0):s()\s=m(10):EndIf:EndIf
StartDrawing(ScreenOutput()):DrawingMode(1):DrawingFont(FontID(f2))
If ac=-2:RotateSprite(m(12),1,1):DrawText(200,280,"GAME OVER!",$18808080): EndIf
DrawingFont(FontID(fg)):DrawText(10, 10, "Where is the turtle",$000000)
DrawText(560,5,Str(li),$000000):DrawText(650,5,Str(tf),$000000)
DrawText(750,5,Str(ti),$000000):DrawingFont(FontID(f1))
DrawText(20,560,"falsam - PurePunch Contest 2014",$000000)
DrawText(610,560,"Escape key : End",$000000)
StopDrawing():Until KeyboardPushed(1)
Je pense que là, toute le monde à compris : comme les 2 programmes appelés se trouvent dans le même répertoire que le programme principal, on ne devrait pas avoir à indiquer le chemin !

Chose curieuse, avant, avec la version 5.22 LTS, ça fonctionnait très bien, mais plus maintenant, là je pense au fichier de préférence chargé à l'initialisation de l'EDI (Environnement de Développement Intégré) qui a été modifié par la dernière version installée.

J'espère avoir été assez explicite et je vous remercie à nouveau pour le temps précieux que vous dépensez pour moi.

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 12:34
par Backup
entre parentheses , evitez d'installer PB dans C:\ ..... vu qu'avec Height l'ecriture dans C:\ pose probleme

de preference utilisez une partition ex : E:\

ensuite utilisez un dossier par Version de Purebasic

exemple ;

E:\Purebasic_3.92\x86\..... ;pour Purebasic 32bits
E:\Purebasic_3.92\x64\..... ;pour Purebasic 64bits

E:\Purebasic_400\x86 ;pour Purebasic 32bits
E:\Purebasic_400\x64 ;pour Purebasic 64bits

ect ....

et un seul dossier EPB :mrgreen:

E:\EPB\ .....


avantage de la partition , si votre systeme plante ... un reformatage n'effacera pas vos Purebasic, ni votre boulot

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 14:26
par Micoute
Dobro a écrit :entre parentheses , evitez d'installer PB dans C:
Hélas, je n'ai pas le choix, parce je ne suis pas parvenu à partitionner mon disque dur !

Avant quand j'installais Windows sur mon HDD, je bootais sur mon CD-ROM qui me proposait de formater mon disque, de le partitionner et de choisir la partition où je voulais installer mon OS, mais là, rien. Donc C: sur toute la ligne et je ne sais même pas comment je vais pouvoir faire pour partitionner mon disque, c'est dire que j'ai régressé, vu que je n'en suis plus à mon premier disque dur !

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 14:44
par Ar-S
Tu peux toujours tenter de créer une petite partition (selon la place qu'il te reste) en faisant un
clique droit / gérer sur ton poste de travail (ordinateur sur OS > xp) puis en choisissant gestion des disques.

Pour ton soucis de path je n'ai pas installé la 5.30 donc tout ce qui a été dit au dessus est logique. Vu que Falsam a essayé avec la 5.30 sans problème ça doit venir de ton installation. (ou du paramétrage de l'ide)

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 16:15
par Micoute
Merci énormément Ar-s pour cette manip, ça m'a permis de créer une partition réservée à la programmation, mais ça n'a pas réglé le problème !

Par contre j'ai lu ceci sur le forum anglais:
Le (X) IncludeFile et IncludeBinary ont changé leur comportement pour les chemins relatifs.
http://www.purebasic.fr/english/viewtop ... 14&t=59459

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 17:07
par falsam
ça serait quand même bien si tu pouvais poster un code simplifié avec lequel tu rencontres ce problème.

Pourrais tu télécharger le fichier ci-dessous. Il contient un code tres simple qui charge une image et l'affiche dans un environnement 2D.
:arrow: http://s242132022.onlinehome.fr/Downloa ... tetest.zip

Décompresse le dossier et exécute le code sans rien changer et dire si ça fonctionne.

Re: Chemin pour charger un programme

Publié : sam. 05/juil./2014 17:49
par Micoute
Merci falsam, je ne comprend plus, car là, sa fonctionne parfaitement !

Peut-être est-ce du au fait que j'ai créer une nouvelle partition dans laquelle j'ai installé PureBasic et recopié tout mes fichiers, ce qui m'oblige à changé environ 6000 chemins, du coup, je suis très occupé et ça m'amuse !