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

 Delphi Discussion :

Où déclarer ma fonction ?


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de Kephuro
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Points : 48
    Points
    48
    Par défaut Où déclarer ma fonction ?
    Bonjour à tous !

    J'ai une erreur de compilation que je ne comprend pas. Pour un projet de stage j'ai besoin de récupérer des données provenant d'excel. J'utilise les composants Flexcel de chez TMS.
    C'est juste pour situer (un peu), le contexte.

    Du coup j'ai codé une fonction me permettant de faire le lien entre l'indice d'une colonne d'excel (A, B, AA...) et sa position chiffrée (1, 2, 27).
    En fait le code est situé sur l'évènement onclick d'un bouton et j'aurais aimé le mettre dans une fonction qui prend comme paramètre un string (de deux caractères maxi) et qui renvoie la position en integer. Voici donc le prototype :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function indiceTopos(Indice :string):integer;
    Que j'ai placé juste après la déclaration de la classe TForm1 et "implementation". Le compilo me renvoie :
    Citation Envoyé par Méchant compilateur
    [Pascal Error] Kernel.pas(176): E2065 Unsatisfied forward or external declaration: 'indiceTopos'
    Et je ne comprend pas pourquoi, c'est bien à cet endroit là qu'on déclare les fonctions qui sont hors classes ?

    Du coup j'aurais bien besoin de vos lumières....Google n'étant pas mon ami pour ce cas précis.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 131
    Points : 106
    Points
    106
    Par défaut
    je ne sais pas si j'ai bien compris mais il faut que tu mette juste l'en-tete de ta fonction dans la partie "Var" juste avant implementation
    et dans la partie implementation tu declare completement ta fonction avec le code a l'interieur.

  3. #3
    Membre du Club Avatar de Kephuro
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Points : 48
    Points
    48
    Par défaut
    Dans Var on ne met que les variables, non ?

    J'ai copié le prototype dans Var mais ça me renvoit cette erreur :

    [Pascal Error] Kernel.pas(178): E2029 Identifier expected but 'FUNCTION' found

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 131
    Points : 106
    Points
    106
    Par défaut
    Perso là je suis en train de developper aussi un projet Delphi pour un stage et j'ai mis les procedures que j'ai créées comme je t'ai dis et je n'ai aucun probleme...
    il ne te manque pas un point-virgule juste avnt ou je ne sais quoi ??

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Ta fonction est bien la première fonction ou procédure définie dans la partie implémentation de ton unité ?

    @+

  6. #6
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    @ cl@udius: ben en delphi peu importe l'ordre de déclarartion des procédures non?
    Du moment que la fonction est déclarée avant dans la partie var, ça devrait suffire non?
    Peut être aussi que c'est pas là ou tu veux en venir...

  7. #7
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Voilà un exemple :

    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
    16
    unit UnitXXX;
     
     
    interface
     
    uses Code, Windows, SysUtils, Extension, Classes ;
     
    function ConProc(CtrlType : DWord) : Bool; stdcall; far;
    implementation
     
    function ConProc(CtrlType : DWord) : Bool; stdcall; far;
    begin
        GlobalError := True ;
     
        Result := False;
    end;

  8. #8
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    perso, c'est la première fois que je vois une fonction déclarée dans le "uses", ce que moi je sais c'est que les procédure ratachées aux composants, comme le Onclick pour un bouton sont déclarés dans "type" juste après le "uses" et que les procédure et fonctions utilisateur sont déclarées dans le "var".

  9. #9
    Membre du Club Avatar de Kephuro
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Points : 48
    Points
    48
    Par défaut
    Honte sur moi...en fait j'ai juste écrit le prototype et j'ai compilé pour voir si c'était au bon endroit.
    Fallait l'implémenter avant de compiler

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 131
    Points : 106
    Points
    106
    Par défaut
    c'est bon alors ca fonctionne ??

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par kumo Voir le message
    ben en delphi peu importe l'ordre de déclaration des procédures non?
    Ben si ça a de l'importance, suivant que tu as défini ou non le prototype de la fonction dans la partie Interface.

    Si le prototype n'est pas défini dans la partie interface, alors dans la partie implémentation la fonction doit être définie avant toutes fonctions ou procédures qui l'appelle.

    @Kephuro: as-tu implémenter ta fonction ?

    [edit]
    Citation Envoyé par Kephuro
    Honte sur moi...en fait j'ai juste écrit le prototype et j'ai compilé pour voir si c'était au bon endroit.
    Fallait l'implémenter avant de compiler
    Ok je comprends mieux.

    @+

  12. #12
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Ma fonction n'est pas déclarer des uses car uses s'arrête au ;.
    Je déclare les fonctions avant implémentation

  13. #13
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par kumo Voir le message
    @ cl@udius: ben en delphi peu importe l'ordre de déclarartion des procédures non?
    Du moment que la fonction est déclarée avant dans la partie var, ça devrait suffire non?
    Peut être aussi que c'est pas là ou tu veux en venir...
    l'ordre en delphi n'a aucune importance, il faut juste que les le code entre les "balises" de debut et de fin soit placé au bon enndroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    uses unit1; //"uses" = debut de la section uses /  ";" = balise de fin
     
    const  //balise de debut de const (pas de balise de fin, les const doivent etre totalement definies a l'interieur
      a = 3; 
     
    type // "type" = balise de debut de type (pas de balise de fin, les type a l'interieur doivent juste etre complets
      Tx = record  //balise debut d'un type
        x: integer;
      end; // balise fin d'un type
     
    function f(x: string): real; // prototype de fonction = une entité placable n'importe ou

    on peut donc avoir un peu n'importe quoi :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    uses unit1;
     
    const
     a=3;
    type
      TX = record
        x: integer;
      end;
     
    var
      MyX: TX
     
    function f(x: real): string;
     
    type
      TY = record
        y: string;
      end;
     
      TZ = record
        z: char;
      end;
     
    procedure g(x: real);
     
    var
      e: extended;
     
    const
      t = 'toto';
      u = 10.5;
     
    etc ...

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

Discussions similaires

  1. Comment déclarer les fonction DayOf, MonthOf, YearOf ?
    Par hinayana dans le forum Débuter
    Réponses: 1
    Dernier message: 22/10/2007, 12h37
  2. Déclarer une fonction à la volée : possible ?
    Par Evocatii dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/07/2007, 21h58
  3. Déclarer une fonction en C++ Builder
    Par l_seringa dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/03/2007, 17h14
  4. Déclarer une fonction avec deux inconnues
    Par a.ahmed dans le forum MATLAB
    Réponses: 6
    Dernier message: 27/02/2007, 09h43
  5. Déclarer une fonction ayant 2 prototypes dans une DLL
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 17/02/2007, 12h00

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