Voici quelques fonctions de j'utilise dans mes projets pour ListIcon:
Code : Tout sélectionner
; Auteur RedLightLord
; Team Purelog
; Date 08/01/2008
; Version 1.0.0.1
; Sauvegarde et Chargement ListIcon
Declare.l ListIcon_GetColumnCount(Tableau)
Declare ListIconSaveTXT(Tableau.l,Fichier.s,Separateur.c)
Declare ListIconLoadTXT(Tableau.l,Fichier.s)
; -----------------------------------------------------------------------------
; Compte le nombre de colonnes d'un Tableau
; -----------------------------------------------------------------------------
Procedure.l ListIcon_GetColumnCount(Tableau)
Protected a.l,x
col.LV_COLUMN\mask = #LVCF_WIDTH
Repeat
a+1:x=SendMessage_(GadgetID(Tableau),#LVM_GETCOLUMN,a,@col)
Until x = 0
ProcedureReturn a
EndProcedure
; -----------------------------------------------------------------------------
; Tableau == #ListIcon
; Fichier == Chemin+NomdeFichier
; Separateur == code ascii du séparateur par defaut c'est le point-virgule
; -----------------------------------------------------------------------------
Procedure ListIconSaveTXT(Tableau.l,Fichier.s,Separateur.c=';')
Protected HandleFile,dummy.s,j.l,i.l
HandleFile=CreateFile(#PB_Any,Fichier)
If HandleFile
; Sauve les données
For i=0 To CountGadgetItems(Tableau)-1
dummy=""
For j=0 To ListIcon_GetColumnCount(Tableau)-1
If j<ListIcon_GetColumnCount(Tableau)-1
dummy+GetGadgetItemText(Tableau,i,j)+Chr(Separateur)
Else
dummy+GetGadgetItemText(Tableau,i,j)
EndIf
Next j
WriteStringN(HandleFile,dummy,#PB_Ascii)
Next i
FlushFileBuffers(HandleFile)
CloseFile(HandleFile)
EndIf
EndProcedure
; -----------------------------------------------------------------------------
; Efface le Tableau et charge les données dedans
; -----------------------------------------------------------------------------
Procedure ListIconLoadTXT(Tableau.l,Fichier.s)
Protected HandleFile.l,dummy.s
If FileSize(Fichier)<>-1
Handlefile=ReadFile(#PB_Any,Fichier)
If HandleFile>0
ClearGadgetItemList(Tableau)
While Eof(HandleFile)=0
dummy=ReadString(HandleFile,#PB_Ascii)
ReplaceString(dummy,";",#LF$,2,1)
ReplaceString(dummy,#TAB$,#LF$,2,1)
AddGadgetItem(Tableau,-1,dummy)
Wend
CloseFile(HandleFile)
EndIf
Else
MessageRequester("Informations","Le fichier "+Fichier+" n'existe pas.",#PB_MessageRequester_Ok)
EndIf
EndProcedure
Code : Tout sélectionner
; Auteur RedLightLord
; Team Purelog
; Date 29/02/2008
; Version 1.0.0.5
; Fonction de statistiques pour ListIcon
;
; Valeur mini
; Valeur maxi
; Valeur d'écart-type
; Valeur moyenne
;
; Toutes ces valeurs sont des doubles
; -----------------------------------------------------------------------------
; TableauDeValeurs == ID du ListIcon
; IndexColonne == Les calculs se feront sur cette colonne
; IndexElement1 == Depuis cette ligne
; IndexElement2 == Jusqu'a cette ligne
; -----------------------------------------------------------------------------
Declare.d MaxD(n1.d,n2.d)
Declare.d MinD(n1.d,n2.d)
; -----------------------------------------------------------------------------
; Valeur Maxi
; -----------------------------------------------------------------------------
Procedure.d MaxD(n1.d,n2.d)
If n1>n2
ProcedureReturn n1
Else
ProcedureReturn n2
EndIf
EndProcedure
; -----------------------------------------------------------------------------
; Valeur mini
; -----------------------------------------------------------------------------
Procedure.d MinD(n1.d,n2.d)
If n1<n2
ProcedureReturn n1
Else
ProcedureReturn n2
EndIf
EndProcedure
Structure Freq
Valeur.d
Nbr.l
EndStructure
Global NewList Frequence.Freq()
Declare Calcul_Frequence(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_Moyenne(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_EcartType(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_Mini(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Declare.d Calcul_Maxi(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Procedure Calcul_Frequence(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Protected Dummy.s,Valeur.f,i.l
ClearList(Frequence())
; Récupération de toutes les valeurs
For i=IndexElement To CountGadgetItems(TableauDeValeurs)-1
AddElement(Frequence())
Dummy=GetGadgetItemText(TableauDeValeurs,i,IndexColonne)
ReplaceString(Dummy,",",".",2,1)
With Frequence()
\Valeur=ValF(Dummy)
\Nbr=0
EndWith
Next i
; Calculs les frequences des valeurs
If CountList(Frequence())>0
SortStructuredList(Frequence(), 1, OffsetOf(Freq\Valeur), #PB_Sort_Float)
For i=1 To CountList(Frequence())
SelectElement(Frequence(),i-1)
Valeur=Frequence()\Valeur
ForEach Frequence()
If Valeur=Frequence()\Valeur
Frequence()\Nbr+1
EndIf
Next
Next i
; On efface les doublons
ResetList(Frequence())
If CountList(Frequence())>1
SortStructuredList(Frequence(), 0, OffsetOf(Freq\Valeur), #PB_Sort_Float)
For i=1 To CountList(Frequence())
SelectElement(Frequence(),i-1)
Valeur=Frequence()\Valeur
While NextElement(Frequence())
If Frequence()\Valeur=Valeur
DeleteElement(Frequence(),1)
EndIf
Wend
Next i
EndIf
EndIf
EndProcedure
Procedure.d Calcul_Moyenne(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Protected Somme.d,i.l,Dummy.s
Somme=0
For i=IndexElement1 To IndexElement2
Dummy=GetGadgetItemText(TableauDeValeurs,i,IndexColonne)
ReplaceString(Dummy,",",".",2,1)
Somme+ValD(Dummy)
Next i
ProcedureReturn Somme/CountGadgetItems(TableauDeValeurs)
EndProcedure
Procedure.d Calcul_EcartType(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Protected i.l,Moyenne.d,Somme.f,Dummy.s
Moyenne=Calcul_Moyenne(TableauDeValeurs,IndexColonne,IndexElement1,IndexElement2)
For i=IndexElement1 To IndexElement2
Dummy=GetGadgetItemText(TableauDeValeurs,i,IndexColonne)
ReplaceString(Dummy,",",".",2,1)
Somme+Pow(Moyenne-ValF(Dummy),2)
Next i
ProcedureReturn Sqr(Somme/CountGadgetItems(TableauDeValeurs))
EndProcedure
Procedure.d Calcul_Mini(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Protected i.l,ValeurMini.d
ValeurMini=999999.0
For i=IndexElement1 To IndexElement2
ValeurMini=MinD(ValD(GetGadgetItemText(TableauDeValeurs,i,IndexColonne)),ValeurMini)
ProcedureReturn ValeurMini
Next i
EndProcedure
Procedure.d Calcul_Maxi(TableauDeValeurs.l,IndexColonne.l,IndexElement1.l,IndexElement2.l)
Protected i.l,ValeurMaxi.d
ValeurMaxi=0.0
For i=IndexElement1 To IndexElement2
ValeurMaxi=MaxD(ValeurMaxi,ValD(GetGadgetItemText(TableauDeValeurs,i,IndexColonne)))
ProcedureReturn ValeurMaxi
Next i
EndProcedure
Mais bon, elles pourront aidées certains
@+
Eric