Je suis en train de créer un programme sous PB 4.60 pour faire des exe des fichiers pb de codearchive...
J'ai un soucis, je ne sais pas comment démarrer les fonctions uniquement quand la fenêtre est affiché. Je pense (sauf erreur de ma part), qu'il faut créer un thread? J'ai un doute et je ne sais vraiment pas comment faire...
C'est la ligne RechercherFichiers(Repertoire) qui est mal placé. Voici mon code:
Code : Tout sélectionner
Global Repertoire.s,NFichier
Procedure CreerExe()
;1- Créer le répertoire C:\Compilateur
;2- Copier le répertoire Purebasic\Compilers\ dans C:\Compilateur\
;3- Copier le répertoire Purebasic\PureLibraries\ dans C:\Compilateur\
;4- Copier le répertoire Purebasic\Residents\ dans C:\Compilateur\
r.s="C:\Compil~1\"
File.s="tmp.pb"
Exe.s=ReplaceString(File,".pb",".exe")
Input.s=r+File
Output.s=r+Exe
Icon.s=r+"code.ico"
compiler.s="C:\Compil~1\Compilers\PBCompiler.exe"
Comp=RunProgram(compiler,Input+" "+"/EXE"+" "+Output+" "+"/ICON"+" "+Icon,"", #PB_Program_Open|#PB_Program_Read)
If Comp
While ProgramRunning(Comp)
If AvailableProgramOutput(Comp)
Output$+ReadProgramString(Comp)+Chr(13)
EndIf
Wend
CloseProgram(Comp)
EndIf
EndProcedure
Procedure NombreFichier(Path.s,DId=0);1894<>1850
If Right(Path,2)<>"\":Path=Path+"\":EndIf
If ExamineDirectory(DId,Path, "*.*")
While NextDirectoryEntry(DId)
Type= DirectoryEntryType(DId)
Select Type
Case #PB_DirectoryEntry_File
If GetExtensionPart(DirectoryEntryName(DId))="pb" Or GetExtensionPart(DirectoryEntryName(DId))="pbi"
NFichier+1
EndIf
Case #PB_DirectoryEntry_Directory
If DirectoryEntryName(DId)<>"." And DirectoryEntryName(DId)<>".."
NombreFichier(Path+DirectoryEntryName(DId),DId+1)
EndIf
EndSelect
Wend
FinishDirectory(DId)
EndIf
EndProcedure
Procedure RechercherFichiers(Path.s,SousRepertoire=1,DirectoryId=0)
If Right(Path,2)<>"\":Path=Path+"\":EndIf
If ExamineDirectory(DirectoryId,Path, "*.*");===================>On est obligé de mettre *.*
While NextDirectoryEntry(DirectoryId)
Type= DirectoryEntryType(DirectoryId)
Select Type
Case #PB_DirectoryEntry_File
If GetExtensionPart(DirectoryEntryName(DirectoryId))="pb"
SetGadgetText(100,Path+DirectoryEntryName(DirectoryId))
SetGadgetState(101,GetGadgetState(101)+1)
;File.s=DirectoryEntryName(DirectoryId)
;CopyFile(Repertoire+File,"C:\Compilateur\tmp.pb")
;CreerExe()
;File=ReplaceString(File,".pb",".exe")
;RenameFile("C:\Compilateur\tmp.exe",Repertoire+File)
EndIf
Case #PB_DirectoryEntry_Directory
If DirectoryEntryName(DirectoryId)<>"." And DirectoryEntryName(DirectoryId)<>".."
If SousRepertoire=1:RechercherFichiers(Path+DirectoryEntryName(DirectoryId),SousRepertoire,DirectoryId+1):EndIf
EndIf
EndSelect
Wend
FinishDirectory(DirectoryId)
EndIf
EndProcedure
;Rep.s=Space(255):GetCurrentDirectory_(255, @Rep):If Right(Rep,1)<>"\" : Rep+"\":EndIf
;CopyFile(Rep+"Code.ico","C:\Compilateur\Code.ico")
Repertoire="C:\CodeArchive\"
NombreFichier(Repertoire)
OpenWindow(0,0,0,460,65,"",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
SetWindowColor(0,16698567)
TextGadget(100,5,10,WindowWidth(0)-10,20,"jfksdmqkfljqklmsf")
ProgressBarGadget(101,GadgetX(100),GadgetY(100)+GadgetHeight(100)+5,GadgetWidth(100),20,0,100)
SetGadgetColor(100,#PB_Gadget_BackColor,16698567)
SetGadgetAttribute(101,#PB_ProgressBar_Maximum,NFichier)
RechercherFichiers(Repertoire);===========>C'EST ICI QUE C'EST MAL PLACE!!!
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Menu ; We only have one shortcut
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Default
EndSelect
Until Event=#PB_Event_CloseWindow
Code : Tout sélectionner
Comp=RunProgram(compiler,Input+" "+"/EXE"+" "+Output+" "+"/ICON"+" "+Icon,"", #PB_Program_Open|#PB_Program_Read)
If Comp
While ProgramRunning(Comp)
If AvailableProgramOutput(Comp)
Output$+ReadProgramString(Comp)+Chr(13)
EndIf
Wend
CloseProgram(Comp)
EndIf
Code : Tout sélectionner
RunProgram(compiler,Input+" "+"/EXE"+" "+Output+" "+"/ICON"+" "+Icon,"",#PB_Program_Wait)