IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Instructions pas exécutées correctement [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut Instructions pas exécutées correctement
    Bonjour.

    Malgré mon désir une fois exprimé de retourner dans le giron de Delphi, je continue mes expériences avec Lazarus 1.6 (sous W2000).

    Normalement le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TMain.Bouton_QuitterClick(Sender: TObject);
    begin
      AdvLed.State:=lsOff;
      sndPlaySound('Mus_fin.wav', SND_SYNC);
      TerminateProcess(GetCurrentProcess, 0);
    end;
    devrait éteindre la Led (allumée au départ), jouer le fichier wav et à la fin quitter le programme.
    EH BIEN NON !
    La Led reste allumée et DISPARAÎT vers la fin du son (remplacée par un carré) avant fermeture du programme. Par contre une instruction Main.Hide à la place fonctionne ! Curieux ... Je joins le zip du projet pour ceux qui voudraient faire le test !

    Merci d'avance.
    Fichiers attachés Fichiers attachés
    Dernière modification par tourlourou ; 11/08/2016 à 14h11.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut,
    Citation Envoyé par alberich Voir le message
    Normalement le code ci-dessous :
    pour lequel il existe un bouton "Mettre en forme" (le dièse au bout de la deuxième ligne de boutons de l'éditeur du forum) avec l'infobulle "Ajouter la balise [CODE]", bon sang ! , la preuve :

    Citation Envoyé par alberich Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TMain.Bouton_QuitterClick(Sender: TObject);
    begin
      AdvLed.State:=lsOff;
      sndPlaySound('Mus_fin.wav', SND_SYNC);
      TerminateProcess(GetCurrentProcess, 0);
    end;
    (quand même plus classe et plus lisible, nan ?)
    pourrait être modifié en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TMain.Bouton_QuitterClick(Sender: TObject);
    begin
      AdvLed.State:=lsOff;
      Application.ProcessMessages; // pour faire prendre immédiatement en compte le changement d'état -- valable aussi quand on veut écrire dans un TLabel, par ex.
      sndPlaySound('Mus_fin.wav', SND_SYNC);
      TerminateProcess(GetCurrentProcess, 0);
    end;
    Nota : tu aurais eu exactement le même problème sous Delphi...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Invité
    Invité(e)
    Par défaut Merci Jipété, ton astuce fonctionne !
    La mise en forme ne changeait rien au fonctionnement. Au passage j'ai copié-collé mon code (mis en forme ! ) à partir du presse-papier, et c'est le forum qui m'a bouffé les retraits. A part celà, embêtant, ce comportement qui pousse le multitâche un peu trop loin !

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par alberich Voir le message
    La mise en forme ne changeait rien au fonctionnement.
    Certes, mais c'est juste grandement plus plaisant à l'œil et donc ça donne envie de lire ; quand on voit certains posts d'une trentaine de lignes (ou plus !), même pas je les lis ! Tant pis pour l'auteur et son problème...

    Citation Envoyé par alberich Voir le message
    Au passage j'ai copié-collé mon code (mis en forme ! ) à partir du presse-papier, et c'est le forum qui m'a bouffé les retraits.
    Parce que tu n'avais pas utilisé le bouton de mise en forme...

    Citation Envoyé par alberich Voir le message
    A part cela, embêtant, ce comportement qui pousse le multitâche un peu trop loin !
    Euh, c'est un comportement que je connais depuis VB3 et D1, alors c'est pas nouveau et la solution est toujours la même, faut laisser "respirer" la machine, surtout dans les boucles et là, en l'espèce, entre le begin et le end c'est une sorte de boucle, exécutée une seule fois, mais c'est l'idée.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour

    A mon avis il manque, avant de jouer le son, un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ProcessMessages;
    Je pense que c'est ce que voulait dire Jipété avec sa "respiration"

    Un peu d'humilité, que diable : tu devrais aussi respirer un peu plus avant d'attribuer à Lazarus des problèmes dus à une mauvaise connaissance des systèmes, et qui se produisent très certainement sous Delphi et d'autres EDI...
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  6. #6
    Invité
    Invité(e)
    Par défaut Réponse à Tintinux
    Bonjour.

    Citation Envoyé par tintinux Voir le message
    Un peu d'humilité, que diable : tu devrais aussi respirer un peu plus avant d'attribuer à Lazarus des problèmes dus à une mauvaise connaissance des systèmes, et qui se produisent très certainement sous Delphi et d'autres EDI...
    Je n'ai jamais dit que le problème était spécifique et dû à Lazarus. Les problèmes du multitâche seraient même plutôt à attribuer à ... l'environnement "Zindozs" ...


  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,
    Citation Envoyé par alberich Voir le message
    Bonjour.



    Je n'ai jamais dit que le problème était spécifique et dû à Lazarus. Les problèmes du multitâche seraient même plutôt à attribuer à ... l'environnement "Zindozs" ...

    Alors retourne sur MS-DOS (pas Linux, car ça ferait la même chose que Windows).

    Si tu n'admets pas le fonctionnement des OS modernes, n'utilise que les anciens, mais ça va sérieusement te limiter, au point que tu abandonneras la programmation (perso, je me vois mal revenir 20 ans en arrière ).
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Invité
    Invité(e)
    Par défaut Réponse à Jipété
    Bonjour.

    Citation Envoyé par Jipété Voir le message
    Nota : tu aurais eu exactement le même problème sous Delphi...
    Au risque de te "décevoir" : le problème ne se pose PAS avec Delphi7 ! Cela fonctionne correctement SANS le Application.ProcessMessages ...

    ???

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !
    Citation Envoyé par alberich Voir le message
    Au risque de te "décevoir" : le problème ne se pose PAS avec Delphi7 ! Cela fonctionne correctement SANS le Application.ProcessMessages ...

    ???
    Alors c'est probablement une particularité de ton composant AdvLed dans le contexte du sndPlaySound, je ne vois que ça.

    Tiens, essaye ça sous D7, avec un bouton et un TEdit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to 10 do // ou 100 ou 10000 ou ...
      begin
        Edit1.Text := IntToStr(i);
        Sleep(500); // ou 100 ou 1000 ou ... millisecondes, pour voir ce qui se passe
        //Application.ProcessMessages; // commenté ou décommenté, pour comparer
      end;
    end;
    Note : je ne me souviens plus si Sleep en D7 travaille avec des secondes ou des millisecondes : tu adapteras en conséquence, histoire de pas passer la soirée devant l'écran,

    Chez moi, avec App.PM commenté, le Tedit affiche son texte de base, "Edit1", pendant 5 secondes, puis "10".
    En décommentant, je vois l'incrémentation 0...1...2... toutes les demi-secondes.
    Tu choisis...

    Et pour les boucles longues, "on" estime que ce n'est pas une bonne idée d'appeler App.PM à chaque tour de boucle, on insère donc plutôt une ligne genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (i mod 3 = 0) then Application.ProcessMessages;
    mod 3 à adapter : si tu dois traiter 100 000 fichiers avec une barre de progression, mod 20 ou même 100 c'est bien ; enfin, à voir au cas par cas.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Invité
    Invité(e)
    Par défaut Voilà la nouvelle suite de mes instructions ...
    1) Mettre une animation gif à une vitesse 0 ; j'ai remarqué que mettre animated à false peut provoquer des plantages, tout n'est donc pas parfait !
    2) Eteindre la Led.
    3) Mettre Application.Title à 'un espace'
    4) Jouer la musique de manière "synchrone", puis quitter.

    Malheureusement le problème réapparaît si entre 3 et 4 j'ajoute une autre musique de manière synchrone puis l'affichage d'une image ... Pour que celle-ci apparaisse, il faut que j'ajoute à la suite le fameux "ProcessMessages" !

    Moralité : quand cela ne fonctionne pas, on ne sait pas pourquoi ; quand cela fonctionne, on ne le sait pas non plus !


    Je dois ajouter que la Led peut afficher toutes les couleurs, je soupçonne qu'elle doit utiliser quelque part un "paint", mais je n'ai pas analysé le code ! En tout cas elle n'utilise pas l'affichage d'un nombre fini d'images, contrairement à la première Led de "Industrial". J'ai aussi essayé sous Lazarus d'utiliser la seconde Led de "Industrial", mais je me suis écroulé sous le nombre de paramètres possibles !

    Si quelqu'un s'intéresse au fonctionnement de cette Led trouvée sur le net, je joins le zip que j'ai téléchargé. Bon courage ...
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 16/08/2016 à 06h34.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Objet attendu, la fonction n'est même pas exécutée
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/07/2006, 16h42
  2. EXECUTE IMMEDIATE pas exécuté immédiatement
    Par dyvim dans le forum Oracle
    Réponses: 4
    Dernier message: 11/05/2006, 22h43
  3. instruction non exécutée
    Par illegalsene dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/05/2006, 14h42
  4. [VB6] Comment passer des instructions à un exécutable depuis VB?
    Par yal001 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/05/2006, 10h59
  5. [SQL] Comment ne pas exécuter une clause WHERE si une var est nulle
    Par charlysquare dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/05/2006, 21h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo