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 :

[0.9.30] Problème d'appel de composant


Sujet :

Lazarus Pascal

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut [0.9.30] Problème d'appel de composant
    Bonjour à toutes et à tous,

    J'ai créé un composant "Formulaire" que vous trouverez en fichier joint. Je travaille avec Lazarus 0.9.30.

    Dans l'environnement Windows, que j'appelle ce composant à partir de la fenêtre principale d'un programme ou à partir d'une fenêtre appelée à partir de la fenêtre principale, tout fonctionne très bien.

    Dans l'environnement Linux (Ubuntu 11.04), pas de problème si j'appelle le composant à partir de la fenêtre principale, par contre, à partir d'une fenêtre appelée par la fenêtre principale, le composant s'affiche, mais il ne m'est pas possible d'écrire dans les TEdit du composant, les boutons sont inactifs, les fenêtres de mon programme sont bloquées.

    Quand, dans ces conditions, je passe par le débogueur, je vois que je tourne bien dans la boucle (voir ci-dessous) appelant "Application.ProcessMessage", mais c'est comme si je ne captais aucun message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function TFormulR.Execute: Boolean;
    begin
      AffFrm.DoShow;
      AffFrm.Fin:= 0;
      repeat
        Application.ProcessMessages;
      until AffFrm.Fin > 0;
      if AffFrm.Fin = 1 then
        Result:= True
      else
        Result:= False;
    end;
    Dans ce composant, sa visualisation se fait par un appel interne à la procédure "Show". Si je la remplace par "ShowModal", à ce moment, je peux entrer des données dans mon formulaire, agir sur les boutons, mais cette fois, que l'appel soit fait à partir de la fenêtre principale ou autre, il n'y a pas de retour au programme (Ubuntu et Windows) : c'est pire !

    Avez-vous une idée de ce qui peut se passer et comment y remédier ?

    Merci de votre aide.

    Pierre
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club Avatar de CoyotteDundee
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    Bonjour Pierre,

    Je n'ai pas une grande expérience de Lazarus mais je travaille depuis des années en Delphi
    A quoi te sert cette boucle repeat/until ?
    A patienter le temps que la saisir se fasse dans ton formulaire ?

    A mon sens, le problème pourrait si situer là dans la mesure ou Processmessages (en Delphi) passe la main aux autres application s'il n'y a rine à traiter dans ton application. AInsi, tu favorises le multi-tasking... Sauf qu'ici, je crois que tu pénalise ton propre code.

    Si la saisie de tes chaines peut se faire de manière modale, tu pourrais éssayer en remplaçant tout le code de ton exemple par quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function TFormulR.Execute: Boolean;
    begin
      // Positionne ta valeur au cas où tu en aurais encore besoin...
      AffFrm.Fin:= 0;
      //Affiche la fenêtre et attend que l'utilisateur termine sa saisie
      AffFrm.ShowModal; 
      // verifie l'état du paramètre au retour...
      if AffFrm.Fin = 1 then
        Result:= True
      else
        Result:= False;
    end;
    Tu pourrais même encore simplifier ton code en testant le retour de ShowModal pour savoir si tu en sors par un mrOk ou mrCancel... (voir doc)

    J'espère que ceci pourra t'aider.

    Michel

Discussions similaires

  1. Problème d'appel de module.
    Par TomPad dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h24
  2. [CONCEPTION MCD] Problème avec les clés composées
    Par fabriceMerc dans le forum Schéma
    Réponses: 3
    Dernier message: 14/02/2005, 09h43
  3. Autre contexte mais tjs problème d'appel fct interne
    Par Neilos dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/08/2004, 13h51
  4. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

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