Page 1 sur 1

[resolu] Paramettre par defaut dans procédures...

Publié : mer. 30/nov./2011 23:19
par Ar-S
Je fatigue, je ne me rappel pas comment on met des valeurs par defaut dans une procédure.

En gros je pige pas pourquoi PB me retourne une erreur ici :

Code : Tout sélectionner

Global.i LargSortie, HautSortie
Global EcranX.i = GetSystemMetrics_(#SM_CXSCREEN)
Global EcranY.i = GetSystemMetrics_(#SM_CYSCREEN)

Procedure CaptEcran (Destination$ , LargSortie = EcranX, HautSortie = EcranY)
;(....)
procedurereturn 1
Endprocedure

Re: Besoin rappel Param par defaut dans procédures...

Publié : mer. 30/nov./2011 23:32
par Demivec
Ar-S a écrit :Je fatigue, je ne me rappel pas comment on met des valeurs par defaut dans une procédure.

En gros je pige pas pourquoi PB me retourne une erreur ici :

Code : Tout sélectionner

Global.i LargSortie, HautSortie
Global EcranX.i = GetSystemMetrics_(#SM_CXSCREEN)
Global EcranY.i = GetSystemMetrics_(#SM_CYSCREEN)

Procedure CaptEcran (Destination$ , LargSortie = EcranX, HautSortie = EcranY)
;(....)
procedurereturn 1
Endprocedure
peut-être:

Code : Tout sélectionner

;Global.i LargSortie, HautSortie
Global EcranX.i = GetSystemMetrics_(#SM_CXSCREEN)
Global EcranY.i = GetSystemMetrics_(#SM_CYSCREEN)

Procedure CaptEcran (Destination$ , LargSortie = -1, HautSortie = -1)
  If LargSortie = -1: LargSortie = EcranX: EndIf 
  If HautSortie = -1: HautSortie = EcranY: EndIf 
  ;(....)
  ProcedureReturn 1
EndProcedure
EcranX, EcranY n'est pas constant.

Re: Besoin rappel Param par defaut dans procédures...

Publié : mer. 30/nov./2011 23:38
par Ar-S
Un truc comme ça devrait pourtant fonctionner.

Code : Tout sélectionner

Procedure CaptEcran (Destination$ , LargSortie = GetSystemMetrics_(#SM_CXSCREEN), HautSortie = GetSystemMetrics_(#SM_CYSCREEN))
  ;(....)
  ProcedureReturn 1
EndProcedure
Je m'en suis sortie en faisant autrement mais je ne vois pas pourquoi ça ne marche pas ainsi.

Re: Besoin rappel Param par defaut dans procédures...

Publié : jeu. 01/déc./2011 9:43
par Mesa
Moi aussi j'ai ce genre d'erreur et la réponse est toujours la même, c'est celle de Demivec : Il faut des constantes.

EcranX et EcranY doivent être constant.

C'est à dire que l'on ne peut pas utiliser de variable, il faut que "EcranX et EcranY" soient définis avant même la compilation.

Code : Tout sélectionner

#EcranX = 800
#EcranY = 600

Procedure CaptEcran (Destination$ , LargSortie = #EcranX, HautSortie =  #EcranY)
  ;(....)
  Debug "EcranX " + Str(LargSortie)
  Debug "EcranY " + Str(HautSortie)
ProcedureReturn 1
EndProcedure

dest$=""
CaptEcran(dest$)

End
ou alors

Code : Tout sélectionner

Global EcranX 
Global EcranY

Procedure DimensionEcranPureBasic()
   ExamineDesktops()
  
   EcranX = DesktopWidth(0)
   EcranY = DesktopHeight(0) 
EndProcedure

Procedure DimensionEcran()
  EcranX = GetSystemMetrics_(#SM_CXSCREEN)
  EcranY = GetSystemMetrics_(#SM_CYSCREEN) 
EndProcedure


Procedure CaptEcran (Destination$)
  ;DimensionEcranPureBasic()
  DimensionEcran()
  LargSortie = EcranX
  HautSortie = EcranY
  ;(....)
  ProcedureReturn 1
EndProcedure

dest$=""
CaptEcran(dest$)

Debug "EcranX " + Str(EcranX)
Debug "EcranY " + Str(EcranY)
Je peux savoir pourquoi tu n'utilises pas les fonctions purebasic DesktopWidth(),... ?

Mesa

Re: Besoin rappel Param par defaut dans procédures...

Publié : jeu. 01/déc./2011 13:20
par gnozal
Mesa a écrit :Moi aussi j'ai ce genre d'erreur et la réponse est toujours la même, c'est celle de Demivec : Il faut des constantes.

EcranX et EcranY doivent être constant.

C'est à dire que l'on ne peut pas utiliser de variable, il faut que "EcranX et EcranY" soient définis avant même la compilation.
Effectivement, c'est précisé dans l'aide de PB :
Purebasic.chm a écrit :Les paramètres en fin de procédure peuvent avoir une valeur par défaut (une expression constante est requise). Les paramètres ayant une valeur par défaut pourront être omis lors de l'appel de la procédure, la valeur par défaut de chaque paramètre manquant sera utilisée.

Re: Besoin rappel Param par defaut dans procédures...

Publié : jeu. 01/déc./2011 21:44
par Ar-S
Ok merci pour la piqure de rappelle, parfois les yeux ne veulent rien savoir :roll:
J'espère que ma mémoire va entrer une bonne fois pour toute cette info dans une tiroir et non dans un puits sans fond :o