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 :

Creation dynamique d'elements de menu avec une DLL [Non suivi]


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut Creation dynamique d'elements de menu avec une DLL
    Bonsoir,

    Encore une p'tite question nocturne....

    J'ajoute des TMenuItems au TMainMenu de ma form principale au moyen d'une fonction appell�e d'une DLL.
    Celle ci lit les valeurs contenues ds une table pour ajouter les items et ajuste la propri�t� Enabled en fonction de valeurs ds cette meme table.

    Tout va bien, jusqu'au 'OnClick()' des TMenuItems, qui ne g�n�rent aucune erreur mais ne donnent pas les r�ponses attendues.Seuls les premiers et derniers items r�pondent correctement, et les autres sont soit muets soit taquins.
    A noter qu'avant insertion de ces nouveaux items, il existe d�ja 3 items 'fixes' (dont les 'OnClick()' sont cod�s 'en dur' ds la fiche principale donc ne posant pas de problemes).

    Ci joint un bout de code de la DLL, l'action se situant ds ActionChargerMenu :
    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
     
     
    //---------------------------------------------------------------------------
     
    void __fastcall ActionChargerMenu(TMainMenu* AMenu, TTable* ATable)
    {
    //..................
     
    TMenuItem *pItem; String TexteComplet, PremiereLettre;
    for (int i = 7; i < ATable->Fields->Count; i ++)
    {
    PremiereLettre = ATable->Fields->Fields[i]->DisplayName.SubString(1,1);
    TexteComplet = (ATable->Fields->Fields[i]->DisplayName.LowerCase()).Delete(1,1);
            pItem = new TMenuItem(AMenu);
            pItem->Name = "Menu" + IntToStr(i);
            pItem->Caption = TexteComplet.Insert(PremiereLettre,1);
            pItem->Tag = i;
            pItem->Enabled = ATable->Fields->Fields[i]->AsBoolean;
            pItem->OnClick = frmReponseInterfac->ActionReponseMenu->OnExecute;
            AMenu->Items->Insert(i - 6, pItem);
     
    }
     
    //...........
     
    }
    //---------------------------------------------------------------------------
    Pour la 'r�ponse' au click, j'esp�rait utiliser betement un truc comme :
    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
     
    void __fastcall TfrmReponseInterfac::ActionReponseMenuExecute(
          TObject *Sender)
    {
    TMenuItem* pItem = dynamic_cast < TMenuItem * > (Sender);
     
    switch ( pItem->Tag )
    {
            case 7:
           //.........
            break;
            case 8:
            //...........
                    ShellExecute(Handle, "open", "Ventes.exe", NULL, NULL, SW_SHOW);
            break;
            default:
            //..............
            break;
    }
     
    }
    Merci d'avance pour vos conseils �clair�s,
    @ +

  2. #2
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    Tu veux dire que le premier et le dernier �l�ments ajout�s par ta fonction sont correctement trait�s mais pas les autres??

  3. #3
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonsoir,

    Oui, effectivement , c'est exactement ce qui arrive

    je sais, je sais, cela ne parait pas tres clair, mais c'est pourtant ce qui arrive.

    //Edit :
    J'ai menti.............c'est pire. Y'a un des �l�ments 'dynamique' qui prends l'action du premier �l�ment 'fixe'.
    Ca pourrait presque me faire rire, si ce n'etait pas si g�nant pour mon cas en cours.
    //


  4. #4
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    Je ne vois pas trop quelle pourrait �tre l'erreur.

    Je vois que tu changes le nom de l'objet... Est-ce vraiment n�cessaire? As-tu essay� sans, car l'aide de Borland pr�cise:
    Warning: Changing Name at runtime causes any references to the old name to become undefined. Any subsequent code that uses the old name will cause an exception.
    Peut-�tre que ton pointeur n'est plus vraiment valide apr�s le changement de nom (mais je ne pense pas)

    As-tu v�rifi� si le pointeur sur OnClick est bien le m�me au moment de la cr�ation pour chaque �l�ment?

    Est-il modifi� par une autre partie du code qui pourrait expliquer ce comportement?

    As-tu essay� de faire le Insert avant le OnClick? D'associer directement le pointeur sur la fonction (sans passer par l'action->OnExecute):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    pItem->OnClick = frmReponseInterfac->ActionReponseMenuExecute
    Ce ne sont que des pistes... et aucune ne me convainc vraiment :-(

    Bonne chance

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    D'une part on a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    pItem->OnClick = frmReponseInterfac->ActionReponseMenu->OnExecute;
    Et d'autre part on montre un prototype :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    void __fastcall TfrmReponseInterfac::ActionReponseMenuExecute( 
          TObject *Sender)
    Ne faudrait-il pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    pItem->OnClick = frmReponseInterfac->ActionReponseMenuExecute;
    A plus !

  6. #6
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonsoir a tous,

    Merci d'abord pour vos diff�rentes r�ponses...
    J'ai essay� (ou r�essay� en fonction des cas) ce qui m'avait �t� indiqu�, et je n'ai pas de nouveau r�sultat. (C'est fou ca...)
    Je ne peut pas vraimment faire du sur-place pendant trop longtemps, j'ai donc troqu� mon id�e premi�re pour une fonction qui ne g�re que le caract�re 'Enabled' en fonction des TMenuItems des valeurs lues dans la table; en esp�rant trouver le pourquoi du comment un peu plus tard.
    (Bon je suis oblig� de rester avec des TMenuItems 'fixes', mais tant pis pour l'instant)

    Merci et @ +

Discussions similaires

  1. [C++ Win32] un menu avec une fen�tre Dialog
    Par swo.line dans le forum C++
    R�ponses: 0
    Dernier message: 27/04/2008, 11h03
  2. Element de menu avec lettre soulign�e
    Par Ivynox dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 10/12/2007, 17h45
  3. cocher un item dans un menu, avec une dialog
    Par Racailloux dans le forum MFC
    R�ponses: 1
    Dernier message: 07/12/2007, 10h49
  4. Probl�me de creation de repertoire avec une DLL
    Par Avisseau dans le forum Delphi
    R�ponses: 4
    Dernier message: 19/06/2006, 09h13
  5. Probl�me m�moire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    R�ponses: 6
    Dernier message: 15/12/2003, 13h20

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