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 :

BCB, Ressources et structure prévue pour Visual C++


Sujet :

C++Builder

  1. #1
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut BCB, Ressources et structure prévue pour Visual C++
    Bonjour,

    j'utilise une application externe pour faire tourner mes propres applications (qui sont des addons de cette application externe) et pour ajouter une commande à cette application externe, je dois remplir la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef struct tagXGOCMDINFORMATIONS
    {
     HINSTANCE hAddOnModule;
     LPCSTR szCmdName;
     UINT iStringID;
     HINSTANCE hStringInst;
     UINT iSmallBmpID;
     UINT iBigBmpID;
     HINSTANCE hBmpInst;
     LONG lCmdFlag;
     char cReserved[100];
    } XGOCMDINFORMATIONS;
    typedef XGOCMDINFORMATIONS FAR * LPXGOCMDINFORMATIONS;
    Cette structure a été prévu, à l'origine pour Visual C++. Or, j'utilise Borland C++ Builder (d'où ma présence ici )

    Je cherche donc à remplir facilement cette strucure mais je ne vois pas comment faire...

    Sous VC++, les paramètres iStringID, iSmallBmpID et iBigBmpID correspondent à l'iD dans les ressources. Comment je peux faire pour le récupérer sous BCB???

    En plus, je ne sais pas comment faire pour ajouter une ressource texte dans BCB. Je sais ajouter une image dans un .res à l'aide de ResHacker mais pour une chaine...

    Merci d'avance.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Vu ta structure tu n'auras aucun problème à l'utiliser sous C++ Builder.
    Si C++ Builder ne pouvait pas gérer cela on serait pas dans la m**** avec l'API Windows.

    Tu as déjà un petit bout de code pour plus cibler ton problème ?

  3. #3
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Voici le code que j'ai fait sous VC++ pendant une formation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    XGOCMDINFORMATIONS InfoCmd;
     
    InfoCmd.hAddOnModule = theApp.m_hInstance;
    InfoCmd.szCmdName = "TestDlg";
    InfoCmd.iStringID = IDS_STRING1;
    InfoCmd.hStringInst = theApp.m_hInstance;
    InfoCmd.iSmallBmpID = IDB_BITMAP1;
    InfoCmd.iBigBmpID = IDB_BITMAP2;
    InfoCmd.hBmpInst = theApp.m_hInstance;
    InfoCmd.lCmdFlag = CMDFLAG_CUSTOMIZABLE;
    Pour certains paramètres (type le szCmdName ou les différents Inst), je n'ai aucun problème pour les récupérer.

    Par contre, pour récupérer les ID des ressources, je ne sais pas comment faire...

    Nb: je suis totalement nul avec les API Windows

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    T'aurais pas une doc pour savoir ce que représentent chacun des champs et ce que tu dois mettre dedant ?

  5. #5
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    J'ai ça:
    hAddOnModule = HINSTANCE de l’addon enregistrant la commande.
    szCmdName = le nom de la commande (les commandes sont repérées par leur nom).
    iStringID = Identifiant numérique d’une chaîne de caractère décrivant les différentes informations de la commande. Cette chaîne est composée de trois parties, séparées par des ‘\n’. La première décrit le texte qui sera affiché dans la barre d’état de GeoConcept, la deuxième l’info bulle qui sera affichée sur les boutons des barres d’outils, la dernière représente le texte qui sera inséré dans les menus (c’est également celui qui sera utilisé pour décrire la commande dans le dialogue de personnalisation). Exemple : Ouvre le fichier sélectionné\nOuvrir\n&Ouvrir

    hStringInst = HINSTANCE du module dans lequel la chaîne sera recherchée (généralement le même que hAddOnModule).

    iSmallBmpID = Identifiant numérique de l’image représentant la commande en petite taille. Cette image doit avoir une taille de 16x15 (largeur x hauteur). La couleur RGB(192, 192, 192) est la couleur transparente pour ces bitmaps.

    iBigBmpID = Identifiant numérique de l’image représentant la commande en grande taille. Cette image doit avoir une taille de 26x25 (largeur x hauteur). La couleur RGB(192, 192, 192) est la couleur transparente pour ces bitmaps.

    hBmpInst = HINSTANCE du module dans lequel les images seront recherchées (généralement le même que hAddOnModule).

    lCmdFlag = Flags décrivant la commande. Il peut prendre une combinaison des valeurs suivantes :

    CMDFLAG_CUSTOMIZABLE
    La commande sera disponible dans le dialogue de personnalisation, c’est à dire qu’elle pourra être insérée dans des barres d’outils créées par l’utilisateur.

    CMDFLAG_DROPDOWN (G5.5)
    La commande apparaît sous la forme d'un bouton liste.

    CMDFLAG_USER (G5.5)
    C'est un contrôle utilisateur à implémenter. Voir XGO_CMDEXECUTE.

    0
    La commande est standard.

    cReserved = Paramètre inutilisé pour l’instant.
    En fouillant dans l'aide sur les API Windows fournit avec Builder, j'ai trouvé la fonction FindResource. Je regarde si je peux faire quelque chose avec ça.

    Mais je ne sais toujours pas comment ajouter une ressource de type texte...

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Regarde du côté des fichiers .rc
    Google devrait te sortir la doc nécessaire. Si tu cherches sur le forum tu devrais trouver le moyen de compiler ces ressources et de les ajouter dans ton projet (il me semble l'avoir déjà expliqué).

    Après si j'ai bien compris tu crées une DLL avec C++ Builder.
    Dans la structure que tu dois remplir, dans tous les HINSTANCE tu met le hInstance de ta dll (récupéré via un des paramètres de la fonction WinMain du projet, générée automatique par C++ Builder).

    Dans les autres tu mettras l'id de la ressource, que tu connaitras via tes fichiers .rc (là j'en suis moins sûr mais c'est quelque chose comme ça).

    Voilà quoi ressemble la fonction WinMain générée par C++ Builder, c'est le paramètre hinst qu'il faut que tu stocke dans une variable pour ensuite pouvoir le mettre dans ta structure !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
       return 1;
    }

  7. #7
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Bingo!
    C'est bien une dll que je crée.

    Pour l'origine du HInstance, j'avais trouvé.
    Mon plus gros problème se situant dans le moyen de récupérer un ID à partir des ressources (voir même de créer ces ressources )

    Je vais regarder du côté des .rc.

    Merci

  8. #8
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Affaire réglée

    Merci à Neilos pour son coup de main

    Solution utilisée :
    Création d'un fichier .rc en me basant sur les fichiers .rc créés sous VC++ pendant ma formation.

    Encore merci à tous.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    De rien, je suis content que ton problème soit réglé

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

Discussions similaires

  1. [Tableaux] Structure PHP pour variable complexe
    Par winnie82 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 13h53
  2. [IDE] - Où trouver des composants pour Visual C# 2005 Express ?
    Par MaTHieU_ dans le forum Visual Studio
    Réponses: 4
    Dernier message: 22/04/2006, 21h50
  3. [Conception] Structure appropriée pour 1 clé et 2 valeurs
    Par maximus001ma dans le forum Général Java
    Réponses: 13
    Dernier message: 01/03/2006, 14h12
  4. Réponses: 7
    Dernier message: 09/11/2005, 02h17
  5. Cours, tutoriels, livres et compilateurs pour Visual C++
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 0
    Dernier message: 21/07/2004, 12h55

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