FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» quel est ce comportement de Panoramic_editor
par Oscaribout Aujourd'hui à 3:02

» bug BORDER_HIDE : bloque la commande full_space
par silverman Aujourd'hui à 1:19

» Découpe dans une image
par JL35 Hier à 22:00

» FNC IsDateValide(d$) pour vérifier la validité d'une date
par papydall Hier à 18:57

» Pour faire plaisir à jjn4.
par Pedro Alvarez Hier à 8:13

» Pour faire plaisir à Marc37.
par Marc Jeu 22 Fév 2018 - 21:46

» Couleur d'une variable qui n'est pas un mot-clé
par bignono Jeu 22 Fév 2018 - 14:03

» Un catalogue de photos de fleurs, avec KBDD, affichage HTML
par Klaus Mer 21 Fév 2018 - 22:44

» KGF_dll - nouvelles versions
par Klaus Mer 21 Fév 2018 - 22:30

» Mah-Jong anglais
par jjn4 Mer 21 Fév 2018 - 14:22

» Partie fractionnaire d'un flottant
par silverman Mer 21 Fév 2018 - 14:19

» bug CREATE_HIDE : corruption de form
par silverman Mer 21 Fév 2018 - 13:32

» Racine carrée d’un nombre par l’algorithme de Héron
par Ouf_ca_passe Mer 21 Fév 2018 - 9:52

» Méthode manuelle d'extraction de la racine carrée
par pascal10000 Mer 21 Fév 2018 - 7:47

» [annulé]ON_MOVE n,l ne fonctionne que sur le form 0
par silverman Mar 20 Fév 2018 - 16:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Février 2018
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
262728    
CalendrierCalendrier

Partagez | 
 

 Clic droit

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6152
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Clic droit   Mer 7 Fév 2018 - 13:45

Je regrette toujours que le ON_CLICK sur un objet ne réagisse pas indifféremment au clic gauche et au clic droit, à charge pour l'utilisateur, si nécessaire, de faire la distinction avec les fonctions adéquates (Mouse_Left_Down ou Mouse_Right_Down).

J'ai une LIST d'élements, et je voudrais faire des traitements différents suivant le click:
- donner des infos sur l'élément sur clic droit
- sélectionner l'élément sur clic gauche.

Un palliatif: une sub qui surveille en permanence le clic droit sur un objet (ici LIST) donné.
La sub est lancée au début du programme, et surveille en permanence le clic droit sur le List.
Si clic droit, lancement d'un sous-programme de traitement, puis relance de la surveillance.
En 'dur' dans la sub: le nom du sous-programme à lancer si détection (ici 'Rclick')

NB: la sub tient compte du défilement du LIST dans sa fenêtre et donne l'index absolu cliqué (grâce à une fonction de User32.dll que j'ai sûrement récupérée ici).
Un exemple (juste pour voir, avec un fichier texte quelconque dans la LIST):
Code:
LABEL Quit,Gclick,Rclick
DIM i%
HEIGHT 0,SCREEN_Y-30: ON_CLOSE 0,Quit: COLOR 0,128,255,255
LIST 10: WIDTH 10,500: HEIGHT 10,HEIGHT_CLIENT(0)-30
ON_CLICK 10,Gclick
DLIST 11
BUTTON 15: TOP 15,HEIGHT_CLIENT(0)-26: LEFT 15,WIDTH(0)/2-40
  CAPTION 15,"Quitter": ON_CLICK 15,Quit
file_load 11,"C:\Textes\Annu.txt"
FOR i% = 1 TO COUNT(11): ITEM_ADD 10,STR$(i%)+"_ "+ITEM_READ$(11,i%): NEXT i%
RightClick(10)
END
' ==============================================================================
Quit:
  TERMINATE
RETURN
' ==============================================================================
Gclick:
  ' click gauche
  Message item_index$(10)
RETURN
' ==============================================================================
Rclick:
  ' click droit
  i% = VAL(CLIPBOARD_STRING_PASTE$)
  message "Clic droit index "+STR$(i%)+": "+ITEM_READ$(10,i%)
RETURN
' ==============================================================================
SUB RightClick(lst%)
  ' Détection du click droit sur un objet LIST lst%
  ' Dans ce cas, branchement sur le s/p 'Rclick', avec dans le presse-papier
  ' l'index de l'élément cliqué du List.
  IF VARIABLE("hlig%") = 0 THEN DIM hlig%
  IF VARIABLE("prem%") = 0 THEN DIM prem%
  IF VARIABLE("LB_GETITEMHEIGHT%")=0 THEN DIM LB_GETITEMHEIGHT%
  IF VARIABLE("LB_GETTOPINDEX%")=0 THEN DIM LB_GETTOPINDEX%
  DIM_LOCAL i%
  WHILE 2>1: ' boucle sans fin
      WHILE MOUSE_RIGHT_DOWN(lst%) = 0: PAUSE 100: END_WHILE: ' attente de clic droit
      WHILE MOUSE_RIGHT_UP(lst%) = 0: PAUSE 50: END_WHILE: ' attente relâchement
      LB_GETITEMHEIGHT% = 417
      LB_GETTOPINDEX% = 398
      DLL_ON "User32"
          hlig% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETITEMHEIGHT%,0,0)
          prem% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETTOPINDEX%,0,0)
      DLL_OFF
      ' -> hlig% = hauteur en pixel d'une ligne du LIST
      '    prem% = index du 1er élément visible du LIST (pour défilement éventuel)
      i% = 1+INT(MOUSE_Y_POSITION(10)/hlig%): ' position dans la partie visible de List
      i% = prem%+i%: ' index absolu du list cliqué
      CLIPBOARD_STRING_COPY STR$(i%): ' -> clipboard
      GOSUB Rclick
  END_WHILE
END_SUB
' ==============================================================================


Dernière édition par JL35 le Mer 7 Fév 2018 - 15:32, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1804
Date d'inscription : 28/05/2007

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 14:35

Je comprends ton problème, mais le ON_CLICK ne réagit pas seulement à un clic de souris !
En fait, le ON_CLICK est n'est pas lié à l'utilisation de la souris.

Par exemple, un BUTTON qui a le focus va réagir au ON_CLICK si on appuie sur la touche ESPACE du clavier ou sur la touche ENTER. Et dans ce cas, il sera impossible de distiguer un clic droit d'un clic gauche de la souris, puisque la souris n'entre pas en jeu.

Tu mentionnes un LIST.
Or, si tu crées des items dans ce LIST (par ITEM_ADD), quand ce LIST a le focus, sélectionner des items avec les touches fléchées du clavier déclenche l'événement ON_CLICK. Et c'est exactement pareil, il sera impossible de distiguer un clic droit d'un clic gauche de la souris, puisque la souris n'entre pas en jeu.

Je ne parle même pas de l'utilisation sous Android où il n'y a pas de souris. (smartphone, tablette, etc)

_________________
username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
JL35



Nombre de messages : 6152
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 14:54

Effectivement, je comprends bien le problème... plus contraignant que ce que je pensais au premier abord.
(Pour moi un bouton n'est activé qu'au clic souris, et le choix d'un item dans un List se fait aussi à la souris, mais c'est vrai que s'il n'y a pas de souris...)

Alors il me faut bien trouver un artifice pour prendre en compte ce fichu clic droit qui est bien utile dans le cas que je citais plus haut, déclencher deux actions différentes en fonction du bouton cliqué.
Il y a bien une solution de surveillance avec un timer, que j'utilise également, mais le timer... c'est parfois un peu délicat à utiliser.
L'exemple que j'ai mis là-haut ne me convient que modérément, mais bon... ça peut être une piste pour d'autres.

En tout cas, bonne journée ! (ici sous la neige, assez inhabituel !)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 528
Age : 45
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 18:46

Tu peux faire comme ça, ça fait exactement ce que tu veux:
Code:
LABEL Quit,Gclick,Rclick
DIM i%,lst%
HEIGHT 0,SCREEN_Y-30: ON_CLOSE 0,Quit: COLOR 0,128,255,255
LIST 10: WIDTH 10,500: HEIGHT 10,HEIGHT_CLIENT(0)-30
ON_CLICK 10,Gclick
on_mouse_up 10,Rclick :' clic droit

DLIST 11
BUTTON 15: TOP 15,HEIGHT_CLIENT(0)-26: LEFT 15,WIDTH(0)/2-40
  CAPTION 15,"Quitter": ON_CLICK 15,Quit
file_load 11,"C:\Textes\Annu.txt"
 FOR i% = 1 TO COUNT(11): ITEM_ADD 10,STR$(i%)+"_ "+ITEM_READ$(11,i%): NEXT i%
 END
' ==============================================================================
Quit:
  TERMINATE
RETURN
' ==============================================================================
Gclick:
  ' click gauche
  Message item_index$(10)
RETURN
' ==============================================================================
Rclick:
lst%=10
if mouse_left_down(lst%)=0
  ' click droit
  IF VARIABLE("hlig%") = 0 THEN DIM hlig%
  IF VARIABLE("prem%") = 0 THEN DIM prem%
  IF VARIABLE("LB_GETITEMHEIGHT%")=0 THEN DIM LB_GETITEMHEIGHT%
  IF VARIABLE("LB_GETTOPINDEX%")=0 THEN DIM LB_GETTOPINDEX%
      LB_GETITEMHEIGHT% = 417
      LB_GETTOPINDEX% = 398
      DLL_ON "User32"
          hlig% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETITEMHEIGHT%,0,0)
          prem% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETTOPINDEX%,0,0)
      DLL_OFF
      ' -> hlig% = hauteur en pixel d'une ligne du LIST
      '    prem% = index du 1er élément visible du LIST (pour défilement éventuel)
      i% = 1+INT(MOUSE_Y_POSITION(10)/hlig%): ' position dans la partie visible de List
      i% = prem%+i%: ' index absolu du list cliqué
      item_select lst%,i%
      CLIPBOARD_STRING_COPY STR$(i%): ' -> clipboard

  i% = VAL(CLIPBOARD_STRING_PASTE$)
  message "Clic droit index "+STR$(i%)+": "+ITEM_READ$(10,i%)
end_if
RETURN
' ==============================================================================
EDIT : Le code n'est pas commenté car je suis pressé par le temps Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10576
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 19:16

Ton problème rentre exactement dans le cas de ce qui est traité dans KGF.dll dans la section "Interception des clics sur un objet"

Tu utilises
Code:
dim res%, hnd%, hndpos%
memo 10 : hnd% = handle(10)
edit 20 : hndpos% = handle(20) : hide 20
' intercepter les évènements sur le mémo et signaler les coordonnées
res% = dll_call2("ClickSetHook",hnd%,hndpos%)
pour indiquer à la DLL que l'éléments 20 (à titre d'exemple) sont à charger avec des informations concernant l'évènement à capter. sur le mémo 10.

Puis, tu utilises
Code:
dim res%, hnd_button%
button 30 : hnd_button% = handle(30) : hide 30
' lier le click droit au bouton 30
res% = dll_call2("ClickSetLink",hnd_button%,3)
pour déclencher le bouton 30 (à titre d'exemple, toujours) lorsque le clic droit est utilisé sur le mémo 10.

Tu remplaces alors le mémo de cet exemple par ton objet LIST, tu n'utilises plus le ON_CLICK sur ce LIST, mais tu utilises le ON_CLICK sur le bouton invisible (30 dans cet exemple) à la place. Et voilà - ce ON_CLICK ne se déclenchera que sur un clic droit dans la LIST.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6152
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 19:18

Super silverman !
Effectivement, ta solution est plus élégante, je n'avais pas du tout pensé au ON_MOUSE_UP qui change tout, puisque cette instruction (ainsi que ON_MOUSE_DOWN) réagit aussi bien au bouton droit qu'au bouton gauche de la souris, il fallait y penser !
J'adopte, merci l'ami !

Bonsoir Klaus, on s'est croisés.
Je sais évidemment qu'il y a une solution simple avec KGF.dll, mais je cherchais en tout panoramic.
KGF.dll est incontournable pour certains usages, et je l'utilise volontiers, mais quand on crée des exécutables destinés à être transportés il y a la contrainte de transporter en même temps KGF.dll et de le mettre à un endroit bien précis et connu de l'exécutable lui-même.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2522
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 20:39

Salut JL35 !

On en avait déjà parlé ici.

Bonne soirée ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
JL35



Nombre de messages : 6152
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Clic droit   Mer 7 Fév 2018 - 21:25

Effectivement Minibug, tu avais une solution semblable et je n'ai pas assez cherché !
C'est un peu plus acrobatique qu'un ON_RIGHT_CLICK (qui n'existe pas) mais bon, on fait avec ce qu'on a.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Clic droit   

Revenir en haut Aller en bas
 
Clic droit
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» comment faire clic droit et mon pseudo apparait
» probleme avec les cellules d'excel sur la mise en forme
» [Résolu] pble multiples avec avira
» Bug suite à la mise à jour 10.0.45.2 du player flash résolu
» Resize et compression automatique pour l'envoi par email

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: