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

Lazarus Pascal Discussion :

[Linux] Un même PopupMenu pour X composants avec des Items différents


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 109
    Par défaut [Linux] Un même PopupMenu pour X composants avec des Items différents
    Bonjour,
    Pour simplifier, à l'exécution du programme je crée un scrollBox puis sur celui-là une série de Panels (avec le nom de fichier)
    J'ai un même Popup pour l'ensemble de ces composants.
    Au déclenchement du popup le nombre d'items visibles doit être en fonction des caractéristiques du Panel.caption (ex. fichier TXT, PDF...) ou de la zone neutre du ScrollBox.
    Après plusieurs recherches sur internet j'ai une solution qui semble (voir ci-dessous) bien fonctionner sous Windows.
    Je cherche donc l'équivalent pour Linux Ubuntu (je débute dans cet environnement).
    D'avance merci.

    *) Solution Windows

    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
    private   
            Control_Bloc:TWinControl;  // Pour récupérer le composant sous la souris
             // Pour Popup utilise la position de la souris pour récupérer le Composant Bloc pointé
            // utilisé pour neutraliser un item avant l'affichage du popup  
     
    // **************************************************
    procedure TForm1.PopupMenu_Onglet_WindowsPopup(Sender: TObject);
    // Popup Windows
    Var Panel_Compo : Tcomponent;
      begin
         {$IFDEF Windows}
          Recupere_Control_Bloc_Solution_Souris(Sender,Panel_Compo);
         {$ENDIF}
      end;
    // ************************************************** 
    procedure TForm1.Recupere_Control_Bloc_Solution_Souris(Sender: TObject;Var Panel_Compo : Tcomponent);
    // Récupère Control_Bloc : Tcomponent
    Var
      ACursorPos: TPoint;
      AHandle: HWND;
    begin
       {$IFDEF Windows}
      // ----------- Solution fonctionne en Windows ------------------
     // Récupérer les coordonnées du coin supérieur du popup :
      if GetCursorPos(ACursorPos) then  // Récupérer les coordonnées
        begin
         AHandle := WindowFromPoint(ACursorPos); // Chercher un Handle
         if AHandle <> 0 then
           begin
           Control_Bloc:=FindControl(AHandle ); // Chercher le composant sous la souris
              if Control_Bloc<>nil then
              begin  // Composant trouvé : neutraliser Item
                  If Copy(Control_Bloc.Name,1,9)<>'ScrollBox' Then MenuItem_Modifier_Nom_Fichier1.Enabled:=True
                 Else MenuItem_Modifier_Nom_Fichier1.Enabled:=False;
                 .........................................................
              End;
         end;
    end;
       {$ENDIF}
      end;
    // **************************************************

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonsoir

    Je ne visualise pas très bien le comportement que tu souhaites avoir. Pourquoi ne pas utiliser simplement les évènements OnMouse..., OnMouseDown par exemple des contrôles ?

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut


    le sender ne suffit pas pour savoir ou se trouve la souris ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 109
    Par défaut Suite
    Bonjour,
    Suite à vos réponses je joins un petit exemple pour illustrer et prouver mes propos.
    J'ai simplifié au maximum. Mon PopupMenu unique change de menu au-dessus des 3 labels et du ScrollBox.
    J'ai adapté une astuce, glanée sur internet, qui permet de récupérer le composant sous la souris en Windows mais pas en Linux.
    Aimez-moi à trouver un équivalent pour Ubuntu.
    D'avance merci
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    La propriété PopupComponent du PopupMenu ne suffit pas ?

  6. #6
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Utilises la propriété Tag des TPanel puis assigne OnMouseDown a chaque panel et du scrollbox. et n'assignes pas le popup au scrollbox

    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
    procedure TForm1.Panel3MouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
    var
      ACursorPos: TPoint;
    begin
      if button = mbright then
      begin
        if (Sender is TPanel) then
        begin
          Case (Sender as TPanel).Tag of
            1 :
              begin
                MenuItem1.Enabled:=False;
                MenuItem2.Enabled:=False;
                MenuItem3.Enabled:=True;
                MenuItem4.Enabled:=True;
              end;
            2 :
              begin
                MenuItem1.Enabled:=True;
                MenuItem2.Enabled:=True;
                MenuItem3.Enabled:=False;
                MenuItem4.Enabled:=False;
              end;
            3 :
              begin
                MenuItem1.Enabled:=True;
                MenuItem2.Enabled:=False;
                MenuItem3.Enabled:=False;
                MenuItem4.Enabled:=true;
              end;
            4 :
              begin
                MenuItem1.Enabled:=True;
                MenuItem2.Enabled:=False;
                MenuItem3.Enabled:=True;
                MenuItem4.Enabled:=False;
              end;
          end;
        end
        else
        begin
          MenuItem1.Enabled:=True;
          MenuItem2.Enabled:=False;
          MenuItem3.Enabled:=True;
          MenuItem4.Enabled:=False;
        end;
        GetCursorPos(ACursorPos);
        PopupMenu1.PopUp(ACursorPos.x, ACursorPos.y);
      end;
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/07/2013, 15h23
  2. Réponses: 2
    Dernier message: 07/04/2009, 11h45
  3. Réponses: 1
    Dernier message: 29/12/2008, 15h21
  4. Réponses: 2
    Dernier message: 24/02/2008, 14h46
  5. Réponses: 3
    Dernier message: 16/07/2007, 15h16

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