Programme ne répond pas mais fonctionne sans affichage.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Georges38rmb
Messages : 6
Inscription : jeu. 12/mai/2016 19:16

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Georges38rmb »

Un grand merci pour ce code qui va me servir de base pour mes projets futurs.

Georges.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Marc56 »

Quelques astuces encore :)

Pour ne pas avoir à trainer des numéros d'ID (gadgets, ou handles de fichier), laisser PB numéroter automatiquement

Code : Tout sélectionner

Enumeration 
    #File_IN
    #File_OUT
    ; ... etc
EndEnumeration
Mettre tout ce qui est fixe en constantes et au début du programme.
Ce qui permet de réutiliser dans les messages d'erreur et les debugs

Code : Tout sélectionner

#File_Input = "D:\QB64\LIFICH02.TXT"
Ou si on veut modifier plus tard, alors une chaine

Code : Tout sélectionner

File_Input$ = "D:\QB64\LIFICH02.TXT"
ou l'autre présentation de la chaine (.s)

Code : Tout sélectionner

File_Input.s = "D:\QB64\LIFICH02.TXT"
Les deux syntaxes sont valables, les deux peuvent être utilisées ensembles et sont différentes (ex: a$ et a.s)

Utiliser Debug tant qu'on veut (les lignes seront ignorées à la compilation EXE)

Code : Tout sélectionner

Debug "(info) Fichier d'entrée utilisé: " + #File_Input 
Not permet de se passer de « = 0 » (comme en basic ou comme '!' en C)

Code : Tout sélectionner

If Not ReadFile(#File_IN, #File_Input)
    ; Le fichier d'entrée n'existe pas: Bye!
    MessageRequester("Erreur à la lecture.","Le fichier " + #File_Input + "  n'existe pas",0) 
    End ; On peut quitter à n'importe quel moment même dans une procédure
EndIf
(note l'insertion de la chaine dans la boite de dialogue)

Comme en C, on peut incrémenter en une passe

Code : Tout sélectionner

a = a + 1 <=> a + 1  (comme a++ en C)
a = a + 3 <=> a + 3  (comme a += 3 en C)
Quand il y a beaucoup d'itérations, réduire les affichages intermédiaires qui ralentissent énormément le programme principal.
Si tu as par exemple une boucle de 100, alors ne met à jour la ProgressBar qu'une fois sur 10
Méthode pour ne faire quelque chose qu'une fois sur 10 par exemple

Code : Tout sélectionner

For i = 1 To 100
    If i / 10.0 = Int(i / 10)
        Debug  i
    EndIf
Next
(note le .0 pour forcer l'utilisation décimale)

Pour faire encore mieux sur un programme dont une partie travaille beaucoup mais sans intervention de l'utilisateur, on fait tourner le "moteur" dans un thread différent de l'interface utilisateur, ce qui évite les clignotements et les sabliers.

En cas de doute sur la syntaxe d'une commande, surveiller la ligne d'état de l'éditeur qui indique les paramètres à utiliser.
Pour plus d'aide, un clic sur la commande, puis touche F1 :idea:

Enfin dernier conseil: utiliser EnableExplicite qui force à déclarer toutes les variables. Cela peut paraître pénible, mais ça évite ensuite les erreurs d’inattentivement (deux variables différentes car une mal orthographiée) :?

and welcome.
:wink:
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Bernie »

Bonjour

Une fois que a tu a mis EnableExplicite en tout début du code

tu mets ensuite Global devant les variables quand tu les crées
.i est équivalent à integer ( en C ou C++ on écris INT)
exemple :

Code : Tout sélectionner

EnableExplicite

Global maVariable.i=500,Toto.i=400 etc 

tu as aussi les tutos en vidéo de Microdevweb :

https://www.youtube.com/watch?v=eBu2KMGBOh0
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Marc56 »

Bernie a écrit :Une fois que a tu a mis EnableExplicite en tout début du code
tu mets ensuite Global devant les variables quand tu les crées
Euh, non, on ne met pas Global partout pour le plaisir :wink:

Aide sur Global
Description

Global permet à des variables d'être utilisées globalement, pouvant ainsi être accessibles depuis l'intérieur de n'importe quelle procédure. Une valeur par défaut peut être assignée à la variable. Global peut aussi être utilisé avec les tableaux, les listes et les maps.

Les instructions Protected et Static permettent de déclarer une variable locale dans une procédure qui a le même nom qu'une variable globale, sans risque de conflit.


Demo:

Code : Tout sélectionner

EnableExplicit

Global a = 1
Define b = 2

Procedure DemoUtilisationGlobal()
    Debug "a = " + a
    Debug "b = " + b
EndProcedure

DemoUtilisationGlobal()   
[COMPILER] Ligne 8: Avec 'EnableExplicit', les variables doivent etre explicitement declarees: b
Pas de global = variable inconnue dans la procédure.

Ce qui amène aussi à expliquer l'utilisation de Protected (qui permet d'utiliser le même nom)

Code : Tout sélectionner

EnableExplicit

Global a = 1

Procedure DemoUtilisationProtected()
    Protected a = 2
    Debug "a = " + a   ; Affiche a = 2 pourtant a est déjà utilisé, mais hors procedure
EndProcedure

DemoUtilisationProtected()
et ce qui amène à la troisième forme de déclaration d'utilisation de variable: Static qui sert à se "repasser une variable locale" (Protected) d'une procédure à l'autre malgré l’existence possible d'une variable globale de même nom :)
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Bernie »

ce que voulait dire c'est quand on utilise EnableExplicit on doit mettre global quand on déclare nos variables c'est plus pratique .
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par falsam »

Bernie a écrit :ce que voulait dire c'est quand on utilise EnableExplicit on doit mettre global quand on déclare nos variables c'est plus pratique .
Voir la réponse de Marc ci -dessus :wink:
:arrow: http://www.purebasic.fr/french/viewtopi ... 62#p183062
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%
Répondre