FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Bataille navale SM
Clic droit Emptypar jjn4 Aujourd'hui à 17:39

» Une calculatrice en une ligne de programme
Clic droit Emptypar jean_debord Aujourd'hui à 8:01

» Gestion d'un système client-serveur.
Clic droit Emptypar Pedro Hier à 19:31

» Les maths du crocodile
Clic droit Emptypar jean_debord Hier à 10:37

» Naissance de Crocodile Basic
Clic droit Emptypar jean_debord Hier à 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Clic droit Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Clic droit Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Clic droit Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Clic droit Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
Clic droit Emptypar leclode Dim 21 Avr 2024 - 18:09

» trop de fichiers en cours
Clic droit Emptypar Marc Dim 21 Avr 2024 - 2:41

» 2D_fill_color(résolu)
Clic droit Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Clic droit Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Clic droit Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Clic droit Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment : -39%
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
Voir le deal
399 €

 

 Clic droit

Aller en bas 
5 participants
AuteurMessage
JL35




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

Clic droit Empty
MessageSujet: Clic droit   Clic droit EmptyMer 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
Jack
Admin
Jack


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

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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)

_________________
Clic droit Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




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

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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
Klaus

Klaus


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

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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
http://klauspanoramic.comxa.com/index.html
JL35




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

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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
Minibug

Minibug


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

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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
http://gpp.panoramic.free.fr
JL35




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

Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit EmptyMer 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
Contenu sponsorisé





Clic droit Empty
MessageSujet: Re: Clic droit   Clic droit Empty

Revenir en haut Aller en bas
 
Clic droit
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» un clic droit évènementiel
» ON_CLICK (clic droit)
» Clics droit, gauche et double clic dans un même menu
» Gestion du Simple clic et du Double clic
» Clic droit non reconnu par le sous programme ON_CLICK !! ??

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: