Voila ce que cela donne actuelement
Voici le code du fichier a inclure
Code : Tout sélectionner
DeclareModule ZoneRepette
Enumeration
#TextGadgetType
#StringGadgetType
#StringValueType
#IntegerValueType
EndEnumeration
Declare CreateZoneRepetee(myID.i,myPosX.i,myPosY.i,myWhith.i,myHeight.i,myLigneHeight.i)
Declare AddGadget(ID_Zone,myID,myType.i,myValueType.i,myPosX.i,myPosY.i,myWhith.i,myHeight)
Declare Affiche(ID_Zone)
Declare AjouteLigne(ID_Zone, Array Valeur(1))
Declare SetFontGadget(ID_Zone,ID_Gadget,ID_Font)
Declare teste()
EndDeclareModule
Module ZoneRepette
Nbr_ZoneRepette.i
Structure Gadget
myID.i
ID_MEM.i
PosX.i
PosY.i
Whith.i
Heiht.i
myValueType.i
TypeGadet.i
IdFont.i
EndStructure
Structure Ligne
ID_Canvas.i
ID_Gadget.i
NumLigne.i
Value$
EndStructure
Structure zone_Repetee_Data
ID_Zone.i
ID_Canvas.i
PosX.i
PosY.i
Whith.i
Heiht.i
LigneHeight.i
NbrGadget.i
NbrLigne.i
NbrItem.i
Array myGadget.Gadget(0)
Array myLigne.Ligne(0)
EndStructure
Global Dim myZoneRepette.zone_Repetee_Data(0)
Procedure CreateZoneRepetee(myID.i,myPosX.i,myPosY.i,myWhith.i,myHeight.i,myLigneHeight.i)
If myLigneHeight<=0
MessageRequester("Erreur CreateZoneRepetee","Veuillez renseigner une hauteur de ligne positive...")
ProcedureReturn #False
EndIf
;Teste si une fenêtre est ouverte et si les dimension ne dépasse pas la fenêtre
ID_Windows=GetActiveWindow()
If ID_Windows=-1
MessageRequester("Erreur CreateZoneRepetee","Vous devez préalablement ouvrir une fenêtre...")
ProcedureReturn #False
EndIf
If WindowHeight(ID_Windows)<myHeight
MessageRequester("Erreur CreateZoneRepetee","La Hauteur de la zone doit être inférieur à la hauteur de fenêtre...")
ProcedureReturn #False
EndIf
If WindowWidth(ID_Windows)<myWhith
MessageRequester("Erreur CreateZoneRepetee","La Largueur de la zone doit être inférieur à la largueur de fenêtre...")
ProcedureReturn #False
EndIf
;-Teste si la zone répétée existe déjà
For N=0 To ArraySize(myZoneRepette())
If myZoneRepette(Compteur)\ID_Zone=myID
MessageRequester("Erreur CreateZoneRepetee","La Zone répétée "+myID+" existe déjà...")
ProcedureReturn #False
EndIf
Next
Nbr_ZoneRepette+1 ;Incrémente le nbr de zone répétée
;-Initialise la zone répétée
myZoneRepette(Nbr_ZoneRepette-1)\ID_Zone=myID
myZoneRepette(Nbr_ZoneRepette-1)\PosX=myPosX
myZoneRepette(Nbr_ZoneRepette-1)\PosY=myPosY
myZoneRepette(Nbr_ZoneRepette-1)\Whith=myWhith
myZoneRepette(Nbr_ZoneRepette-1)\Heiht=myHeight
myZoneRepette(Nbr_ZoneRepette-1)\LigneHeight=myLigneHeight
ProcedureReturn #True
EndProcedure
Procedure AddGadget(ID_Zone,myID,myType.i,myValueType.i,myPosX.i,myPosY.i,myWhith.i,myHeight)
;-Pointe sur la zone répétée
For N=0 To ArraySize(myZoneRepette())
If myZoneRepette(N)\ID_Zone=ID_Zone
;-Teste si le gadget ne déborde pas de la ligne
If myPosY+myHeight>myZoneRepette(N)\LigneHeight
MessageRequester("Erreur AddGadget","Le gadget déborde en hauteur...")
ProcedureReturn #False
EndIf
;-Ajout du nouveau gadget
ReDim myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\Heiht=myHeight
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\Whith=myWhith
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\PosX=myPosX
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\PosY=myPosY
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\TypeGadet=myType
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\myID=myID
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\ID_MEM=myZoneRepette(N)\NbrGadget
myZoneRepette(N)\myGadget(myZoneRepette(N)\NbrGadget)\myValueType=myValueType
myZoneRepette(N)\NbrGadget+1
ProcedureReturn #True
EndIf
MessageRequester("Erreur AddGadget","La zone répétée "+ID_Zone+" n'existe pas...")
ProcedureReturn #False
Next
EndProcedure
Procedure Affiche(ID_Zone)
;Pointe sur la zone répétée
For N=0 To ArraySize(myZoneRepette())
If myZoneRepette(N)\ID_Zone=ID_Zone
X=myZoneRepette(N)\PosX
Y=myZoneRepette(N)\PosY
W=myZoneRepette(N)\Whith
H=myZoneRepette(N)\Heiht
;Parcours de tous les gadget et recherche du gadget le plus à droite (largueur comprise)
For T=0 To myZoneRepette(N)\NbrGadget-1
WTmp=myZoneRepette(N)\myGadget(T)\PosX+myZoneRepette(N)\myGadget(T)\Whith
If WTmp>WGad
WGad=WTmp
EndIf
Next
;Si il y a un gadget plus à droite que la largueur on prend la dimention du gadget
If WGad>myZoneRepette(N)\Whith
WI=WGad
Else
WI=(myZoneRepette(N)\Whith-5)
EndIf
HI=myZoneRepette(N)\LigneHeight* myZoneRepette(N)\NbrLigne
myZoneRepette(N)\ID_Canvas=ScrollAreaGadget(#PB_Any,X,Y,W,H,WI,HI,myZoneRepette(N)\LigneHeight,#PB_ScrollArea_Flat)
OpenGadgetList(myZoneRepette(N)\ID_Canvas)
;Pour toutes les lignes
For I=1 To myZoneRepette(N)\NbrLigne
;Parcours de toutes les lignes
For B=0 To ArraySize(myZoneRepette(N)\myLigne())
If myZoneRepette(N)\myLigne(B)\NumLigne=I
R=myZoneRepette(N)\myLigne(B)\ID_Gadget
X=myZoneRepette(N)\myGadget(R)\PosX
Y=myZoneRepette(N)\myGadget(R)\PosY+
myZoneRepette(N)\LigneHeight*(myZoneRepette(N)\myLigne(B)\NumLigne-1)
W=myZoneRepette(N)\myGadget(R)\Whith
H=myZoneRepette(N)\myGadget(R)\Heiht
Debug(myZoneRepette(N)\myLigne(B)\NumLigne)
Select myZoneRepette(N)\myGadget(R)\TypeGadet
Case #TextGadgetType
myZoneRepette(N)\myLigne(B)\ID_Canvas=TextGadget(#PB_Any,X,Y,W,H,myZoneRepette(N)\myLigne(B)\Value$)
Case #StringGadgetType
Default
MessageRequester("Erreur Affiche","Le Type de gadget "+Str(myZoneRepette(N)\myGadget(R)\TypeGadet)+" n'est pas gèré...")
ProcedureReturn #False
EndSelect
SetGadgetFont(myZoneRepette(N)\myLigne(B)\ID_Canvas,FontID(myZoneRepette(N)\myGadget(myZoneRepette(N)\myLigne(B)\ID_Gadget)\IdFont))
EndIf
Next
Next
ProcedureReturn #True
EndIf
Next
MessageRequester("Erreur Affiche","La zone répétée "+ID_Zone+" n'existe pas...")
ProcedureReturn #False
EndProcedure
Procedure AjouteLigne(ID_Zone, Array Valeur$(1))
;-Pointe sur la zone répétée
For N=0 To ArraySize(myZoneRepette())
If myZoneRepette(N)\ID_Zone=ID_Zone
;Teste le nombre de paramètre passé en paramètre
If ArraySize(Valeur$())<>(myZoneRepette(N)\NbrGadget-1)
MessageRequester("Erreur AjouteLigne","Nombre de valeur passées incorrect")
ProcedureReturn #False
EndIf
EndIf
myZoneRepette(N)\NbrLigne+1
For R=0 To myZoneRepette(N)\NbrGadget-1
ReDim myZoneRepette(N)\myLigne(myZoneRepette(N)\NbrItem)
; Debug(ArraySize(myZoneRepette(N)\myLigne()) )
myZoneRepette(N)\NbrItem+1
myZoneRepette(N)\myLigne(myZoneRepette(N)\NbrItem-1)\NumLigne=myZoneRepette(N)\NbrLigne
myZoneRepette(N)\myLigne(myZoneRepette(N)\NbrItem-1)\Value$=Valeur$(R)
myZoneRepette(N)\myLigne(myZoneRepette(N)\NbrItem-1)\ID_Gadget=myZoneRepette(N)\myGadget(R)\ID_MEM
Next
ProcedureReturn #True
Next
MessageRequester("Erreur AjouteLigne","La zone répétée "+ID_Zone+" n'existe pas...")
ProcedureReturn #True
EndProcedure
Procedure SetFontGadget(ID_Zone,ID_Gadget,ID_Font)
For I=0 To ArraySize(myZoneRepette())
If myZoneRepette(I)\ID_Zone=ID_Zone
For N=0 To ArraySize(myZoneRepette(I)\myGadget())
If myZoneRepette(I)\myGadget(N)\myID=ID_Gadget
myZoneRepette(I)\myGadget(N)\IdFont=ID_Font
EndIf
Next
EndIf
Next
EndProcedure
Procedure teste()
For N=0 To ArraySize(myZoneRepette())
For I=0 To ArraySize(myZoneRepette(N)\myLigne())
Debug (myZoneRepette(N)\myLigne(I)\Value$)
Next
Next
EndProcedure
EndModule
Code : Tout sélectionner
XIncludeFile "ZoneRepetee.pbi"
LoadFont(0,"Arial",14)
LoadFont(1,"Arial",10)
OpenWindow(0,0,0,800,400,"Teste",#PB_Window_Maximize|#PB_Window_SystemMenu)
ZoneRepette::CreateZoneRepetee(1,0,0,600,200,40)
ZoneRepette::AddGadget(1,0,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
10,10,100,30)
ZoneRepette::SetFontGadget(1,0,1)
ZoneRepette::AddGadget(1,1,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
110,10,100,30)
ZoneRepette::SetFontGadget(1,1,0)
ZoneRepette::AddGadget(1,2,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
210,10,100,30)
ZoneRepette::SetFontGadget(1,2,0)
ZoneRepette::AddGadget(1,3,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
310,10,100,30)
ZoneRepette::SetFontGadget(1,3,0)
ZoneRepette::AddGadget(1,4,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
410,10,100,30)
ZoneRepette::SetFontGadget(1,4,0)
ZoneRepette::AddGadget(1,5,ZoneRepette::#TextGadgetType,ZoneRepette::#StringValueType,
510,10,100,30)
ZoneRepette::SetFontGadget(1,5,1)
Dim Valeur$(5)
Valeur$(0)="Teste A0"
Valeur$(1)="Teste A1"
Valeur$(2)="Teste A2"
Valeur$(3)="Teste A3"
Valeur$(4)="Teste A4"
Valeur$(5)="Teste A5"
ZoneRepette::AjouteLigne(1,Valeur$())
Valeur$(0)="Teste B0"
Valeur$(1)="Teste B1"
Valeur$(2)="Teste B2"
Valeur$(3)="Teste B3"
Valeur$(4)="Teste B4"
Valeur$(5)="Teste B5"
ZoneRepette::AjouteLigne(1,Valeur$())
ZoneRepette::Affiche(1)
; ZoneRepette::teste()
Repeat
Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow
Évidement je vais ajouter l'ajout d'autres Gadgets, le retour de variable suivant la ligne sélectionnée, des couleurs différentes pour les lignes paires et impaires ect
Tout les avis m'intéressent, bon comme mauvais