..................
Publié : dim. 12/juil./2009 17:22
.........................
Code : Tout sélectionner
Structure MemoryArray
Byte.c[0]
EndStructure
Global Dim AllowedChar.c(255)
For i = '0' To '9'
AllowedChar(i) = 1
Next
For i = 'A' To 'Z'
AllowedChar(i) = 1
Next
For i = 'a' To 'z'
AllowedChar(i) = 1
Next
Code : Tout sélectionner
Global FontID1
FontID1 = LoadFont(1, "Arial", 14)
Code : Tout sélectionner
Procedure toto()
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Global Dim TestArray(10)
TestArray(0) = 10
TestArray(1) = 11
TestArray(2) = 12
EndIf
EndProcedure
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Code : Tout sélectionner
;Procedure toto()
For i=0 To 3
Debug Defined(TestArray, #PB_Array)
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Debug Defined(TestArray, #PB_Array)
Global Dim TestArray(10)
TestArray(0) = 10
TestArray(1) = 11
TestArray(2) = 12
EndIf
Next i
;EndProcedure
;toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
;toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Code : Tout sélectionner
Procedure toto()
; Defined détermine si un objet tel qu'une structure, interface, variables etc. est déjà défini dans le programme.
; Le paramètre 'Nom' doit être spécifié sans aucune forme de décoration (sans le '#' pour une constante,
; sans LES '()' pour un tableau, une liste chaînée ou une procédure).
;
; Le paramètre 'Type' peut être une des valeurs suivantes:
; #PB_Constant
; #PB_Variable
; #PB_Array
; #PB_LinkedList
; #PB_Structure
; #PB_Interface
; #PB_Procedure
;
; Exemple:
;
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Global Dim TestArray(10)
TestArray(0) +10
TestArray(1) +11
TestArray(2) +12
EndIf
EndProcedure
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Code : Tout sélectionner
;Procedure toto()
Goto fin_sub:
sub3:
For i=0 To 3
Debug Defined(TestArray, #PB_Array)
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Debug Defined(TestArray, #PB_Array)
Global Dim TestArray(10)
TestArray(0) +10+1
TestArray(1) + 11+i
TestArray(2) + 12+i
EndIf
Next i
Return
fin_sub:
;EndProcedure
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
End
Code : Tout sélectionner
Global Dim TestArray(10)
Goto fin_sub:
sub3:
For i=0 To 3
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Debug Defined(TestArray, #PB_Array)
TestArray(0) + 10+1
TestArray(1) + 11+i
TestArray(2) + 12+i
EndIf
Next i
Return
fin_sub:
;EndProcedure
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
;toto()
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Gosub sub3
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
End
On peut le faire avec des variables statiques.Dobro a écrit :aussi je pense que dans le cadre d'une procedure
c'est dommage de na pas pouvoir beneficier d'une zone
qui ne s'initialise qu'une fois
Code : Tout sélectionner
Static AllowedCharInitialized
If AllowedCharInitialized = #False
For i = '0' To '9'
AllowedChar(i) = 1
Next
For i = 'A' To 'Z'
AllowedChar(i) = 1
Next
For i = 'a' To 'z'
AllowedChar(i) = 1
Next
AllowedCharInitialized = #True
EndIf
Code : Tout sélectionner
Global Dim TestArray(10)
10
11
12
Global Dim TestArray(10)
10
11
12
Global Dim TestArray(10)
10
11
12
Code : Tout sélectionner
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
11
14
15
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
11
14
15
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
0
Global Dim TestArray(10)
0
11
14
15
Code : Tout sélectionner
On peut le faire avec des variables statiques.
faudrai voir a suivre le fil de la discussion !kernadec a écrit :bonjour
defined() détecte bien le tableau? mais lorsque que celui à été crée en amont.
Avec le second exemple de @PAPIPP le test fonctionne en mettant le tableau en début de programme!
mince alors!
Code : Tout sélectionner
Procedure toto()
; Defined détermine si un objet tel qu'une structure, interface, variables etc. est déjà défini dans le programme.
; Le paramètre 'Nom' doit être spécifié sans aucune forme de décoration (sans le '#' pour une constante,
; sans LES '()' pour un tableau, une liste chaînée ou une procédure).
;
; Le paramètre 'Type' peut être une des valeurs suivantes:
; #PB_Constant
; #PB_Variable
; #PB_Array
; #PB_LinkedList
; #PB_Structure
; #PB_Interface
; #PB_Procedure
;
; Exemple:
;
If Defined(TestArray, #PB_Array) = #False
Debug "Global Dim TestArray(10) "
Global Dim TestArray(10)
TestArray(0) +10
TestArray(1) +11
TestArray(2) +12
EndIf
EndProcedure
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
toto()
Debug TestArray(0)
Debug TestArray(1)
Debug TestArray(2)
Non, pas vraiment.Dobro a écrit :@Gnozal ;: oui effectivement ça marche le static
mais tu admettra que la fonction Defined()
a un comportement etrange