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

C++Builder Discussion :

Accéder à une fonction d'une autre form


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut Accéder à une fonction d'une autre form
    Bonjour,

    J'essaye d'accéder à une fonction "RemovePagesType" définie sur ma form ReportDocument.cpp depuis ma form VipReportMain.cpp.

    J'ai donc logiquement codé dans ma form VipReportMain.cpp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "ReportObjectClass/ReportDocument.h"
     
    ....
     
    void __fastcall TVipReportMain::BtSupprimerImagesClick(TObject *Sender)
    {
    ReportDocument->RemovePagesType("Images");
    }
    Le code de ma fonction (form ReportDocument.cpp) est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TReportDocument::RemovePagesType(AnsiString TypeValue)
    {       std::vector<TReportPage *>::iterator PagesIte = FPages.begin();
     
            while(PagesIte < FPages.end())
            {       if ((*PagesIte)->Type=="Images")
                    {       delete (*PagesIte);
                            FPages.erase(PagesIte);
                    }
                    PagesIte++;
            }
    }
    et j'ai l'erreur [C++ Erreur] VipReportMain.cpp(1827): E2451 Symbole 'ReportDocument' non défini

    J'ai donc ensuite essayé de déclarer ma fonction en extern mais sans succès :
    [Lieur Erreur] Unresolved external '__fastcall RemovePagesType(System::AnsiString)' referenced from C:\DOCUMENTS AND SETTINGS\1988UTC\MES DOCUMENTS\VIP4000-1 SUR G0903049\VIP4000-1\MODULE_RAPPORT\VIPREPORTMAIN.OBJ


    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    il faut utilisé comme instance de ta classe TReportDocument, le nom de ta fenêtre ReportDocument (propriété Name de cette fenêtre)

    Exemple si ta fenêtre associé a la classe TReportDocument à pour propriété Name Form1 alors il faut utiliser ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "ReportObjectClass/ReportDocument.h"
     
    ....
     
    void __fastcall TVipReportMain::BtSupprimerImagesClick(TObject *Sender)
    {
      Form1->RemovePagesType("Images");
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    Merci mais j'ai pas tres bien compris ton explication, j'ai donc essayé de tâtonner mais sans succès

    Le nom de la form est ReportObjectClass\ReportDocument

    Je dois donc mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ReportObjectClass\ReportDocument->RemovePagesType("Images");
    [C++ Erreur] VipReportMain.cpp(1827): E2206 Caractère '\' (0x|5c) incorrect
    [C++ Erreur] VipReportMain.cpp(1827): E2451 Symbole 'ReportObjectClass' non défini

    J'ai également essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TReportDocument->RemovePagesType("Images");
    [C++ Erreur] VipReportMain.cpp(1827): E2108 Utilisation impropre de typedef 'TReportDocument'

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    A la fin de ton fichier ReportDocument.h, tu devrait trouver la ligne suivante (ce ne sera peut être pas Form1, mais le nom que tu as donner à ta fenêtre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern PACKAGE TReportDocument*Form1;
    Donc tu doit mettre le code que je t'ai donné précédemment en changeant le Form1 par le nom que tu trouvera à l'emplacement que je vient de te donner au dessus

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Est ce que ReportDocument est déclaré en global dans le *.cpp de ta classe TReportDocument?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    merci pottiez
    il n'y avait rien de declarer en extern donc j'ai déclaré comme tu me l'as indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern PACKAGE TReportDocument *ReportDocument;
    mais j'obtiens :

    [Lieur Erreur] Unresolved external '_ReportDocument' referenced from C:\DOCUMENTS AND SETTINGS\1988UTC\MES DOCUMENTS\VIP4000-1 SUR G0903049\VIP4000-1\MODULE_RAPPORT\VIPREPORTMAIN.OBJ

    Sat : je regarde

    en tout cas merci beaucoup de l'aide

  7. #7
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Normalement c'est créer automatiquement, ce n'est pas a toi de l'ajouter!

    Comment as tu créer ta nouvelle fiche? Via Fichier->Nouveau->Fiche?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    Je ne l'ai pas créer .
    J'ai repris le projet en cours de route ...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    La syntaxe exacte était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ViewEdition->Document->RemovePagesType("Images");
    C'était utilisé plus haut dans le code avec une autre fonction de la page ReportDocument...
    Désolé pour le dérangement et merci du coup de main.
    Bonne après-midi et bon week end à vous.

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Appel d'une fonction dans une iframe sur un autre domaine
    Par morikann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2007, 18h46
  3. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  4. Réponses: 8
    Dernier message: 10/01/2007, 21h10
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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