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 :

[1.6.4] Problème avec PostMessage [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut [1.6.4] Problème avec PostMessage
    Bonjour à toutes et à tous,

    En recompilant sous Lazarus 1.6.4 un programme développé avec Lazarus 1.2.4 et plus ancien, je rencontre un problème avec PostMessage. Voilà la partie concernée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TBase.SimulationSortie(NbAff: Integer);
    begin
      try
        ProgressSimul:= TProgressSimul.Create(Self);
        PostMessage(ProgressSimul.Handle, cp_Simulation, NbAff, 0);
        ProgressSimul.ShowModal;
      finally
        Screen.Cursor:= crDefault;
        ProgressSimul.Free;
      end;
    end;
    PostMessage doit normalement lancer la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        procedure Simulation(var message: TMessage); message cp_Simulation;
    En plaçant un point d'arrêt dans cette procédure, je m'aperçois qu'elle n'est pas activée.

    Je remplace le PostMessage par un SendMessage, cette fois, la procédure est lancée, mais la suite reste bloquée au "ProgressSimul.ShowModal.

    Une idée du problème ?

    Cordialement.

    Pierre

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Pierre

    À la place d'utiliser "postmessage" tu peux utiliser Application.QueueAsyncCall et exemples sur les messages et cette discussion que j'ai trouvée par hasard, qui devrait t'intéresser.

    Bonne soirée

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci BeabzMaster, je vais regarder les solutions que tu me proposes.

    Pour autant, cela fonctionnait avec les versions précédentes de Lazarus. Je suis devant la modification de comportement dû au changement de version. Ça ne donne pas confiance .

    Cordialement.

    Pierre

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Merci BeabzMaster, je vais regarder les solutions que tu me proposes.

    Pour autant, cela fonctionnait avec les versions précédentes de Lazarus. Je suis devant la modification de comportement dû au changement de version. Ça ne donne pas confiance .

    Cordialement.

    Pierre
    Bonjour

    La LCL tout comme l'IDE évolue, par conséquent certaines petites choses peuvent changer. Dans la majorité des cas on ne s'en rend pas compte. Sauf le cas où comme toi ici, tu utilises une fonction qui est très peu usitée et qui à la base avec Delphi est spécifique à Windows. Le problème de ton exemple vient du handle, à mon avis essaye avec Application.Handle sutout s'il y a du Thread dans les parages (Form.Handle n'est pas sûre avec les threads).

    Dans quel cas SimulationSortie(NbAff: Integer); est-elle appelée ?
    NbAff c'est pour quoi, à quoi sert ce paramètre ?

    Sinon si tu veux afficher une boîte de progression, et que ton application principale doit garder le control' "un thread avec un timer à l'intérieur" dans le cas contraire un simple timer suffirait (je vois que utilises Screen.Cursor:= crDefault; j'en déduis qu'il y a un Screen.Cursor:= crHourGlass quelque part). Autre solution : appeler une fonction "Progress" qui afficherait la progression en fonction de l'avancement de ta procédure (cf ici).
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Décidément, tu me sauves de la mouise !

    J'ai remplacé la fonction "PostMessage" par la fonction "Application.QueueAsyncCall" et tout est rentré dans l'ordre.

    Du coup, je suis allé remettre cette modif avec la version 1.2.4 : tout baigne dans les différentes versions que j'ai.

    Encore un grand merci .

    Cordialement.

    Pierre

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

Discussions similaires

  1. problème simulation clic souris avec "postMessage"
    Par Lustuc dans le forum Windows
    Réponses: 1
    Dernier message: 06/09/2009, 10h49
  2. Problème avec PostMessage
    Par riadhz dans le forum MFC
    Réponses: 1
    Dernier message: 13/09/2006, 10h04
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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