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 :

Problème d'affichage d'une fiche à partir d'une DLL


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 Problème d'affichage d'une fiche à partir d'une DLL
    Bonjour à toutes et à tous,

    Continuant sur mon projet, je tombe sur un nouvel os.

    Les échanges avec mes DLL fonctionne bien, mais dans certaines, j'ouvre une fenêtre de dialogue. Pour ce faire, dans l'initialisation de la fiche je place l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    initialization
      MaFiche:= TMaFiche.Create(Application);
    et dans le corps de ma DLL je fais un

    Cela fonctionnait à merveille dans ma version DELPHI 6, cela fonctionne dans ma version Lazarus sous Ubuntu 11.04, mais refuse de fonctionner sous WIndows XP : il n'y a pas de plantage, mais la fenêtre refuse obstinément de s'afficher.

    Si je remplace l'instruction d'initialisation par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CreateForm(TMaFiche, MaFiche);
    ça plante,

    Si je mets cette instruction entre le begin et le end de l'unité "Library", ça plante aussi.

    Bref, je ne sais plus quoi faire.

    Si vous avez des idées.

    Je vous en remercie par avance.

    Pïerre

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    si tu gères toi-même la création/destruction des fiches, ne vaut-il pas mieux passer nil que Application comme Owner ?

    sinon, il y a peut-être problème lié à l'ordre des initialisations ?

    solution bâtarde à tester : faire dans l'appli une CallBack qui encapsule le ShowModal, et sera appelée par la librairie
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  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
    Citation Envoyé par tourlourou Voir le message
    si tu gères toi-même la création/destruction des fiches, ne vaut-il pas mieux passer nil que Application comme Owner ? ...
    J'avais déjà essayé, pas mieux.

    Citation Envoyé par tourlourou Voir le message
    ... sinon, il y a peut-être problème lié à l'ordre des initialisations ? ...
    J'avais aussi essayé à différents endroits dont juste avant l'appel à ShowModal : pas mieux.

    Citation Envoyé par tourlourou Voir le message
    ... solution bâtarde à tester : faire dans l'appli une CallBack qui encapsule le ShowModal, et sera appelée par la librairie
    Je ne sais pas faire !

    NOTA : du fait que cela fonctionnait avec DELPHI, que cela fonctionne avec Lazarus sous Linux, peut-on considérer le dysfonctionnement sous Windows comme un bug ?

    Merci de votre aide.

    Pierre

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    une question bête : se passe-t-il qqch de particulier dans le OnShow ou le OnActivate ?

    sinon, pour une fiche Form2 crée par la fiche principale de l'appli, son Form2.ShowModal dans la fiche principale se passe-t-il bien ?

    si c'est le cas, l'idée de la CallBack est de passer une fonction à la librairie :
    dans la librairie. schématiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      LibShowForm: TMyShowFunction;
     
    exports LibShowForm; // on peut exporter des variables
     
    begin
      i:=LibShowForm; // appellera la fonction de la fiche principale
    end;
    dans la fiche principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    type
      TMyShowFunction: function(): integer;
     
    function MyShowModal: integer;
    begin
      Form2.ShowModal;
      Result:=Form2.ModalResult;
    end;
     
    begin
      // je ne sais pas de tête comment récupérer une variable exportée d'une dll, mais je pense que c'est aussi avec 
      VarLib:=GetProcAddress(H, 'LibShowForm');
      // puis on lui affecte la procédure de la fiche principale 
      VarLib:=MyShowModal; // ou @MyShowModal en FPC !
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  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
    Citation Envoyé par tourlourou Voir le message
    une question bête : se passe-t-il qqch de particulier dans le OnShow ou le OnActivate ?
    Rien, aucun des deux évènements n'est appelé, ça plante avant.

    Citation Envoyé par tourlourou Voir le message
    ... sinon, pour une fiche Form2 crée par la fiche principale de l'appli, son Form2.ShowModal dans la fiche principale se passe-t-il bien ? ...
    Une Form2 dans l'appli principale, qu'elle soit créée automatiquement ou bien par un Form2:= TForm2.Create(Application) dans la clause initialization de la fiche de Form2 s'affiche sans problème à l'appel de Form2.ShoModal.

    Citation Envoyé par tourlourou Voir le message
    ... si c'est le cas, l'idée de la CallBack est de passer une fonction à la librairie :
    Je n'ai rien compris. A qui appartient la Form2 dans ton exemple ? A l'appli principale ou à la DLL ?

    Merci de votre aide.

    Pierre

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    l'idée de la callback est de faire exécuter le code du côté qui le peut, qui fonctionne, ou bien où c'est le plus facile.

    tu as confirmé qu'une Form2 créée et appelée en ShowModal par Form1 (fiche principale) ne pose pas de problème.

    du côté Form1 (fiche principale), tu auras donc toute la "mécanique"
    qui gère le ShowModal de la Form2 dans une fonction qui sera appelée depuis la librairie (finalement, on exporte vers la dll une fonction de l'appli : c'est un juste retour des choses...)

    c'est pê plus clair dans ma tête que dans ma prose !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  2. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  3. [Lazarus] Créer des fiches à partir d'une fiche modèle
    Par Louis Griffont dans le forum Lazarus
    Réponses: 4
    Dernier message: 19/03/2009, 13h10
  4. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h42

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