|
| Menu contextuel ou Popup ? |
| Débuté par daniel.hollaar, 10 déc. 2004 12:35 - 7 réponses |
| |
| | | |
|
| |
| Posté le 10 décembre 2004 - 12:35 |
Bonjour,
voilà, je souhaite utiliser un menu contextuel sur une table dont les options sont définies selon la case de la table et le contenu d'un fichier HF. Apparemment, il n'est malheureusement pas possible de rajouter par programmation des options à un menu contextuel (on peut le faire seulement depuis l'éditeur, quel dommage). J'ai donc pensé pouvoir résoudre mon problème avec une fenêtre popup, qui marche bien, excepté le fait que je n'arrive pas à la positionner comme je veux : en effet, ma table prenant la quasi-totalité de la fenêtre, le positionnement automatique à droite, à gauche ou autre ne me satisfait pas, la fenêtre popup se trouvant alors loin de la case appelante.
Quelqu'un parmi vous aurait-il trouvé une solution pour ouvrir une fenêtre popup à côté d'une case précise (voire d'une colonne, je suis pas difficile) ? |
| |
| |
| | | |
|
| | |
| |
| Posté le 10 décembre 2004 - 12:56 |
Tout simplement, tu peux récupérer la position de ta souris lors du clic droit avec SourisPosX et SourisPosY puis l'appliquer a l'ouverture de ta fenêtre pop up avec les propriétés ..X et ..Y La fenêtre apparaîtra alors en bas à droite de ta souris, comme pour un menu contextuel.
-- Bon dév' Hervé "Daniel Hollaar" <daniel.hollaar@agriware.com> a écrit dans le message de news: 41b971dc@news.pcsoft.fr...
Bonjour,
voilà, je souhaite utiliser un menu contextuel sur une table dont les options sont définies selon la case de la table et le contenu d'un fichier HF. Apparemment, il n'est malheureusement pas possible de rajouter par programmation des options à un menu contextuel (on peut le faire seulement depuis l'éditeur, quel dommage). J'ai donc pensé pouvoir résoudre mon problème avec une fenêtre popup, qui marche bien, excepté le fait que je n'arrive pas à la positionner comme je veux : en effet, ma table prenant la quasi-totalité de la fenêtre, le positionnement automatique à droite, à gauche ou autre ne me satisfait pas, la fenêtre popup se trouvant alors loin de la case appelante.
Quelqu'un parmi vous aurait-il trouvé une solution pour ouvrir une fenêtre popup à côté d'une case précise (voire d'une colonne, je suis pas difficile) ? |
| |
| |
| | | |
|
| | |
| |
| Posté le 10 décembre 2004 - 13:06 |
Bonjour,
Si ta pop op doit s'afficher après un clic sur une case de ta table, il te suffit de récupérer la position de ton curseur de ta souris. (PosX et PosY). En espérant t'avoir aider.
Ocin. |
| |
| |
| | | |
|
| | |
| |
| Posté le 10 décembre 2004 - 13:37 |
Dans la popup on a une option soit un bouton soit un champ de saisie. Pour la table je pense quand indiquant la case avec son indice cela devrait marche, peut etre meme les coordonnees) |
| |
| |
| | | |
|
| | |
| |
| Posté le 10 décembre 2004 - 16:43 |
Merci, ça marche, j'y avais pas pensé ... vivement le week-end  |
| |
| |
| | | |
|
| | |
| |
| Posté le 10 décembre 2004 - 16:59 |
| Précision : ça marche avec une fenête normale, mais pas avec les popup (apparemment très récalcitrants pour être repositionné. J'ai donc utilisé une fenêtre normale dont j'ai adapté le style pour ressembler à une popup. Défaut : il n'y a pas de fermeture automatique pour tout clic à côté (j'ai essayé dans le code de perte de focus, mais ça ne arche pas car je l'ouvre avec la Ouvre() et non pas OuvreSoeur() |
| |
| |
| | | |
|
| | |
| |
| Posté le 10 décembre 2004 - 17:52 |
Daniel Hollaar a pensé très fort :
Bonjour,
voilà, je souhaite utiliser un menu contextuel sur une table dont les options sont définies selon la case de la table et le contenu d'un fichier HF. Apparemment, il n'est malheureusement pas possible de rajouter par programmation des options à un menu contextuel (on peut le faire seulement depuis l'éditeur, quel dommage). J'ai donc pensé pouvoir résoudre mon problème avec une fenêtre popup, qui marche bien, excepté le fait que je n'arrive pas à la positionner comme je veux : en effet, ma table prenant la quasi-totalité de la fenêtre, le positionnement automatique à droite, à gauche ou autre ne me satisfait pas, la fenêtre popup se trouvant alors loin de la case appelante.
Quelqu'un parmi vous aurait-il trouvé une solution pour ouvrir une fenêtre popup à côté d'une case précise (voire d'une colonne, je suis pas difficile) ?
Bonsoir, J'ai eu cette problématique. Le ST m'a donné un numéro car c'est un bug. Voici le contournement qui m'a été proposé: Nous avons bien reproduit le problème décrit. Effectivement OuvrePopupPosition semble "perturbé" quand le champ colonne a été déplacé. Nous avons immédiatement enregistré et transmis vos éléments à notre équipe Développement et à notre équipe Qualité.
L'incident a été enregistré avec la référence 41414. Merci d'utiliser cette référence si vous contactez le Support Technique Gratuit sur le même sujet.
Nous vous proposons le contournement suivant que nous avons testé avec succés :
- définir un champ image transparent et très petit, par exemple 5par18 (ce champ va servir de repère à la fonction OuvrePopupPosition .
- modifier votre code ainsi (on déplace l'image puis on ouvre la Popup sur l'image).
SI _EVE.wParam=0x73 ET (ChampEnCours()=MoiMême OU {gcNomChamp}..Type=typDate) ALORS // le camp en cours est la table si simulation depuis le menu contextuel eInt est un entier=IndiceEnCours() Image1..X = {gcNomChamp}..X Image1..Y = eInt*MoiMême..HauteurLigne+MoiMême..Y+11 {gcNomChamp}[eInt]..Valeur=OuvrePopupPosition(calendrier,poBas+poDroite+poSelonChamp,"image1",{gcNomChamp}[eInt]..Valeur) FIN
-- Pascal |
| |
| |
| | | |
|
| | |
| |
| Posté le 13 décembre 2004 - 11:32 |
J'ai pour ma part défini un menu contextuel standard dans toutes mes fenêtres, menu contenant 20 Options, suffisant pour la plupart des utilisations. J'associe dynamiquement ce menu à ma table, et je personnalise les options, en fonction du contexte. Le code de chaque bouton correspond à l'exécution du traitement d'un bouton. Je me suis imposé des contraintes de nom de boutons et de nom d'options, mais celà peut être modifié.
Voici l'exemple du code correspondant à la génération du menu contextuel :
// Active et désactive les options de menu contextuel dans une fenêtre // met à jour l'image et le libellé du menu en fonction de ceux du bouton // en fonction d'une liste donnée // Paramètres // Nom du menu contextuel // Noms des boutons séparés par des virgules (B_espace pour un séparateur) // Action à faire : vrai pour activer, faux pour désactiver // Modification (dans ce cas on ne modifie pas les autres options du menu) // Image si on veut ajouter l'image au menu PROCEDURE GLOBALE BoutonMenu(P_NomMenu,P_ListeBoutons,P_Activation,P_Modif=Faux,P_Image=Vrai) L_NomMenu est chaîne=P_NomMenu L_ListeBoutons est chaîne=Majuscule(P_ListeBoutons) L_ListeMenu est chaîne // contient la liste actuelle du menu avec état L_Activation est entier=P_Activation L_Ibouton, L_Imenu sont entier L_i, L_k, L_IEspace sont des entiers L_PositionDebut, L_PositionFin sont entier L_Listetravail est chaîne L_NomChamp est chaîne L_NomBouton est chaîne L_NomBoutonFenetre est chaîne L_NomOption est chaîne L_Action est entier L_Espace est booléen=Faux L_Couleur est entier
// On charge la liste des options actuelles du menu et on les efface // ================================================================= L_Imenu=1 L_i=1 L_NomChamp=EnumèreMenu(L_NomMenu,L_i) TANTQUE L_NomChamp<>"" L_NomOption=FenEnExécution()+"."+L_NomMenu+".M_Op"+NumériqueVersChaine(L_i,"02d") SI {L_NomOption}..Visible=Vrai ALORS SI P_Modif ALORS L_NomBouton=Majuscule({L_NomOption}..Message) L_ListeMenu+=L_NomBouton+TAB+{L_NomOption}..Etat+"," FIN MenuInvisible({L_NomOption}) L_i++ L_NomChamp=EnumèreMenu(L_NomMenu,L_i) SINON L_NomChamp="" FIN FIN // on fusionne les deux listes pour modif // ====================================== L_i=1 L_NomChamp=SansEspace(ExtraitChaîne(L_ListeBoutons,L_i,",")) L_NomBouton=ExtraitChaîne(L_NomChamp,1,TAB) TANTQUE L_NomBouton<>"" ET L_NomBouton<>EOT L_PositionDebut=Position(L_ListeMenu,L_NomBouton,1) SI L_PositionDebut<=0 OU L_NomBouton="B_ESPACE" ALORS L_ListeMenu+=L_NomBouton+TAB+L_Activation+"," SINON L_PositionFin=Position(L_ListeMenu,",",L_PositionDebut) L_Listetravail=L_ListeMenu[[1 A L_PositionDebut-1]]+L_NomBouton+TAB+L_Activation+L_ListeMenu[[L_PositionFin A]] L_ListeMenu=L_Listetravail FIN L_i++ L_NomChamp=SansEspace(ExtraitChaîne(L_ListeBoutons,L_i,",")) L_NomBouton=ExtraitChaîne(L_NomChamp,1,TAB) FIN // Le traitement suivant n'est à faire que pour l'activation des options // ===================================================================== L_i=1 L_NomChamp=SansEspace(ExtraitChaîne(L_ListeMenu,L_i,",")) L_NomBouton=ExtraitChaîne(L_NomChamp,1,TAB) L_Action=ExtraitChaîne(L_NomChamp,2,TAB) L_NomOption=FenEnExécution()+"."+L_NomMenu+".M_Op"+NumériqueVersChaine(L_Imenu,"02d") L_NomBoutonFenetre=FenEnExécution()+"."+L_NomBouton TANTQUE L_NomBouton<>"" ET L_NomBouton<>EOT SI L_Action=Actif OU L_Action=Grisé ALORS SI L_NomBouton="B_ESPACE" ALORS SI PAS L_Espace {L_NomOption}..Libellé="__________________" {L_NomOption}..Message=L_NomBouton {L_NomOption}..Image="" MenuSelectMoins({L_NomOption}) L_Imenu++ L_Espace=Vrai FIN SINON SI ChampExiste(L_NomBoutonFenetre) ALORS SI P_Image ALORS {L_NomOption}..Image={L_NomBoutonFenetre}..Image FIN {L_NomOption}..Message=L_NomBouton SI SansEspace({L_NomBoutonFenetre}..Libellé)<>"" ALORS {L_NomOption}..Libellé={L_NomBoutonFenetre}..Libellé SINON SI SansEspace({L_NomBoutonFenetre}..Bulle)<>"" ALORS {L_NomOption}..Libellé={L_NomBoutonFenetre}..Bulle FIN FIN SI L_Action=Actif ALORS MenuSelectPlus({L_NomOption}) SINON MenuSelectMoins({L_NomOption}) FIN L_Espace=Faux L_Imenu++ FIN FIN FIN L_i++ L_NomChamp=SansEspace(ExtraitChaîne(L_ListeMenu,L_i,",")) L_NomBouton=ExtraitChaîne(L_NomChamp,1,TAB) L_Action=ExtraitChaîne(L_NomChamp,2,TAB) L_NomOption=FenEnExécution()+"."+L_NomMenu+".M_Op"+NumériqueVersChaine(L_Imenu,"02d") L_NomBoutonFenetre=FenEnExécution()+"."+L_NomBouton FIN |
| |
| |
| | | |
|
| | | | |
| | |
|