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

Langage Delphi Discussion :

Delphi 6 : Incompatibilité au niveau de la liste des paramètres


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut Delphi 6 : Incompatibilité au niveau de la liste des paramètres
    Bon j'ai un composant qui m'indique incompatibilité au niveau de la liste des paramètres.

    Il compile bien sur Delphi seattle (version évaluation) (j'arrive à l'utiliser et à l'installer à la palette des composants même si Delphi Seattle ignore où il se trouve).

    Quand je compile le programme demo. Le compilateur me donne comme message : "La liste des paramètres de la fonction est composée de variable Double et Integer. Voulez-vous la retirer de la liste de référence?"

    Peut-on corriger ce problème? Si oui comment? Ou suis-je mieux de me procurer Delphi Seattle ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    l'unité Windows.pas est coutumière du fait, selon la version de Delphi certains paramètres sont déclarés Integer ou Cardinal; pour contourner cela il faut utiliser {$IFDEF VERxxx} pour déclarer selon la version du compilateur le bon type de paramètre.

    voir http://docwiki.embarcadero.com/RADSt...du_compilateur

    exemple rapide pour D6 uniquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var
      i:{$IFDEF VER140}Integer{$ELSE}Cardinal{$ENDIF};
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Excusez-moi, il y a une partie du message d'erreur du compilateur qui manque. L'erreur donnée par le compilateur est :

    "La méthode X1Y référencée par X1.onY a une liste de paramètres incompatible. Voulez vous retirez la référence?"

    La procédure est déclarée comme suit dans le programme demo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure TForm.X1Y(Sender: TObject;
      DataId:Integer; TkType: TtkType; Implied, Delta, Model, pvD: Double);
    J'ai essayé ça sans succès, d'ailleurs je ne crois pas que c'est ce qu'il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure TForm.X1Y(Sender: TObject;
      DataId:{$IFDEF VER140}Cardinal{$ELSE}Integer {$ENDIF}; TkType: TtkType; Implied, Delta, Model, pvD: Double);
    Il y a quelques chose intéressant dans les uses du composant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {$IF CompilerVersion >= 24.0}  // XE3
    uses System.SysUtils, System.Classes, Winapi.Windows, Winapi.WinSock;
    {$ELSE}
    uses  SysUtils, Classes, Windows, Winsock;
    {$IFEND}
    Ca semble avoir étrangement rapport avec ce tu dis Paul.

    Est-ce que Delphi 6, il y aurait une déclaration différente à faire?

    Le concepteur vient de me dire que ça fonctionne pas pour D6, seulement à partir de D7: I would think the trouble is the dfm form resource file is not backward compatible.

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    quel est ce composant X1 ?

    il n'y a pas d'incompatibilité à mon avis entre D6 et D7, ce que Delphi indique c'est que la déclaration de TForm.X1Y ne correspond pas à ce qu'attends la méthode X1.OnY.

    une façon simple d'avoir la bonne déclaration est de placer un nouveau composant X2 et de double-cliquer sur OnY, Delphi ajoutera automatiquement la déclaration correcte.

    mais c'est peut-être simplement la référence à TtkType qui est incorrecte, où est-il déclaré ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    quel est ce composant X1 ?

    il n'y a pas d'incompatibilité à mon avis entre D6 et D7, ce que Delphi indique c'est que la déclaration de TForm.X1Y ne correspond pas à ce qu'attends la méthode X1.OnY.
    Il pilote une interface, qui communique avec un serveur extérieur.

    Je crois que tu as raison, il affirme que son composant marche sur Delphi 6 et plus, mais pas le démo...

    une façon simple d'avoir la bonne déclaration est de placer un nouveau composant X2 et de double-cliquer sur OnY, Delphi ajoutera automatiquement la déclaration correcte.
    Tu es vraiment génial!

    J'ai extrait le corps de la procédure, compilé, cliqué sur l’évènement, injecté le corps dedans et recompilé le tout. Ça compilé #1. L'entête de l'évènement (procédure) n'est plus le même.

    Pour le fonctionnement, ça planter au bout de quelques manipulations. Ce n'est donc pas compatible Delphi 6.

    mais c'est peut-être simplement la référence à TtkType qui est incorrecte, où est-il déclaré ?

    Je ne crois pas: il est déclaré dans le .pas du composant.


    Merci, je vais me procurer Delphi Seattle démarrage ça va régler le problème.

    [hormis que je dois copier le .pas du composant dans chaque répertoire projet car j'arrive pas à savoir dans quel répertoire qui ferait son bonheur une fois pour toute... ]}

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par sgmsg Voir le message
    [hormis que je dois copier le .pas du composant dans chaque répertoire projet car j'arrive pas à savoir dans quel répertoire qui ferait son bonheur une fois pour toute... ]}
    la méthode la plus simple pour gérer cela, c'est à mon avis d'ajouter le .PAS au projet (bouton +) ce qui a pour effet de l'ajouter dans le fichier DPR (menu Voir Source) sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    program Project1;
     
    uses
      MonUnit in '..\lib\MonUnit.pas'; // le mot clé "in" donne un chemin relatif (ou pas) vers le .PAS sans ambiguïté possible
     
    begin
    end.
    toute unité du projet pourra faire un simple "Uses MonUnit", son emplacement étant parfaitement défini dans le DPR.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Merci Paul

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

Discussions similaires

  1. Liste des paramètres
    Par kiwwi209 dans le forum Struts 2
    Réponses: 1
    Dernier message: 09/03/2011, 17h42
  2. Réponses: 3
    Dernier message: 15/08/2009, 15h56
  3. Réponses: 1
    Dernier message: 22/02/2009, 19h34
  4. [O9i]Liste des paramètres en français
    Par Fabien Celaia dans le forum Oracle
    Réponses: 10
    Dernier message: 24/11/2004, 17h55
  5. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54

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