Page 1 sur 1

Mon premier code purebasic

Publié : dim. 28/juil./2013 8:37
par Michalon
Bonjour
je m'appelle marc je suis nouveau ici , j'ai découvert Purebasic il y a quelques semaines , j'ai téléchargé la démo 5.11 , j'ai commencer par regarder les différents exemples fourni avec le logiciel et j'ai crée un début de code pour afficher des images , j'ai lu l'aide pas à pas , j'attends vos conseils c'est mon premier code .
Je me suis servi d'un exemple fourni avec le logiciel et avec l'aide pour comprendre chaque commande .

Code : Tout sélectionner

;-------- Exemple pour afficher des image en PureBasic 5.11
;---------Code écris par Mr Michalon 

; Constantes pour le bouton , le canevas et l'image 
Enumeration
       #Canevas
       #Mon_image
       #Bouton_charger
 EndEnumeration
     
     
     
     ; pour le  Chargement d'une image Jpeg
     UseJPEGImageDecoder()
     ; Onverture de la fenetre et de la fenetre pour l'image 
If OpenWindow(0, 0, 0, 1024,768 , "Gestion d' image ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(#Canevas, 50, 10, 1024, 768,#PB_Calendar_Borderless)
 ButtonGadget(#Bouton_charger,   0, 335, 50, 25, "Charger")
 ; Gestion du programme 
 Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget
    
      Select EventGadget()
          Case #Bouton_charger; on va charger l'image 
          File$ = OpenFileRequester("Charge une image ...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
          If File$
            If LoadImage( #Mon_image, File$)
              If StartDrawing(CanvasOutput(#Canevas))
                Box(0, 0, 380, 380, $FFFFFF)
                DrawImage(ImageID( #Mon_image), 0, 0)
                StopDrawing()
              EndIf
              FreeImage( #Mon_image)
            Else
              MessageRequester("Erreur ", "Impossible de charger une image : " + File$)
            EndIf
          EndIf
          
                      
      EndSelect
    
    EndIf
          
    
    
  Until Event = #PB_Event_CloseWindow

EndIf

Re: Mon premier code purebasic

Publié : dim. 28/juil./2013 9:41
par Ar-S
Bienvenue à toi.

Je ne vois rien de bien particulier dans ton code, il fonctionne.
Eventuellement remplace *.jpeg par *.jpg car la plupart des images se terminent par .jpg

Re: Mon premier code purebasic

Publié : dim. 28/juil./2013 10:46
par Backup
mes commentaires sont dans le code ;)

Code : Tout sélectionner

Select EventGadget()
	Case #Bouton_charger; on va charger l'image
	File$ = OpenFileRequester("Charge une image ...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
	; If File$  <<<<<<<<<< ne sert a rien !!
	If LoadImage( #Mon_image, File$) ; <<<<<<<<<<< ce IF suffit :)
		If StartDrawing(CanvasOutput(#Canevas))
			Box(0, 0, 380, 380, $FFFFFF)
			DrawImage(ImageID( #Mon_image), 0, 0)
		StopDrawing()
		;******** j'ai deplacé ce bloc ,car le teste doit se faire au chargement de ton image ( Loadimage()) ... pas au fait d'avoir quelques choses dans ta variable File$ (dont le test IF ne servait a rien ici ) )
		Else
		MessageRequester("Erreur ", "Impossible de charger une image : " + File$)
End
		; ************
	EndIf
	;; FreeImage( #Mon_image) ;<<<<<<<<<<< attention avec cette commande , en la libérant , tu ne pourra plus utiliser ton image par la suite ....
	;  les images sont de toute façon libérés automatiquement en quittant le prg
	
EndIf
; EndIf


EndSelect; EPB

lorsque tu fais

Code : Tout sélectionner

 File$ = OpenFileRequester("Charge une image ...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
   If File$  .....................
tu test si File$ contient quelque chose ... bon ça peut etre utile pour vérifier un chemin par exemple ou une extention ....
mais ici tu cherches a charger une image

quoiqu'il arrive ce qui suit :

Code : Tout sélectionner

If LoadImage( #Mon_image, File$)
est là pour vérifier que de toutes façons , une image est bien chargé !!
donc ta vérification préalable deviens un doublon inutile :)
puisque si Files ne contenait pas de chemin vers une image reconnue ... ça ne la chargerai pas ...

d'ou l'interet de mettre le test

Code : Tout sélectionner

 Else
      MessageRequester("Erreur ", "Impossible de charger une image : " + File$)
End
dans ce IF là :)

Re: Mon premier code purebasic

Publié : dim. 28/juil./2013 11:37
par salutcava
Bonjour/bonsoir

afin que les images d'extensions JPEG et JPG soient visible par le filtre "JPEG Images", il faut remplacer

Code : Tout sélectionner

OpenFileRequester("Charge une image ...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
par

Code : Tout sélectionner

OpenFileRequester("Charge une image ...", "", "JPEG Images|*.jpeg;*.jpg|All Files|*.*", 0)
Voila, c'est tout ce que j'avais à dire :D

Au revoir.

Re: Mon premier code purebasic

Publié : dim. 28/juil./2013 17:56
par Michalon
Bonjour

merci pour vos conseils

Re: Mon premier code purebasic

Publié : dim. 04/août/2013 9:44
par Michalon
Bonjour
je suis entrain de refaire mon code

Ayant la version démo est ce que je peux utiliser les procédures?

Re: Mon premier code purebasic

Publié : dim. 04/août/2013 9:51
par falsam
Michalon a écrit :Ayant la version démo est ce que je peux utiliser les procédures?
Bonjour. Bien sur que tu peux.Bon code:)

Un exemple avec des procédures.

Code : Tout sélectionner

Enumeration
  #Mainform
  #Bouton
EndEnumeration


Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  ButtonGadget(#Bouton, 20, 20, 80, 22, "Clique Moi")  
EndProcedure

Procedure Welcome()
  MessageRequester("Information", "Bonjour et bienvenue"+#CRLF$+
                                  "Les procédures fonctionnent"+#CRLF$+
                                  "mais ce n'est pas une raison"+#CRLF$+
                                  "pour ne pas acheter une licence :)")  
EndProcedure

Open_MainForm()

Repeat
  Event  = WaitWindowEvent()
  WEvent = EventWindow() ;Fenetre qui a provoquée l'évenement
  MEvent = EventMenu() ;Menu qui a provoquée l'évenement
  GEvent = EventGadget(); Gadget qui a provoquée l'évenement
  TEvent = EventType() ;Type d'évenement (Ex : Focus) qui a provoquée l'évenement
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
        Case #Bouton
          Welcome()
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Re: Mon premier code purebasic

Publié : dim. 04/août/2013 10:35
par Michalon
merci falsam

faut'il obligatoirement mettre les procedures avant la boucle principale repeat/until

Re: Mon premier code purebasic

Publié : dim. 04/août/2013 11:19
par Backup
non , il faut mettre les procedures AVANT leur appel !!

Code : Tout sélectionner

procedure toto ()
debug "toto"
endprocedure

; l'appel
toto ()

ou alors mettre un Declare pour pouvoir mettre tes procedures en fin de code, (donc apres l'appel)

Code : Tout sélectionner

Declare toto ()


; l'appel
toto ()

; ****** zone des procedures **********
procedure toto ()
debug "toto"
endprocedure




Re: Mon premier code purebasic

Publié : dim. 04/août/2013 14:44
par falsam
Michalon a écrit :faut'il obligatoirement mettre les procedures avant la boucle principale repeat/until
Tu peux mettre les procédures aprés la boucle evenementielle à condition comme le précise Dobro de déclarer les procédures en début de programmes.

Ce qui donne avec mon code précédent

Code : Tout sélectionner

Enumeration
  #Mainform
  #Bouton
EndEnumeration

Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

;-Déclaration de procédures 
Declare Open_MainForm()
Declare Welcome()

;-Début du traitement
Open_MainForm()

;-Boucle évenementielle
Repeat
  Event  = WaitWindowEvent()
  WEvent = EventWindow() ;Fenetre qui a provoquée l'évenement
  MEvent = EventMenu() ;Menu qui a provoquée l'évenement
  GEvent = EventGadget(); Gadget qui a provoquée l'évenement
  TEvent = EventType() ;Type d'évenement (Ex : Focus) qui a provoquée l'évenement
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
        Case #Bouton
          Welcome()
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

;- Les procédures 
Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  ButtonGadget(#Bouton, 20, 20, 80, 22, "Clique Moi")  
EndProcedure

Procedure Welcome()
  MessageRequester("Information", "Bonjour et bienvenue"+#CRLF$+
                                  "Les procédures fonctionnent"+#CRLF$+
                                  "mais ce n'est pas une raison"+#CRLF$+
                                  "pour ne pas acheter une licence :)")  
EndProcedure
J'ai commenté la structure du code de telle maniére que le plan du code apparait à droite de ton éditeur dans l'onglet Procédure. Pour cela il suffit de commenter avec un ;- au lieu d'un ;. Bon code :)

Re: Mon premier code purebasic

Publié : dim. 04/août/2013 18:08
par Backup
falsam a écrit :J'ai commenté la structure du code de telle maniére que le plan du code apparait à droite de ton éditeur dans l'onglet Procédure. Pour cela il suffit de commenter avec un ;- au lieu d'un ;. Bon code :)
a noter aussi que

;{ permet d'ouvrir un bloc pliable <<<<< debut de bloc + commentaire
;....
;....
;....
;} permet de finir le bloc pliable <<<<< fin de bloc +commentaire

et certains editeur .... ? (Japbe,EPB )
permet de faire un bloc + un signet


;{- test <<< sera present dans l'onglet a droite
;
;
;
;}