Mon premier code purebasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Michalon
Messages : 43
Inscription : sam. 27/juil./2013 16:18

Mon premier code purebasic

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mon premier code purebasic

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon premier code purebasic

Message 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à :)
salutcava
Messages : 34
Inscription : lun. 10/juin/2013 12:01

Re: Mon premier code purebasic

Message 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.
Michalon
Messages : 43
Inscription : sam. 27/juil./2013 16:18

Re: Mon premier code purebasic

Message par Michalon »

Bonjour

merci pour vos conseils
Michalon
Messages : 43
Inscription : sam. 27/juil./2013 16:18

Re: Mon premier code purebasic

Message par Michalon »

Bonjour
je suis entrain de refaire mon code

Ayant la version démo est ce que je peux utiliser les procédures?
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Mon premier code purebasic

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Michalon
Messages : 43
Inscription : sam. 27/juil./2013 16:18

Re: Mon premier code purebasic

Message par Michalon »

merci falsam

faut'il obligatoirement mettre les procedures avant la boucle principale repeat/until
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon premier code purebasic

Message 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



Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Mon premier code purebasic

Message 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 :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon premier code purebasic

Message 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
;
;
;
;}
Répondre