Page 1 sur 1

Image et variable

Publié : dim. 01/sept./2013 9:42
par blendman
salut

J'ai testé ce code en pensant qu'il fonctionnerait, mais non.
Savez-vous pour quelle raison ?

Je sais que je peux modifier facilement, en utilisant un paramètre dans la procédure, ou shared grid et créer une procedure pour créer l'image avec shared grid aussi, etc.. Mais j'aimerai savoir pourquoi utiliser une variable globale pour une image ne marche pas comme ça.

merci :)

Code : Tout sélectionner

Procedure CreateCheckker()
  If StartDrawing(ImageOutput(grid))    
    Box(0,0,64,64,RGB(125,125,125))
    StopDrawing()
  EndIf
EndProcedure

OpenWindow(0,0,0,800,600,"image",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

Global grid.i
grid = CreateImage(#PB_Any,64,64,32)
CreateCheckker()

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow

Re: Image et variable

Publié : dim. 01/sept./2013 10:13
par Eric
La variable globale grid doit être déclarée avant son utilisation pour que l'ensemble des procédures puissent l'utiliser.

Re: Image et variable

Publié : dim. 01/sept./2013 10:14
par Eric

Code : Tout sélectionner

Global grid.i

Procedure CreateCheckker()
	If StartDrawing(ImageOutput(grid))    
		Box(0,0,64,64,RGB(125,125,125))
		StopDrawing()
	EndIf
EndProcedure

OpenWindow(0,0,0,800,600,"image",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)


grid = CreateImage(#PB_Any,64,64,32)
CreateCheckker()

Repeat
	event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
End

Re: Image et variable

Publié : dim. 01/sept./2013 10:56
par Backup
ou bien faire comme moi

mettre les procedures en fin de code !

Code : Tout sélectionner


Declare  CreateCheckker()


OpenWindow(0,0,0,800,600,"image",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

Global grid.i
grid = CreateImage(#PB_Any,64,64,32)
CreateCheckker()

Repeat
	event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow


; ************** zone des procedures ****************************
Procedure CreateCheckker()
	If StartDrawing(ImageOutput(grid))   
		Box(0,0,64,64,RGB(125,125,125))
	StopDrawing()
EndIf
EndProcedure; EPB

Re: Image et variable

Publié : dim. 01/sept./2013 11:41
par G-Rom
Au moment de la compilation , le compilateur compile de haut en bas, il va rencontré le symoble indéfini "grid" , comme il n'existe nul part pour le moment , le compilo en deduis que cette variable à une porté limitée à la procédure , une variable temporaire donc , qui sera detruit à endprocedure automatiquement.
ensuite , il recontre ta variable globale du même nom , le compilo recherche d’éventuelle conflit avec d'autre nom similaire, mais l'autre n'a pas le même scope ( visibilité ) , le compilateur en deduis donc que c'est 2 variables différentes.
La méthode qu'eric te présente est la bonne.

@++