Je vous propose un petit programme sans prétention qui permet de renumeroter dans un ordre croissant des photos d'un même répertoire.
Ce programme rajoute trois digits de 000 à 999 devant les anciens noms de photo, mais il est possible de faire marche arrière par un bouton spécifique "Dénumérotation".
Par sécurité copier l'ensemble des photos à trier dans un répertoire nommé à votre convenance.
La dimmension des vignettes est variable en fonction du nombre de photos à trier avec un mini !
Ce prog n'est pour l'instant conçu que pour une résolution de 1280*1024 désolé pour ceux qui n'ont pas accès à cette résolution mais c'est un mini pour faire ce genre de boulot, ainsi qu'une machine rapide 2 Go mini, avec une mémoire confortable de 512 Mo et plus
Toute fois il ne devrait pas être trés difficile de modifier la chose, toutes les constantes sont introduites dans la procedure Variables .
Il est tout aussi possible de trier des photos bmp ou autre en modifiant deux paramètres.
Principe :
Lancer le programme.
Attendre la fin de l'affichage
Cliquer sur la photo à déplacer.
Cliquer à l'endroit ou vous voulez inserrer cette photo.
Lorsque votre tri vous parait satisfaisant cliquer sur le bouton "Numérotation" Celui-ci n'est visible que lorsque vous avez replacé une photo supprimée de sa position.
Si vous arréter le programme au milieu de son fonctionnement aucun soucis!
Merci de votre indulgence :

Code : Tout sélectionner
Global Marge, HBp, LBp, IdBout, Esp, PasV, PasH,LFen, HFen ,LScr ,HScr ,LFSr ,HFSr, PasS,NLigne, NColonne, NbrPhotos
Global NumPhoto, thread, DernierePh,Corbeille, NomChemin.s, name.s, Index
Dim Photo.s(1001)
Dim Image(1001)
Dim Bouton(1001)
Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
Balloon\hWnd=GadgetID(Gadget)
Balloon\uId=GadgetID(Gadget)
Balloon\lpszText=@Text$
SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
If Title$ > ""
SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
EndIf
EndProcedure
Procedure Max(Val1, Val2)
If Val1 > Val2
Ret =Val1
Else
Ret= Val2
EndIf
ProcedureReturn Ret
EndProcedure
Procedure Min(Val1, Val2)
If Val1 < Val2
Ret =Val1
Else
Ret= Val2
EndIf
ProcedureReturn Ret
EndProcedure
Procedure Variables()
Marge = 5
Esp = 2
LFen = 1280
HFen = 960
LScr = 1255
LFSr = 1230
IdBout = 0
PhLigne = Min(15,Sqr(NbrPhotos)+1)
PhLigne = Min(PhLigne,NbrPhotos)
LBp = (LFSr-10-(Esp*(PhLigne-1))-(2*Marge)) /PhLigne
HBp = LBp * 0.75
PasH = LBp + Esp
PasV = HBp + Esp
PasS = PasV
NLigne = (NbrPhotos)/PhLigne
If NLigne*PhLigne<NbrPhotos
NLigne+1
EndIf
NColonne = PhLigne
NLiAff = Min((HFen-(2*Marge))/PasV,NLigne)
HScr = (Marge*2)+(NLiAff * PasV)+5
HFSr = (Marge*2)+(PasV * NLigne)
NumPhoto = 0
Corbeille= 0
For n=1 To 1001 : Bouton(n)= n : Next
DernierePh = 1001
EndProcedure
Procedure.l ListeJpg(directory.s )
Static num.l
num=-1
id.l = ExamineDirectory( #PB_Any, directory, "*.jpg")
Repeat
type.l = NextDirectoryEntry()
If type = 0 : ProcedureReturn num : EndIf
name.s = DirectoryEntryName()
full.s = directory + "\" + name
Select type
Case 1 : num + 1
Photo(num)=name
EndSelect
ForEver
EndProcedure
Procedure Open_Window_0()
Titre.s="Tri des Photos Jpg "+Str(NColonne)+" * "+Str(NLigne)+" Pour "+Str(NbrPhotos)+" Images"
If OpenWindow(0, 0, 0, LFen, HFen, #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_TitleBar , Titre)
If CreateGadgetList(WindowID())
ButtonGadget(3000, 2500,2900, 100,50, "Numérotation")
ButtonGadget(3001, 700,900, 100,50, "Dénumérotation")
ButtonImageGadget(1001, 1000+LFen-10-LBp, HFen-10-HBp, LBp, HBp, 0)
ScrollAreaGadget(2000, Marge, Marge,LScr,HScr, LFSr, HFSr, PasS)
For lig=0 To NLigne-1
For Col=0 To NColonne-1
If IdBout=NbrPhotos : Col=11 : lig = 100 : EndIf
ButtonImageGadget(IdBout, Marge+(Col*PasH), 5+(lig*PasV), LBp, HBp, 0)
BalloonTip(WindowID(), IdBout, Photo(IdBout), "", #TOOLTIP_NO_ICON)
IdBout+1
Next
Next
EndIf
EndIf
EndProcedure
Procedure AlertThread(Param)
While NumPhoto < NbrPhotos
CreateImage(NumPhoto,LBp,HBp)
Image(NumPhoto)=LoadImage(NumPhoto,NomChemin+Photo(NumPhoto))
If ImageHeight()<ImageWidth()
Image(NumPhoto)=ResizeImage(NumPhoto,LBp,HBp)
Else
Image(NumPhoto)=ResizeImage(NumPhoto,HBp*0.75,HBp)
EndIf
SetGadgetState(NumPhoto,Image(NumPhoto))
NumPhoto+1
Delay(10)
Wend
KillThread(thread)
EndProcedure
Procedure affiche()
For n=0 To NbrPhotos-1
SetGadgetState(n,Image(n))
BalloonTip(WindowID(), n, Photo(n), "", #TOOLTIP_NO_ICON)
Next
SetGadgetState(1001,Image(1001))
If Image(1001)<>0
ResizeGadget(3000, 2500,2900, 100,50)
ResizeGadget(3001, 2700,2900, 100,50)
ResizeGadget(1001, LFen-10-LBp, HFen-10-HBp, LBp, HBp)
Else
ResizeGadget(3000, 500,900, 100,50)
ResizeGadget(3001, 700,900, 100,50)
ResizeGadget(1001, 1000 + LFen-10-LBp, 1000+HFen-10-HBp, LBp, HBp)
EndIf
EndProcedure
Procedure Arrange(Gadget)
If Corbeille=0
Corbeille=1
Image(DernierePh)=Image(Gadget)
Photo(DernierePh) = Photo(Gadget)
For n = Gadget To NbrPhotos-1
Image(n) = Image(n+1)
Photo(n) = Photo(n+1)
Next
Photo(n)=""
Image(n)=0
Else
Corbeille=0
For n = NbrPhotos-1 To Gadget Step -1
Image(n+1) = Image(n)
Photo(n+1) = Photo(n)
Next
Image(Gadget)=Image(DernierePh)
Photo(Gadget)=Photo(DernierePh)
Photo(DernierePh)=""
Image(DernierePh)=0
EndIf
affiche()
EndProcedure
Procedure Denum()
Index=10001
For n=0 To NbrPhotos
name=Photo(n)
If Len(name) > 7
a = Asc(Mid(name,1,1))
b = Asc(Mid(name,2,1))
c = Asc(Mid(name,3,1))
If a > 47 And a < 58
If b > 47 And b < 58
If c > 47 And c < 58
name=Mid(name,4,30)
EndIf
EndIf
EndIf
EndIf
RenameFile(NomChemin+Photo(n),NomChemin+name)
Index+1
Next
EndProcedure
Procedure Renum()
Index=10001
For n=0 To NbrPhotos
name=Photo(n)
If Len(name) > 7
a = Asc(Mid(name,1,1))
b = Asc(Mid(name,2,1))
c = Asc(Mid(name,3,1))
If a > 47 And a < 58
If b > 47 And b < 58
If c > 47 And c < 58
name=Mid(name,4,30)
EndIf
EndIf
EndIf
EndIf
RenameFile(NomChemin+Photo(n),NomChemin+Right(Str(Index),3)+name+"0")
Photo(n)=Right(Str(Index),3)+name
Index+1
Next
For n=0 To NbrPhotos
RenameFile(NomChemin+Photo(n)+"0",NomChemin+Photo(n))
Next
End
EndProcedure
UseJPEGImageDecoder()
NomChemin.s = PathRequester("Choix des photos", "c:\")
NbrPhotos = ListeJpg(NomChemin)+1
If NbrPhotos = 0
End
EndIf
Variables()
Open_Window_0()
thread=CreateThread(@AlertThread(), 154)
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
GadgetID = EventGadgetID()
If GadgetID => 0 And GadgetID < NbrPhotos ; Tri les photos
Arrange(GadgetID)
ElseIf GadgetID = 3000 ;Numérote
Renum()
ElseIf GadgetID = 3001 ;Dénumerote
Denum()
End
EndIf
EndIf
Until Event = #PB_EventCloseWindow
End