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 :

Pb de POPUPMENU


Sujet :

C++Builder

  1. #1
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut Pb de POPUPMENU
    bonsoir,

    j'ai un problèm très siérieux et j'ai pas trouvé de solution et c'est très génant:
    je crèe des TImages dynamquement et je les affectues un POPUPMENU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Image[i] = new TImage(this);
    Image[i]->Parent = Panel1;
     
    Image[i]->OnMouseDown = ImageMouseDown;
    Image[i]->OnMouseMove = ImageMouseMove;
    Image[i]->OnMouseUp   = ImageMouseUp;
     
     
    Image[i]->PopupMenu = Form1->PopupMenu1;
    Form1->PopupMenu1->AutoPopup =  true;
    et j'utilse les évènements de la sourie :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    void __fastcall TForm1::ImageMouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
     
    TImage *Image = (TImage*)Sender;
    eqchoisi = Image->Tag;
     
    deplacer = true;
    imageenfonce = Button;
    DeplX = X;
    DeplY = Y;
    if (Button == mbRight)
    {
     if(Shift.Contains(ssCtrl)) {
     tab[eqverif] = eqchoisi;
     
       if ((lien [tab[eqverif-1]][tab[eqverif]]>=1)&&(lien [tab[eqverif]][tab[eqverif-1]]>=1))
       {
        if ( eqverif >= 1){ lien [tab[eqverif-1]][tab[eqverif]]=3;
                            lien [tab[eqverif]][tab[eqverif-1]]=3;}
         Form1->Analyser1->Enabled= true;
       }
       //Form1->ListBox1->Items->Add(tab[eqverif]);
       eqverif ++;
     
       lier();
     
     
     }
     else {
            if (Shift.Contains(ssAlt))
            { if (eqsupp >=2) eqsupp=0;
              supp[eqsupp]=eqchoisi;
              if ( eqsupp >= 1){ lien [supp[eqsupp]][supp[eqsupp-1]]=0;
                            lien [supp[eqsupp-1]][supp[eqsupp]]=0;
                           }
            eqsupp++;
            Form1->PaintBox1->Repaint();
            lier();
     
            }
             else
             {     Form1->Analyser2->Enabled =false;
                     Form1->sauvgarder1->Enabled = false;
                   for (int j=0;j<comppop;j++)
                   {
     
                    if (eqchoisi==pop[j])
                    {
                     Form1->Analyser2->Enabled =true;
                     Form1->sauvgarder1->Enabled = true;
                    }
                   }
     
             }
          }
     
    }
     
    }
    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
     
    void __fastcall TForm1::ImageMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
     
     
    if (imageenfonce == 0) {
    TImage *Image = (TImage*)Sender;
     if(deplacer)
    {
     
    Image->SetBounds( Image->Left + X - DeplX,
    Image->Top + Y - DeplY,
    Image->Width,
    Image->Height);
     
    label[Image->Tag]->Left = Image->Left;
    label[Image->Tag]->Top = Image->Top -15;
    } else {
            Form3->Edit3->Text = Image->Tag;
            Form3->Edit2->Text = label[Image->Tag]->Caption;
            }
     }
     
    }
    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
     
    void __fastcall TForm1::ImageMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
     
     
     
     
    TImage *Image = (TImage*)Sender;
    if (imageenfonce == 0) {
    label[Image->Tag]->Left = Image->Left;
    label[Image->Tag]->Top = Image->Top -15;
            deplacer = false;
            lier();
     
            Application->ProcessMessages();
    } else {
            lien [eqchoisi][Image->Tag] = 1;
            lien [Image->Tag][eqchoisi] = 1;
            lier();
    }
     
    }
    j'ai essaye 2 ou 3 solutions et ça ne marche pas.
    MErci pour votre aide

  2. #2
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    personne ne peut m'aider

  3. #3
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    ben moi je cherches....et je vois toujours pas à quel moment tu as dit quel était ton problème?
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  4. #4
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    mon problème : le popup s'affiche lorque je trace une ligne car je fais un click droit sur l'image de départ et je fais glisser la sourie jusqu'à l'image d'arrivée et lorsque je fais le traitement avec le "cltl" ou bien "alt" j'ai le même problème

  5. #5
    Membre actif Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    Par défaut
    En fait tune peux pas mettre AutoPopup à true de cette manière...
    au contraire, met un false.
    Après avoir sélectionné les éléments de menus à afficher ou juste après que toutes les opérations à effectuer avant l'affichage du menu popup soient effectuées, il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1->PopupMenu1->Popup();

    Mattetfamilly.
    on aura tout vu...
    Mais où est-ce???...
    ------------------------------------------------------
    n'oublies pas les balises [code ][/code ]
    et le Tag

  6. #6
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    merci pour cette indication, mais il faut mettre les coordonnées pour l'affichage du popup et quand j'ai mis celle de l'image le popoup s'affiche avec ces coordonnées mais par rapport à l'écran pas par rapport à mon interface.

    Comment faire????

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Citation Envoyé par bhahmed
    merci pour cette indication, mais il faut mettre les coordonnées pour l'affichage du popup et quand j'ai mis celle de l'image le popoup s'affiche avec ces coordonnées mais par rapport à l'écran pas par rapport à mon interface.

    Comment faire????
    Il suffit d'ajouter les coordonnées de ton interface aux coordonnées où tu veux afficher ton Popup;

    Exemple :
    Disont que tu veux afficher ton popup en X = 10 et Y = 25 sur ta fiche, il te suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int x = this->Left + 10;
    int y = this->top + 25;
     
    Form1->PopupMenu1->Popup(x,y);
    + + +

  8. #8
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    ok ça marche pour les coordonnées.
    mais moi j'utilise le bouton droit pour tracer une ligne entre 2 Timage.
    ça ne marche plus avec cette méthode

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Citation Envoyé par bhahmed
    ok ça marche pour les coordonnées.
    mais moi j'utilise le bouton droit pour tracer une ligne entre 2 Timage.
    ça ne marche plus avec cette méthode
    j'avoue ne pas avoir saisi le nouveau problème
    + + +

  10. #10
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    je crée un lien entre 2 Timages à l'aide du bouton droit de la sourie (je séléctionne le premier et je fais glisser la sourie jusqu'au deuxième) mais la méthode popup bloque cette action car le menu popup s'affiche avant que je fasse le déplacement

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Voici un bout de code (fait rapidement) et qui devrait correspondre à ce que tu désires faire.

    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
    36
     
    void __fastcall TForm1::Image1Click(TObject *Sender)
    {
     PremiereImage = (TImage*)Sender; //copie de l'adresse de ma première image
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image2MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
     if (Button == mbRight)//si bouton droit cliqué
     {
      DeuxiemeImage = (TImage*)Sender;//copie de l'adresse de ma deuxième image
      Popup->Popup(Left + DeuxiemeImage->Left + X,Top + DeuxiemeImage->Top + Y);//affichage popup
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Lien1Click(TObject *Sender)
    {
     TCanvas* Dessin = Form1->Canvas;//récupération du canvas de la fiche
     
     Dessin->Brush->Color = clBlack; //couleur pinceau
     Dessin->Pen->Width = 4;//taille
     
     TPoint Debut;
     Debut.x = PremiereImage->Left + (PremiereImage->Width)/2;//coordonnée du premier point
     Debut.y = PremiereImage->Top + (PremiereImage->Height)/2;//milieu du TImage
     
     Dessin->MoveTo(Debut.x,Debut.y);//on déplace le pinceau au point de début
     
     TPoint Fin;
     Fin.x = DeuxiemeImage->Left + (DeuxiemeImage->Width)/2;//coordonnée du deuxième point
     Fin.y = DeuxiemeImage->Top + (DeuxiemeImage->Height)/2;//milieu du TImage
     
     Dessin->LineTo(Fin.x,Fin.y);//on trace la ligne
    }
    //---------------------------------------------------------------------------
    Je te conseille de tester ce code dans un nouveau projet pour voir si ça te correspond. Si ce n'est pas ce que tu désires, il faudra me réexpliquer...

    Nb: le popup contient un élément lien et est lié à ma deuxième image
    + + +

Discussions similaires

  1. Problème avec un PopupMenu
    Par Captain_JS dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/09/2004, 20h09
  2. Ajout Menu dans un PopupMenu
    Par Larion dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/08/2004, 12h45
  3. Modifier la couleur de fond d'un popupmenu
    Par lil_jam63 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 05/08/2004, 20h23
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. PopupMenu sur item de TListBox
    Par nmathon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/03/2003, 17h28

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