Je poste rapidement un petit bout de code pour ceux qui souhaitent rapidement et simplement créer des champs images dynamiquement, et de pouvoir les déplacer à la souris.
Fort heureusement cela fonctionne pour tous les champs.
Dans votre projet vous n'aurez besoin que d'une fenêtre vide, d'un bouton et d'un champ image à cloner (placez le champ image hors de la fenêtre pour ne pas vous embêter avec). Redimensionnez ce champ en 50*50 pour ne pas qu'il soit trop gros.
Attention : le programme n'est pas parfait, il y a 2 petits problèmes :
- le premier est que la souris lors du déplacement du champ doit toujours être au dessus du champ, si vous bougez la souris trop vite on perd le focus du champ (mais on peut rebouger le champ en reclickant dessus).
- le second (attention faut suivre) est lorsque vous bougez un champ, vous relachez le bouton gauche de la souris, vous clickez à l'extérieur de ce champ (dans la fenêtre mais hors autres champs) et si vous revenez sur ce champ tout en maintenant le bouton de la souris enfoncé (j'avais dit qu'il fallait suivre) vous rebougerez le champ.
Sinon le reste normalement c'est bon
D'abord on définit des variables globales :
Ensuite dans l'initialistion de la fenêtre 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 nbimagemax est un entier = 0 // nombre total de champs créés pour dimensionner le tableau tab_images est un tableau dynamique de chaînes // tableau contenant le nom des champs carrésélectionné est un entier = 0 // le champ sélectionné lors du click souris posxsourisinit est un entier // position initiale de la souris en X posysourisinit est un entier // position initiale de la souris en Y
Clic sur bouton 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Evénement("clickimage",".*", 513) // WM_LBUTTONDOWN uniquement sur les champs de la fenêtre
Initialisation de Image1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 nbimagemax++ // pour chaque click sur le bouton on incrémente le nombre total de champs créés Dimension(tab_images, nbimagemax) // on n'oublie pas de redimensionner le tableau de noms tab_images[nbimagemax] = "carré"+ nbimagemax // on définit le nom du nouveau champ (carré1, carré2, carré3, ...) ChampClone(Image1, tab_images[nbimagemax]) // la fameuse fonction qui permet de créer un nouveau champ // là on décale un peu la position du nouveau champ par rapport au coin haut gauche de la fenêtre, ((nbimagemax - 1) * 55) permet de décaler chaque nouveau champ par rapport au précédent {tab_images[nbimagemax],indChamp}..X = 10 + ((nbimagemax - 1) * 55) {tab_images[nbimagemax],indChamp}..Y = 10
Procédure locale clickimage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MoiMême..CouleurFond = RougePastel // faut bien lui mettre une couleur ou alors vous pouvez la définir dans sa description
Procédure locale déplaceimage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 PROCEDURE clickimage() SI nbimagemax > 0 ALORS // si on a créé au moins 1 nouveau champ POUR i= 1 A nbimagemax SI {tab_images[i],indChamp}..Nom = ChampSurvol(Faux,Faux) ALORS // on initialise la position de la souris posxsourisinit = SourisPosX() posysourisinit = SourisPosY() carrésélectionné = i // on récupère l'indice du champ survolé Evénement("déplaceimage",{tab_images[carrésélectionné],indChamp},512) // souris bouge, attention il faut bien utiliser l'indirection pour que la souris déplace le champ survolé par la souris FIN FIN FIN
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 PROCEDURE déplaceimage() SI ToucheEnfoncée(teBoutonG)=Vrai ALORS SI {tab_images[carrésélectionné],indChamp}..Nom = ChampSurvol(Faux,Faux) ALORS // on sauveagrde la position initiale du champ posxinitcarré est un entier = {tab_images[carrésélectionné],indChamp}..X posyinitcarré est un entier = {tab_images[carrésélectionné],indChamp}..Y // la position du champ est sa position initiale + la position actuelle de la souris - la position initiale de la souris {tab_images[carrésélectionné],indChamp}..X = (posxinitcarré + SourisPosX() - posxsourisinit) {tab_images[carrésélectionné],indChamp}..Y = (posyinitcarré + SourisPosY() - posysourisinit) FIN FIN
Partager