Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Nouveaux évènements pour Panoramic | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouveaux évènements pour Panoramic Ven 20 Fév 2015 - 19:45 | |
| Pour dessiner dans un picture, pour sélectionner des sprites ou tu texte, on a l'habitude d'enfoncer le bouton gauche, et de tirer la souris et de relâcher le bouton en fin de sélection. Or, cela est extrêmement difficile à réaliser en Panoramic, puisque nous ne pouvons pas réagir à l'enfoncement du bouton ni au relâchement. Certes, on peut le "simuler" en utilisant les évènements ON_KEY_DOWN et ON_KEY_UP en utilisant la touche SHIFT, par exemple, pour simuler le bouton gauche de la souris.
Mais c'est contre l'action intuitive qu'on a tendance à effectuer. D'où ma suggestion, pour être cohérent avec les évènements ON_KEY_DOWN et ON_KEY_UP:
Nouveaux évènements: ON_LEFT_MOUSE_DOWN ON_LEFT_MOUSE_UP ON_RIGHT_MOUSE_DOWN ON_RIGHT_MOUSE_UP ON_MOUSE_MOVE avec les variables systèmes associées: NUMBER_LEFT_DOWN NUMBER_LEFT_UP NUMBER_RIGHT_DOWN NUMBER_RIGHT_UP NUMBER_MOUSE_MOVE
Et je profite de cette occasion pour demander à nouveau un évènement "utilisateur": ON_USER_EVENT avec ses variables système associées: NUMBER_USER_EVENT_W NUMBER_USER_EVENT_L Cet évènement serait déclenché (dans une DLL) par l'envoi d'un message WM_APP+1 (WM_APP=0x8000), la variable NUMBER_USER_EVENT_W contiendrait le contenu du paramètre WPARAM transmis lors de l'envoi du message, et la variable NUMBER_USER_EVENT_L le paramètre LPARAM.
Ceci permettrait à la DLL de déclencher un
Dernière édition par Klaus le Ven 20 Fév 2015 - 21:58, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 20 Fév 2015 - 20:04 | |
| +1 Aïe, aïe, aïe, la todo list... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Nouveaux évènements pour Panoramic Ven 20 Fév 2015 - 20:11 | |
| On ne peut que soutenir cette proposition qui est pleine de bon sens. Pardon Jack ! je me doute bien que tu dois te dire "Mais, il ne me laisseront jamais tranquille !" A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouveaux évènements pour Panoramic Ven 20 Fév 2015 - 20:33 | |
| +1. On est plus calme qu'avant, il n'y a pas tant de demandes que ça... et si on ne demandait plus rien, Jack finirait par s'ennuyait et avoir le temps de faire ce à quoi il pense ... Sérieusement, la demande de Klaus va das le sens de l'ouverture de Panoramic et vers la gestion du drag and drop (entre autre) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouveaux évènements pour Panoramic Ven 20 Fév 2015 - 20:55 | |
| Je l'ai fait dans ma sub Dessin (en pur Panoramic): cliquer, déplacer avec dessin intermédiaire provisoire de la figure en continu (trait, rectangle, cercle/ellipse, polygone, étoile...) et relâcher avec dessin définitif, avec possibilité immédiate après relâchement de déplacer la figure dessinée dans les quatre directions, d'un nombre choisi de pixels. Mais il faut faire intervenir un timer, ce qui est parfois un peu délicat à manipuler.
Et il n'y a pas de mémorisation de la figure dessinée, donc plus de possibilité de déplacement ultérieur après validation. C'est sans doute possible (quoique...), mais alors il faut mémoriser toutes les opérations intermédiaires, ce qui peut entraîner très loin... pour des figures géométriques, on peut peut-être l'imaginer, mais pour du dessin libre...
Ça n'empêche que les commandes préconisées par Klaus seraient bien utiles et j'aurais été bien content de les avoir. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveaux évènements pour Panoramic Ven 20 Fév 2015 - 21:57 | |
| Avec un timer et deux simples clics, j'arrive à le faire, bien sûr. Egalement en remplaçant le clic par la touche Shift, par exemple, et simuler le maintien du bouton de la souris tant que la touche n'est par relâché, tout ceci avec un timer, bien sûr. Voici ce que ça donne, avec deux clics: - Code:
-
label click, tick
dim x0%, y0%, x1%, y1%, flag%
picture 1 : full_space 1 : on_click 1,click image 2 timer 3 : timer_interval 3,20 : timer_off 3 : on_timer 3,tick end
click: if flag%=0 flag% = 1 x0% = mouse_x_left_down(1) y0% = mouse_y_left_down(1) 2d_image_copy 2,0,0,width(1),height(1) 2d_pen_width 1 2d_pen_dot timer_on 3 else timer_off 3 flag% = 0 x1% = mouse_x_left_down(1) y1% = mouse_y_left_down(1) 2d_image_paste 2,0,0 2d_pen_width 2 2d_pen_solid 2d_rectangle x0%,y0%,x1%,y1% end_if return
tick: timer_off 3 x1% = mouse_x_position(1) y1% = mouse_y_position(1) 2d_image_paste 2,0,0 2d_rectangle x0%,y0%,x1%,y1% timer_on 3 return
Mais qu'est-ce que j'aimerais pouvoir écrire ceci: - Code:
-
label down, up, move picture 1 : full_space 1 on_mouse_left_down 1,down on_mouse_left_up 1,up on_mouse_move 1,move ... down: x0% = mouse_x_position(1) y0% = mouse_y_position(1) 2d_pen_width 1 2d_pen_dot return up: x1% = mouse_x_position(1) y1% = mouse_y_position(1) 2d_pen_width 2 2d_pen_solid 2d_rectangle x0%,y0%,x1%,y1% return move: x1% = mouse_x_position(1) y1% = mouse_y_position(1) 2d_rectangle x0%,y0%,x1%,y1% return | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouveaux évènements pour Panoramic Ven 20 Fév 2015 - 22:24 | |
| Pas mal quand même ton 1er exemple, mais c'est vrai que le 2ème (théorique !) est plus séduisant... sans timer. | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 7:20 | |
| Comme le dit ygeronimi: Aïe, aïe, aïe, la todo list... _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 10:04 | |
| J'en ai conscience, Jack. J'ai essayé de proposer des ajouts cohérents avec ce qui existe dans Panoramic. Mais bien sûr, ce ne sont que des souhaits, des suggestions. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 10:05 | |
| Ne t'inquiète pas Klaus, je crois que Jack et un peu comme toi, il lui faut des défits de temps en temps à relever. Enfin c'est comme ça que je le vois et je peux me tromper.... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 13:02 | |
| Ce qui me gêne dans le clic souris c'est de ne pas être alerté au moment du clic mais seulement au relâchement du bouton. Par exemple: - Code:
-
LABEL Click PICTURE 1: FULL_SPACE 1: ON_CLICK 1,Click END
Click: MESSAGE STR$(MOUSE_X_POSITION(1))+","+STR$(MOUSE_Y_POSITION(1)) RETURN Si je clique dans le picture, on ne part dans le sous-programme de traitement qu'au moment où je relâche le bouton, et la position donnée est celle du relâchement, évidemment, et non pas celle du clic. Ce qui serait bien, pour moi (pour le dessin), ce serait d'avoir la réaction immédiate au moment du clic, de noter la position, et de pouvoir suivre en temps réel le déplacement de la souris jusqu'au relâchement (détecté par mouse_left_up). Il y a sûrement des contraintes que j'ignore... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 13:11 | |
| C'est exactement le but de ma suggestion des nouveaux évènements, Jl35. Par exemple, pour dessiner un rectangle de sélection, pour animer un objet qu'on veut faire glisser d'un endroit à un autre... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 16:59 | |
| Autrefois l'ami Nardo nous avait fourni une dll intéressante: Mouse.dll, qui donne en permanence les coordonnées de la souris sur TOUT l'écran, ainsi que la position des boutons (on peut la trouver sur son site: http://nardo26.lescigales.org/divers-dll-28.html ). Ça permet de faire des choses intéressantes en dessin sans faire intervenir de Timer, ce qui est toujours très contraignant. Un exemple vite fait de ce qu'on peut faire avec ça (mais bon, il faut la dll): - Code:
-
' Dessin LABEL Quit,Type,Couleur,Trait,Dessiner,ign DIM wp%,hp%,i%,p%,x%,y%,xd%,yd%,x1%,y1%,btn,coord$,ofx,ofy,typ,r%,g%,b%,wt% DIM rx%,ry%,xc%,yc%,pi,t pi = 4*ATN(1)
wp% = 800: hp% = 600 WIDTH 0,wp%+16: HEIGHT 0,hp%+58: color 0,180,255,255: ON_CLOSE 0,Quit: FONT_BOLD 0 BORDER_SMALL 0 PICTURE 1: TOP 1,24: WIDTH 1,wp%: HEIGHT 1,hp%: p% = 1 ofx = LEFT(0)+LEFT(p%)+8: ofy = TOP(0)+TOP(p%)+30 2D_TARGET_IS p% ' Figures CONTAINER_OPTION 10: TOP 10,0: HEIGHT 10,20 OPTION 11: PARENT 11,10: TOP 11,3: LEFT 11,5: CAPTION 11,"Libre": MARK_ON 11 OPTION 12: PARENT 12,10: TOP 12,3: LEFT 12,55: CAPTION 12,"Rectangle" OPTION 13: PARENT 13,10: TOP 13,3: LEFT 13,133: CAPTION 13,"Ellipse" FOR i% = 11 TO 13: ON_CLICK i%,Type: NEXT i% typ = 0: 2D_PEN_SOLID: ' tracé libre ' Palette CONTAINER 20: LEFT 20,WIDTH(10)+20: HEIGHT 20,20: top 20,top(10)+2: WIDTH 20,160 PICTURE 21: PARENT 21,20: WIDTH 21,25: HEIGHT 21,20: COLOR 21,0,0,0 PICTURE 22: PARENT 22,20: LEFT 22,35: WIDTH 22,120: HEIGHT 22,20: 2D_TARGET_IS 22 2D_PEN_COLOR 0,0,0: 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 0,0,20,20 2D_PEN_COLOR 255,255,255: 2D_FILL_COLOR 255,255,255: 2D_RECTANGLE 20,0,40,20 2D_PEN_COLOR 255,0,0: 2D_FILL_COLOR 255,0,0: 2D_RECTANGLE 40,0,60,20 2D_PEN_COLOR 0,255,0: 2D_FILL_COLOR 0,255,0: 2D_RECTANGLE 60,0,80,20 2D_PEN_COLOR 0,0,255: 2D_FILL_COLOR 0,0,255: 2D_RECTANGLE 80,0,100,20 2D_PEN_COLOR 255,255,0: 2D_FILL_COLOR 255,255,0: 2D_RECTANGLE 100,0,120,20 ON_CLICK 22,Couleur ' Épaisseur du trait ALPHA 30: TOP 30,TOP(20)+2: LEFT 30,LEFT(20)+170: CAPTION 30,"Trait:" SPIN 31: TOP 31,TOP(30)-4: LEFT 31,LEFT(30)+35: WIDTH 31,40 MIN 31,1: MAX 31,20: POSITION 31,1: ON_CHANGE 31,Trait
2D_TARGET_IS p% DLL_ON "C:\PANORAMIC\NARDO\Mouse.dll": ' <<<<<<<<<<<< A VOIR coord$ = STRING$(8," ") btn = DLL_CALL1("GetMouseXY",ADR(coord$)) WHILE btn<>2 xd%=VAL(LEFT$(coord$,4))-ofx: yd% = VAL(RIGHT$(coord$,4))-ofy CAPTION 0,"x= "+STR$(xd%)+" y= "+STR$(yd%) btn = DLL_CALL1("GetMouseXY",ADR(coord$)) IF btn=1 GOSUB Dessiner END_IF PAUSE 100 END_WHILE END ' ============================================================================== Quit: TERMINATE ' ============================================================================== Type: ' Type de dessin: libre, rectangle, cercle/ellipse, ou autre... IF CHECKED(11)=1 typ = 0: 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(31) ELSE IF CHECKED(12)=1 typ = 1: 2D_PEN_DOT: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,255 ELSE IF CHECKED(13)=1 typ = 2: 2D_PEN_DOT: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,255 ELSE ' autre, à définir END_IF END_IF END_IF RETURN ' ============================================================================== Couleur: ' Couleur du tracé x%=MOUSE_X_POSITION(22): y%=MOUSE_Y_POSITION(22) r%=COLOR_PIXEL_RED(22,x%,y%): g%=COLOR_PIXEL_GREEN(22,x%,y%): b%=COLOR_PIXEL_BLUE(22,x%,y%) COLOR 21,r%,g%,b%: 2D_PEN_COLOR r%,g%,b% RETURN ' ============================================================================== Trait: 2D_PEN_WIDTH POSITION(31): ' Épaisseur du trait RETURN ' ============================================================================== Dessiner: ofx = LEFT(0)+LEFT(p%)+8: ofy = TOP(0)+TOP(p%)+30 xd%=VAL(LEFT$(coord$,4))-ofx: yd% = VAL(RIGHT$(coord$,4))-ofy x1%=xd%: y1%=yd% btn = 1 CLIPBOARD_COPY 1 WHILE btn = 1 btn = DLL_CALL1("GetMouseXY",ADR(coord$)) x%=VAL(LEFT$(coord$,4))-ofx: y% = VAL(RIGHT$(coord$,4))-ofy IF x%<0 OR y%<0 OR x%>WIDTH(p%) OR y%>HEIGHT(p%) THEN GOTO ign CAPTION 0,"x= "+STR$(x%)+" y= "+STR$(y%) IF x%<>x1% OR y%<>y1% IF typ = 0: ' tracé libre 2D_PEN_WIDTH POSITION(31): 2D_LINE x1%,y1%,x%,y% ELSE IF typ = 1: ' rectangle CLIPBOARD_PASTE 1 2D_LINE xd%,yd%,x%,yd%: 2D_POLY_TO x%,y%: 2D_POLY_TO xd%,y%: 2D_POLY_TO xd%,yd% ELSE IF typ = 2: ' ellipse CLIPBOARD_PASTE 1 rx%=(x%-xd%)/2: ry%=(y%-yd%)/2: xc%=xd%+rx%: yc%=yd%+ry% 2D_POLY_FROM xc%+rx%,yc% FOR t=0 TO 2*pi STEP pi/180 2D_POLY_TO xc%+rx%*COS(t),yc%+ry%*SIN(t) NEXT t ELSE ' autres END_IF END_IF END_IF x1%=x%: y1%=y% END_IF ign: PAUSE 30 END_WHILE IF typ = 1 CLIPBOARD_PASTE 1: 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(31): 2D_PEN_COLOR r%,g%,b% 2D_LINE xd%,yd%,x%,yd%: 2D_POLY_TO x%,y%: 2D_POLY_TO xd%,y%: 2D_POLY_TO xd%,yd% 2D_PEN_WIDTH 1: 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255 ELSE IF typ = 2 CLIPBOARD_PASTE 1: 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(31): 2D_PEN_COLOR r%,g%,b% rx%=(x%-xd%)/2: ry%=(y%-yd%)/2: xc%=xd%+rx%: yc%=yd%+ry% 2D_POLY_FROM xc%+rx%,yc% FOR t=0 TO 2*pi STEP pi/180 2D_POLY_TO xc%+rx%*COS(t),yc%+ry%*SIN(t) NEXT t 2D_PEN_WIDTH 1: 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255 ELSE ' autres END_IF END_IF RETURN ' ============================================================================== Le dessin me paraît plus intuitif: on clique, on tire et on relâche. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 17:11 | |
| Ce code également utilise un timer, quoique ce timer soit "cache". Il est implicitement géré par Panoramic dans la boucle: - Code:
-
WHILE btn<>2 xd%=VAL(LEFT$(coord$,4))-ofx: yd% = VAL(RIGHT$(coord$,4))-ofy CAPTION 0,"x= "+STR$(xd%)+" y= "+STR$(yd%) btn = DLL_CALL1("GetMouseXY",ADR(coord$)) IF btn=1 GOSUB Dessiner END_IF PAUSE 100 : ' <============ ici, il y a un timer implicite dans Panoramic END_WHILE C'est la commande PAUSE qui y est déterminante. C'est un moyen alternatif de contourner le problème, et c'est bien trouvé. Mais cela ne permet pas de faire ce que je souhaite faire. Sans parler du fait que le programme est dans une boucle permanente, et qui ne fait que manger du temps CPU tant que le bouton de la souris n'est pas enfoncé... Ce n'est pas une critique, c'est juste une analyse du code. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouveaux évènements pour Panoramic Sam 21 Fév 2015 - 17:18 | |
| Certes tu as raison, cette solution est valable pour du dessin qui ne fait que ça, mais pas forcément pour d'autres usages, étant donné que ça monopolise le temps machine. | |
| | | Contenu sponsorisé
| Sujet: Re: Nouveaux évènements pour Panoramic | |
| |
| | | | Nouveaux évènements pour Panoramic | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |