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 |
|
|
| Défilement dans une grande image | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Défilement dans une grande image Dim 20 Déc 2020 - 16:12 | |
| (Voir le sujet Les barres de défilement, dans la rubrique A l'Aide: je me suis largement inspiré de l'intervention de Marc) Peut-être que j'enfonce une porte ouverte, le but est de naviguer dans une grande image qui ne tient pas dans l'écran (et à fortiori dans le Form 0). Mon image à moi fait 2403 x 3591 pixels: - Code:
-
LABEL Redim0,Dscr DIM fi$,pic,hf,wf,i,scv,sch fi$ = "C:\GRAPH\JPG\Joconde.jpg" hf = 3591: wf = 2403: ' dimensions de l'image. ON_RESIZE 0,Redim0 pic = 5: PICTURE pic: WIDTH pic,wf: HEIGHT pic,hf: FILE_LOAD pic,fi$ scv = 1: SCROLL_BAR scv: VERTICAL scv : ON_CHANGE scv,Dscr sch = 2: SCROLL_BAR sch: HORIZONTAL sch: ON_CHANGE sch,Dscr GOSUB Redim0: ' init END ' =================================================================== Dscr: ' Déplacement d'un scroll bar i = -1*(hf-HEIGHT_CLIENT(0)): TOP pic,i*POSITION(scv)/100: ' V i = -1*(wf-WIDTH_CLIENT(0)): LEFT pic,i*POSITION(sch)/100: ' H RETURN ' =================================================================== Redim0: ' Redimensionnement du Form 0 -> redifinition des scroll bars LEFT scv,WIDTH_CLIENT(0)-WIDTH(scv): HEIGHT scv,HEIGHT_CLIENT(0): ' V TOP sch,HEIGHT_CLIENT(0)-HEIGHT(sch): WIDTH sch,WIDTH_CLIENT(0): ' H RETURN ' ===================================================================[code][/code] | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défilement dans une grande image Dim 20 Déc 2020 - 18:05 | |
| Superbe ! Sub très pratique à mettre de côté ! Bravo et merci, JL35 ! (euh, le « (code)(/code) » final est peut-être en trop ( ) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Défilement dans une grande image Dim 20 Déc 2020 - 20:58 | |
| T'as raison jjn4, petite fausse manoeuvre de mise sur le forum... avec quelques fautes de frappe ( redifinition...) | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défilement dans une grande image Sam 2 Jan 2021 - 18:39 | |
| Je me suis aperçu que si ça marchait avec une souris sur l'ascenseur, par contre, sur un écran tactile à faire monter ou descendre l'image avec le doigt, ça ne marche pas. Alors, j'ai essayé ce petit ajout au programme de JL35. (Désolé, JL35, d'avoir préalablement quelque peu jijiennquatrisé ton programme) - Code:
-
rem ' Articulation gde image dans pt form avec ascenseur rem ' JL35 - https://panoramic.1fr1.net/t6535-defilement-dans-une-grande-image LABEL redim_0,dim_scr , move DIM PH$,HTPH%,LGPH%,I%,J%,PS% PH$="C:\Robo.jpg" HTPH%=3591 : LGPH%=2403: ' dimensions de l'image. width 0,1200 : height 0,700 : ON_RESIZE 0,redim_0 PICTURE 5 : WIDTH 5,LGPH% : HEIGHT 5,HTPH%: FILE_LOAD 5,PH$ : on_mouse_move 5,move SCROLL_BAR 1: VERTICAL 1 : width 1,50 : ON_CHANGE 1,dim_scr SCROLL_BAR 2: HORIZONTAL 2 : ON_CHANGE 2,dim_scr GOSUB redim_0: ' init END ' =================================================================== dim_scr: ' Déplacement d'un scroll bar I% = -1*(HTPH%-HEIGHT_CLIENT(0)): TOP 5,I%*POSITION(1)/100: ' V I% = -1*(LGPH%-WIDTH_CLIENT(0)): LEFT 5,I%*POSITION(2)/100: ' H RETURN ' =================================================================== redim_0: ' Redimensionnement du Form 0 -> redéfinition des scroll bars LEFT 1,WIDTH_CLIENT(0)-WIDTH(1): HEIGHT 1,HEIGHT_CLIENT(0): ' V TOP 2,HEIGHT_CLIENT(0)-HEIGHT(2): WIDTH 2,WIDTH_CLIENT(0)-17: ' H RETURN ' =================================================================== move: : ' Ajout perso pour faire bouger l'image en tactile J%=mouse_y_position(5) if J%<>PS% if J%>PS% top 5,top(5)+1 else top 5,top(5)-1 end_if end_if PS%=mouse_y_position(5) return
Bon, ça marchotte, mais ça n'est pas vraiment terrible ! | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Défilement dans une grande image Dim 3 Jan 2021 - 12:09 | |
| Salut jjnatriseur! Voici un programme qui permet de déplacer une image dans un picture tant que le bouton gauche de la souris est enfoncé. Vois si ce code peut t'aider pour ton écran tactile. - Code:
-
maximize 0 ' label load_image_dans_container_my_image,bouge2 dim null,container_my_image,my_image,lastX,lastY,pastX,pastY,imx,imy,taille_imx,taille_imy
' génère une image container_my_image=1000 my_image=2000 gosub load_image_dans_container_my_image
' déplace l'image dans le container_my_image on_mouse_move container_my_image,bouge2
END load_image_dans_container_my_image: ' ****************** fabrique une image pour la démonstration : debut ********** create_hide picture 123 : width 123,1000 : height 123,1000 :' fabrique un picture temporaire pour générer une image de container_my_image*container_my_image create_show color 123,0,0,0 dim i,x1,y1,x2,y2,r,g,b 2d_target_is 123 for i=1 to 100 x1=int(rnd(500)) y1=int(rnd(500)) x2=int(rnd(500)+500) y2=int(rnd(500)+500) r=int(rnd(255)) g=int(rnd(255)) b=int(rnd(255)) 2d_pen_color r,g,b 2d_fill_color r,g,b 2d_rectangle x1,y1,x2,y2 next i clipboard_copy 123 2d_target_is 0 : delete 123 :' plus besoin du picture temporaire ' ****************** fabrique une image pour la démonstration : fin ************
image my_image clipboard_paste my_image :' image de démonstration ' on peut charger une image à partir du disque dur ' file_load my_image,"Mon_image.bmp"
' dimension de my_image taille_imx=1000 taille_imy=1000
' le container; en fait c'est un picture picture container_my_image : width container_my_image,550 : height container_my_image,550 : top container_my_image,50 : left container_my_image,150 :' un container_my_image de taille 550*550 2d_target_is container_my_image : 2d_image_paste my_image,0,0 :' colle l'image dans le picture
return
bouge2: off_mouse_move container_my_image ' null=scancode :' rafraichir le scancode if scancode=1 2d_clear pastX=mouse_x_position(container_my_image) pastY=mouse_y_position(container_my_image) imx=imx+(pastx-lastx) imy=imy+(pasty-lasty) if imx<width(container_my_image)-taille_imx then imx=width(container_my_image)-taille_imx :' <--- taille_imx if imx>0 then imx=0 if imy<height(container_my_image)-taille_imy then imy=height(container_my_image)-taille_imy :' <--- taille_imy if imy>0 then imy=0 2d_image_paste my_image,imx,imy lastx=pastx lasty=pasty else lastX=mouse_x_position(container_my_image) lastY=mouse_y_position(container_my_image) end_if ' on_mouse_move container_my_image,bouge2 :' pb(bug?) avec bouton gauche: si le bouton est enfoncé dans le container_my_image, l'évènement est :' détecté même si la souris est en dehors du container_my_image!!! Pas génant mais bon à connaitre return
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défilement dans une grande image Dim 3 Jan 2021 - 17:49 | |
| Ah oui, ça a l'air nettement plus efficace ! Merci, silverman ! Je l'essai sur mon programme... | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défilement dans une grande image Mar 5 Jan 2021 - 16:54 | |
| @silverman : Je l'ai adapté. Ca marche bien sur l'ordinateur sur lequel je programme et qui fonctionne avec la souris. Mais ça ne fonctionne pas sur la tablette qui marche en tactile (par contre, si j'équipe cette tablette d'un clavier et d'une souris, là ça marche (mais pas en tactile)). Apparemment, le tactile ne fonctionne pas comme une souris avec un mouse_up suivi d'un mouse_down après un déplacement de la souris levée, il semblerait que c'est sans cesse en mouse_down, le pointeur changeant simplement miraculeusement de localisation lorsqu'on replace le doigt ailleurs. (Finalement, j'ai adapté ton système avec des bons vieux boutons ) | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Défilement dans une grande image Mar 5 Jan 2021 - 18:26 | |
| Bonjour à tous ! @JJn4 Je viens de tester les barres de défilement (scroll_bar) avec une tablette (chinoise) sous Windows 10 : le tactile fonctionne parfaitement bien pour monter ou descendre les ascenseurs. Ce test a été effectué avec la version 0.29i9 de Panoramic et ce source : - Code:
-
label defilementVertical,redimensionnerFenetre
creerFenetreScrollableVerticalement()
alpha 3 top 3,1800 left 3,200 caption 3,"Hello !"
end
sub creerFenetreScrollableVerticalement() width 0,600 height 0,500 on_resize 0,redimensionnerFenetre
scroll_bar 1 vertical 1 left 1,width_client(0) - width(1) height 1,height_client(0) on_change 1,defilementVertical
panel 2 width 2,width_client(0) - width(1) height 2,2000 : ' hauteur de 2000 pixels par exemple
max 1,height(2) - height_client(0) command_target_is 2 end_sub
defilementVertical: top 2,(-1) * position(1) return
redimensionnerFenetre: left 1,width_client(0) - width(1) height 1,height_client(0) width 2,width_client(0) - width(1) max 1,height(2) - height_client(0) return
Après avoir modifié mon source, j'ai effectué le test sous Android 8.0 et P4A version 0.13, pas de problème, avec le doigt on actionne bien les ascenseurs. EDIT : Pour finir, je viens de tester le source de Silverman, il fonctionne parfaitement bien ! Bravo Silverman ! Sur la tablette Windows 10, je déplace sans problème l'image avec le doigt . c'est très fluide et agréable. C'est infiniment plus pratique que les ascenseurs. Merci Silverman pour ton partage ! | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défilement dans une grande image Mer 6 Jan 2021 - 15:20 | |
| @Marc: Désolé, mais je ne suis pas aussi optimiste. Avec le programme que tu viens de publier, on peut effectivement faire monter ou descendre l'ascenseur avec une souris ou en tactile. Mais avec ce que proposait Silverman en tactile, de faire monter ou descendre le texte lui-même, par exemple, de poser le doigt sur ton "Hello !" et de le faire monter ou descendre sans toucher à l'ascenseur. Et là, ça ne marche pas avec ton programme. Et avec celui de silverman, ça marche (au niveau du texte) avec une souris, mais ça pétouille sur ma tablette en tactile en revenant systématiquement au même point, si bien qu'on n'arrive pas à avancer dans le sens de la montée ou de la descente. Bon, il n'en reste pas moins vrai que la solution initiée par JL35 n'est pas mal du tout. Créer un ascenseur qui ne se crée pas automatiquement, c'est bien aussi. Mais tout cela fait bien beaucoup de tintouin pour un truc qui se faisait tout seul auparavant. Par exemple, j'ai encore des vieux programmes créés avec la version panoramic 9.26 eh bien l'ascenseur se crée automatiquement et en tactile, il suffit de faire glisser son doigt sur le texte vers le haut ou vers le bas pour que le texte monte ou descende. Dommage qu'avec les versions ultérieures, cette facilité n'existe plus ! C'est curieux que ça marche sur ta tablette au niveau du texte : La mienne est une vielle de 8 ans qui marche en Windows 8, peut-être est-elle trop vieille ? | |
| | | Contenu sponsorisé
| Sujet: Re: Défilement dans une grande image | |
| |
| | | | Défilement dans une grande image | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |