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
» Gestion d'un système client-serveur.
GLISSER-DEPOSER : déplacer un PICTURE Emptypar Klaus Aujourd'hui à 1:15

» item_index(résolu)
GLISSER-DEPOSER : déplacer un PICTURE Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
GLISSER-DEPOSER : déplacer un PICTURE Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
GLISSER-DEPOSER : déplacer un PICTURE Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
GLISSER-DEPOSER : déplacer un PICTURE Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
GLISSER-DEPOSER : déplacer un PICTURE Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
GLISSER-DEPOSER : déplacer un PICTURE Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
GLISSER-DEPOSER : déplacer un PICTURE Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
GLISSER-DEPOSER : déplacer un PICTURE Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
GLISSER-DEPOSER : déplacer un PICTURE Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
GLISSER-DEPOSER : déplacer un PICTURE Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
GLISSER-DEPOSER : déplacer un PICTURE Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
GLISSER-DEPOSER : déplacer un PICTURE Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
GLISSER-DEPOSER : déplacer un PICTURE Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
GLISSER-DEPOSER : déplacer un PICTURE Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 GLISSER-DEPOSER : déplacer un PICTURE

Aller en bas 
2 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

GLISSER-DEPOSER : déplacer un PICTURE Empty
MessageSujet: GLISSER-DEPOSER : déplacer un PICTURE   GLISSER-DEPOSER : déplacer un PICTURE EmptyMar 30 Jan 2024 - 18:30

Bonjour à tous !

Je vous propose trois petits programmes sur le thème du GLISSER-DEPOSER.
Le support est le FORM 0 et l’objet à déplacer est un PICTURE.

Code:
' Déplacer un objet à l'aide de la souris
' Marc - Janvier 2024
' Ecrit en langage PANORAMIC 0.9.29i9

dim objet%, number_mouse_down, last_souris_x%, last_souris_y%
dim null%, souris_x%, souris_y%, souris_move_x%, souris_move_y%

label deplacerObjet

color 0,0,0,0
CAPTION 0,"Glisser-déposer un objet"

' créer un objet PICTURE    
picture 1
width 1,50
height 1,50
top 1,150
left 1,150
on_mouse_down 1,deplacerObjet

end
' ------------------------------------------------------------------------------
deplacerObjet:
    ' identification de l'objet qui est cliqué avec la souris
    objet% = number_mouse_down

    ' sortir de la procédure si c'est le bouton droit de la souris qui a été enfoncé
    if mouse_right_down(objet%) = 1
        ' réinitialiser les fonctions
        null% = mouse_left_up(objet%)
        null% = mouse_left_down(objet%)
        null% = mouse_right_up(objet%)
        null% = mouse_right_down(objet%)
        return
    end_if

    ' déactiver la détection d'appui sur un bouont de la souris
    off_mouse_down objet%

    ' boucle active tant que le bouton gauche de la souris reste appuyé
    while mouse_left_up(objet%) = 0
        souris_x% = mouse_x_position(objet%)  
        souris_y% = mouse_y_position(objet%)  

        if souris_x% <> last_souris_x% or souris_y% <> last_souris_y%
            souris_move_x% = souris_x% - mouse_x_left_down(objet%)
            souris_move_y% = souris_y% - mouse_y_left_down(objet%)
        end_if
      
        left objet%, left(objet%) + souris_move_x%
        last_souris_x% = souris_x%
        souris_move_x% = 0

        top objet%, top(objet%) + souris_move_y%
        last_souris_y% = souris_y%
        souris_move_y% = 0

        ' ralentissement de la boucle WHILE pour ne past0 affoler le processeur
        pause 20
    end_while

    ' rétablir la détection de l'appui d'un bouton de la souris sur l'objet
    on_mouse_down objet%,deplacerObjet

    ' réinitialiser les fonctions
    null% = mouse_left_up(objet%)
    null% = mouse_left_down(objet%)
    null% = mouse_right_up(objet%)
    null% = mouse_right_down(objet%)
return

Capture d'écran:


Dans l’exemple qui suit, des limites ont été ajoutées pour ne pas pouvoir approcher un PICTURE à moins de 20 pixels des bords. La routine du glisser-déposer est mise sous forme de SUB, ce qui permet de supprimer toutes les variables globales.

Code:
' Glisser-déposer d'un objet à l'aide de la souris
' Limitation du déplacement à 20 pixels des bords
' Marc - Janvier 2024
' Ecrit en langage PANORAMIC 0.9.29i9

label deplacerObjet

color 0,0,0,0
caption 0,"Glisser-déposer un objet PICTURE + limitations de déplacement + routine SUB"

' créer un objet PICTURE    
picture 1
width 1,90
height 1,50
top 1,150
left 1,150
on_mouse_down 1,deplacerObjet

end
' ------------------------------------------------------------------------------
deplacerObjet:
    moveItem()
return
' ------------------------------------------------------------------------------
sub moveItem()
    dim_local objet%, x_objet%, y_objet%, number_mouse_down, last_souris_x%, last_souris_y%
    dim_local null%, souris_x%, souris_y%, souris_move_x%, souris_move_y%

    ' identification de l'objet qui est cliqué avec la souris
    objet% = number_mouse_down

    ' sortir de la procédure si c'est le bouton droit de la souris qui a été enfoncé
    if mouse_right_down(objet%) = 1
        ' réinitialiser les fonctions
        null% = mouse_left_up(objet%)
        null% = mouse_left_down(objet%)
        null% = mouse_right_up(objet%)
        null% = mouse_right_down(objet%)
        exit_sub
    end_if

    ' déactiver la détection d'appui sur un bouont de la souris
    off_mouse_down objet%

    ' boucle active tant que le bouton gauche de la souris reste appuyé
    while mouse_left_up(objet%) = 0
        souris_x% = mouse_x_position(objet%)  
        souris_y% = mouse_y_position(objet%)  

        if souris_x% <> last_souris_x% or souris_y% <> last_souris_y%
            souris_move_x% = souris_x% - mouse_x_left_down(objet%)
            souris_move_y% = souris_y% - mouse_y_left_down(objet%)
        end_if
      
        x_objet% = left(objet%) + souris_move_x%
        y_objet% = top(objet%) + souris_move_y%

        ' créer une limite haute à 20 pixels du bord
        if y_objet% < 20
            y_objet% = 20
        end_if

        ' créer une limite gauche à 20 pixels du bord
        if x_objet% < 20
            x_objet% = 20
        end_if

        ' créer une limite basse à 20 pixels du bord
        if y_objet% > height_client(0) - height(objet%) - 20
            y_objet% = height_client(0) - height(objet%) - 20
        end_if

        ' créer une limite droite à 20 pixels du bord
        if x_objet% > width_client(0) - width(objet%) - 20
            x_objet% = width_client(0) - width(objet%) - 20
        end_if

        left objet%,x_objet%
        last_souris_x% = souris_x%
        souris_move_x% = 0

        top objet%,y_objet%
        last_souris_y% = souris_y%
        souris_move_y% = 0

        ' ralentissement de la boucle WHILE pour ne pas affoler le processeur
        pause 20
    end_while

    ' rétablir la détection de l'appui d'un bouton de la souris sur l'objet
    on_mouse_down objet%,deplacerObjet

    ' réinitialiser les fonctions
    null% = mouse_left_up(objet%)
    null% = mouse_left_down(objet%)
    null% = mouse_right_up(objet%)
    null% = mouse_right_down(objet%)
end_sub



Le dernier code-source met en scène 5 PICTURES ainsi qu’une grille magnétique pour l’alignement automatique des PICTURES.
Code:
' Démo : Déplacer des PICTUREs à l'aide de la souris avec limitation à 20 pixels des bords
' Alignement automatique des PICTUREs sur une grille magnétique
' Marc - Janvier 2024
' Ecrit en langage PANORAMIC 0.9.29i9

label deplacerObjet

full_space 0
caption 0,"Démo : déplacer des PICTUREs sur la FORM 0 avec alignement automatique sur une grille"

creerGrileMagnetique()

creerCinqPictures()

end
' ------------------------------------------------------------------------------
sub creerGrileMagnetique()
    dim_local n%
    ' créer la grille magnétique avec un pas de 20 pixels
    picture 10
    full_space 10
    color 10,240,240,240
    hide 10
    2d_target_is 10
    2d_pen_color 220,220,250
    ' dessiner les lignes verticales
    for n% = -1 to width_client(0) step 20
        2d_line n%,0,n%,height_client(0)
    next n%
    ' dessiner les lignes horizontales
    for n% = -1 to width_client(0) step 20
        2d_line 0,n%,width_client(0),n%
    next n%
end_sub
' ------------------------------------------------------------------------------
sub creerCinqPictures()
    ' créer quelques objets PICTUREs    
    picture 1 : top 1,150 : left 1,150 : height 1,180 : color 1,255,255,0
    on_mouse_down 1,deplacerObjet

    picture 2 : width 2,80 : top 2,350 : left 2,120 : color 2,150,0,0
    on_mouse_down 2,deplacerObjet

    picture 3 : top 3,120 : left 3,300 : color 3,0,0,150
    on_mouse_down 3,deplacerObjet

    picture 4 : top 4,400 : left 4,300 : color 4,0,150,0
    on_mouse_down 4,deplacerObjet

    picture 5 : top 5,260 : left 5,400 : width 5,210 : color 5,255,0,255
    on_mouse_down 5,deplacerObjet
end_sub
' ------------------------------------------------------------------------------
deplacerObjet:
    moveItem()
return
' ------------------------------------------------------------------------------
sub moveItem()
    dim_local objet%, x_objet%, y_objet%, number_mouse_down, last_souris_x%, last_souris_y%
    dim_local null%, souris_x%, souris_y%, souris_move_x%, souris_move_y%

    ' identification de l'objet qui est cliqué avec la souris
    objet% = number_mouse_down

    ' sortir de la procédure si c'est le bouton droit de la souris qui a été enfoncé
    if mouse_right_down(objet%) = 1
        ' réinitialiser les fonctions
        null% = mouse_left_up(objet%)
        null% = mouse_left_down(objet%)
        null% = mouse_right_up(objet%)
        null% = mouse_right_down(objet%)
        exit_sub
    end_if

    ' déactiver la détection d'appui sur un bouont de la souris
    off_mouse_down objet%

    ' boucle active tant que le bouton gauche de la souris reste appuyé
    while mouse_left_up(objet%) = 0

        ' afficher le grille magnétique
        show 10
        
        souris_x% = mouse_x_position(objet%)  
        souris_y% = mouse_y_position(objet%)  

        if souris_x% <> last_souris_x% or souris_y% <> last_souris_y%
            souris_move_x% = souris_x% - mouse_x_left_down(objet%)
            souris_move_y% = souris_y% - mouse_y_left_down(objet%)
        end_if
      
        x_objet% = left(objet%) + souris_move_x%
        y_objet% = top(objet%) + souris_move_y%

        ' créer une limite haute à 20 pixels du bord
        if y_objet% < 20
            y_objet% = 20
        end_if

        ' créer une limite gauche à 20 pixels du bord
        if x_objet% < 20
            x_objet% = 20
        end_if

        ' créer une limite basse à 20 pixels du bord
        if y_objet% > height_client(0) - height(objet%) - 20
            y_objet% = height_client(0) - height(objet%) - 20
        end_if

        ' créer une limite droite à 20 pixels du bord
        if x_objet% > width_client(0) - width(objet%) - 20
            x_objet% = width_client(0) - width(objet%) - 20
        end_if

        left objet%,x_objet%
        last_souris_x% = souris_x%
        souris_move_x% = 0

        top objet%,y_objet%
        last_souris_y% = souris_y%
        souris_move_y% = 0

        display

        ' ralentissement de la boucle WHILE pour ne pas affoler le processeur
        pause 20
    end_while

    ' Ajustage du PICTURE sur la grille magnétique
    x_objet% = int(0.5+x_objet%/20)*20
    y_objet% = int(0.5+y_objet%/20)*20
    left objet%,x_objet%
    top objet%,y_objet%
    
    ' Petite pause juste pour voir furtivement l'ajustement sur la grille
    pause 100

    ' rétablir la détection de l'appui d'un bouton de la souris sur l'objet
    on_mouse_down objet%,deplacerObjet

    ' cacher le grille magnétique
    hide 10

    ' réinitialiser les fonctions
    null% = mouse_left_up(objet%)
    null% = mouse_left_down(objet%)
    null% = mouse_right_up(objet%)
    null% = mouse_right_down(objet%)
end_sub

GLISSER-DEPOSER : déplacer un PICTURE Glisse12




Bonne programmation à tous !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

GLISSER-DEPOSER : déplacer un PICTURE Empty
MessageSujet: Re: GLISSER-DEPOSER : déplacer un PICTURE   GLISSER-DEPOSER : déplacer un PICTURE EmptyJeu 1 Fév 2024 - 17:26

C'est intéressant !!!
Et beaucoup plus pointu que ce que j'ai fait dans Puzzles-ABCD et Tangram.
Le problème, c'est que je l'ai fait non avec des picture, mais avec sprites sur un scene2d,
(ce qui a l'avantage de pouvoir utiliser des pièces pas exclusivement rectangulaires)
et je me demande si ta méthode marcherait dans ce cas de figure.
scratch
Parce que le problème qui se pose à moi, c'est que :
- le Puzzles-ABCD marche bien partout,
- mais le Tangram semble plus « lourd »
s'il marche bien avec la souris d'un ordinateur rapide,
il marche moins bien avec un ordinateur lent fonctionnant en tactile.
Ce qui ne va pas, c'est que que quand on fait glisser une pièce, elle ne bouge pas,
sauf si on garde le doigt immobile longtemps (l'équivalent d'un clic droit)
où après cela, ça marche bien.
Et si on utilise l'ordi tactile avec un crayon graphique (ou une souris externe), là ça marche impecc...
Peut-être ta méthode est-elle moins « lourde » ?
J'ai essayé de la transformer, mais on ne peut pas faire un on_mous_down individuellement sur un sprite...
scratch scratch scratch scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

GLISSER-DEPOSER : déplacer un PICTURE Empty
MessageSujet: Re: GLISSER-DEPOSER : déplacer un PICTURE   GLISSER-DEPOSER : déplacer un PICTURE EmptyVen 2 Fév 2024 - 14:12

@ Marc
J'ai examiné des démonstrations
et c'est marrant, il n'y a pas de on_mouse_move
et pourtant, le résultat est le même.
Et petite question, à quoi sert de réinitialiser :
null% = ... ?
Est-ce que ça évite des erreurs ou permet de fonctionner plus vite ?
scratch scratch

Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

GLISSER-DEPOSER : déplacer un PICTURE Empty
MessageSujet: Re: GLISSER-DEPOSER : déplacer un PICTURE   GLISSER-DEPOSER : déplacer un PICTURE EmptyVen 2 Fév 2024 - 14:26

Bonjour JJN4 !

Citation :
Et petite question, à quoi sert de réinitialiser :
null% = ... ?

Pour remettre les 4 fonctions à "0" avant d'entrer dans une boucle de lecture.
Si une des fonctions est restée à "1" avant d'entrer dans la boucle, elle sera immédiatement détectée alors qu'il n'y a pas de bouton-souris enfoncé !

Je viens de mettre un petit tuto à ce sujet dans la rubrique "Bavardage".
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

GLISSER-DEPOSER : déplacer un PICTURE Empty
MessageSujet: Re: GLISSER-DEPOSER : déplacer un PICTURE   GLISSER-DEPOSER : déplacer un PICTURE EmptyVen 2 Fév 2024 - 21:51

@JJN4

Pour Tangram, tu ne peux pas utiliser de PICTUREs faute de disponibilité d’une couleur de transparence.
Revenir en haut Aller en bas
Contenu sponsorisé





GLISSER-DEPOSER : déplacer un PICTURE Empty
MessageSujet: Re: GLISSER-DEPOSER : déplacer un PICTURE   GLISSER-DEPOSER : déplacer un PICTURE Empty

Revenir en haut Aller en bas
 
GLISSER-DEPOSER : déplacer un PICTURE
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» déplacer des picture avec la souris
» déplacer des picture avec la souris
» Glisser des fichiers sources sur la fenêtre de l'éditeur
» Déplacer dynamiquement un objet dans une form
» Déplacer la coloration bleue des cellules d'un grid

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: