Gambas France BETA


Pas de compte ? Incription

Déplacer une image ?

Ce sujet est résolu.

12
AuteurMessages
valaquarus#1 Posté le 25/7/2024 à 13:20:45
-- Unus Ex Altera --Bonjour à tous,
peut on déplacer une image dans un formulaire ou une picturebox, avec la souris?
Je sais qu'il y a un startx et un stary pour marquer l'endroit de départ de la souris mais comment s'en sert-on?
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#2 Posté le 25/7/2024 à 14:50:08
Bonjour,
Il faut mettre l'image dans une picturebox et la déplacer avec la propriété Move.
Je l'ai fait dans le jeux "Porte" qui est sur la forge.
valaquarus#3 Posté le 25/7/2024 à 16:55:33
-- Unus Ex Altera --Bonjour Patrick et merci de ta réponse.

j'ai téléchargé ton jeu mais je peux pas le démarrer, je pense qu'il manque ceci : Me.Image = Image.Load(User.Home & "/Porte/" & Utililitaire.images[$ply]) faut il le créer à la mano?
J'ai fait ceci dans PictureBox1_MouseMove() : Me.Move(Me.X + Mouse.X, Me.Y + Mouse.Y) mais ça ne fonctionne pas plus exactement rien ne se passe !
même en remplaçant Me par PictureBox1 qui est celui qui reçoit les images (une par une).
Qu'est ce que j'ai raté?
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#4 Posté le 25/7/2024 à 17:27:27
Normalement les images sont dans le repertoire "Porte" et quand tu ne met pas de chemin les fichiers sont cherchés dans ce répertoire, en tout cas chez moi ça fonctionne avec sur Ubuntu 20.04 + Gambas 3.14 et Debian testing + Gambas 3.19.1
Joueur.class hérite d'une PictureBox donc dans l’évènement _MousseMove() on récupére les coordonnées de la souris et on la fait bouger avec la méthode move.
vuott#5 Posté le 25/7/2024 à 17:28:05
Ne cedere ineluctabili possimusUne question :

a l'aide du "mouse" vous voulez déplacer l'image à l'intérieur d'une "PictureBox", ou voulez-vous déplacer l'Objet "PictureBox" à l'intérieur du formulaire ?
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#6 Posté le 25/7/2024 à 18:07:57
-- Unus Ex Altera --Bonsoir Vuott,
je veux déplacer l'image d'un pictureBox dans ce pictureBox car j’agrandis ou rétréci cette image. Le pictureBox ne bouge donc pas c'est l'image qui doit bouger.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#7 Posté le 25/7/2024 à 18:37:58
Ne cedere ineluctabili possimusDonc..., si le traducteur en ligne ne me trompe pas, vous voulez modifier la taille d’une image, affichée dans une "PictureBox", en agissant sur cette image avec le "mouse".
Je pense que c’est plus simple avec un "DrawingArea".
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#8 Posté le 25/7/2024 à 18:45:13
-- Unus Ex Altera --Ciao Vuott,

L'agrandissement ou la réduction de l'image fonctionnent ; je voudrais avec la souris déplacer l'image dans le pictureBox pour, par exemple recentrer l'image ou la déplacer lors d'un agrandissement.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#9 Posté le 25/7/2024 à 18:52:26
Ne cedere ineluctabili possimusCiao valaquarus,

je voudrais avec la souris déplacer l'image dans le pictureBox pour

Ah, ...òmikron kappa !
...Je fais un peu d’étude.
« Vita non suavis esse potest, nec Mors amara. »
vuott#10 Posté le 25/7/2024 à 19:37:32
Ne cedere ineluctabili possimusEn fait, vous voulez obtenir un résultat graphique similaire à cette instruction, qui donne à l'image, ici, une position bien définie à l'intérieur de la « PictureBox » :
1
PictureBox1.Alignment = Align.BottomLeft

vous voulez cependant contrôler progressivement le positionnement de l'image par une action de la « souris » sur l'image affichée dans la « PictureBox ».
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#11 Posté le 25/7/2024 à 20:29:25
-- Unus Ex Altera --You're damned right!
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#12 Posté le 25/7/2024 à 20:41:02
Ne cedere ineluctabili possimusMalheureusement, comme je l'ai mentionné plus haut, je pense que vous ne pouvez pas déplacer l'image (avec un résultat similaire à celui de la propriété « .Alignment ») à l'intérieur de la « PictureBox ».
Bien sûr, autant que vous demandez peut être fait avec un "DrawingArea".
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#13 Posté le 25/7/2024 à 21:26:45
-- Unus Ex Altera --Bonsoir Vuott,
je vais tester avec un drawingArea, si j'y arrive, sinon tant pis.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#14 Posté le 25/7/2024 à 23:35:38
Ne cedere ineluctabili possimusJ'ai écrit un exemple dans lequel une image peut être déplacée à l'intérieur de sa « PictureBox ».
Mais je suggère de ne pas l'adopter : je ne le montre que par curiosité didactique.
Je précise qu’une seule "PictureBox" sera utilisée dans le code.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
PRIVATE PictureBox1 AS PictureBox
PRIVATE im AS Image
PRIVATE im2 AS Image
PRIVATE rc AS Rect
PRIVATE x AS SHORT
PRIVATE y AS SHORT


PUBLIC SUB Form_Open()

WITH ME
.W = Screen.AvailableWidth * 0.5
.H = Screen.AvailableHeight * 0.5
END WITH

WITH PictureBox1 = NEW PictureBox(ME) AS "PictureBox1"
.W = ME.W
.H = ME.h
.Background = Color.SoftYellow
END WITH

im = NEW Image(PictureBox1.W, PictureBox1.H, PictureBox1.Background, Image.Standard)
im2 = Image.Load("/usr/share/gambas3/control/gb.term.form/termradiobutton.png")

rc = NEW Rect((PictureBox1.W / 2) - (im2.W / 2), (PictureBox1.H / 2) - (im2.H / 2), im2.W, im2.H)

' Place l'image au centre de l'image initiale vide, la faisant ainsi apparaître au centre du formulaire:
im.DrawImage(im2, rc.X, rc.Y, rc.W, rc.H)

PictureBox1.Image = im

END


PUBLIC SUB PictureBox1_MouseDown()

' Les données suivantes, utiles pour le déplacement de l’image, ne sont collectées que si vous avez cliqué sur l’image à déplacer:
WITH rc
IF NOT .Contains(Mouse.X, Mouse.Y) THEN RETURN
x = Mouse.X - .X
y = Mouse.Y - .Y
END WITH

END


PUBLIC SUB PictureBox1_MouseUp()

PictureBox1.Mouse = Mouse.Default

END


PUBLIC SUB PictureBox1_MouseMove()

' Le déplacement n’a lieu que si vous avez cliqué sur l’image à déplacer:
WITH rc
IF NOT .Contains(Mouse.X, Mouse.Y) THEN RETURN
.X = Mouse.X - x
.Y = Mouse.Y - y
END WITH

PictureBox1.Mouse = 18

' Empêche qu'un déplacement rapide de l'image ne laisse des traces visibles du déplacement précédent:
im = im.Fill(PictureBox1.Background)

im.DrawImage(im2, rc.X, rc.Y, rc.W, rc.H)

PictureBox1.Image = im

END

Bah... :| c’est juste un tour ridicule.
Est en fait le déplacement de l'image réelle dans un Objet "Image" vide, ayant les mêmes dimensions que la "PictureBox" qui la contient.
Je suis honteux... :oops:
Veniam peto ! :cry:


La solution avec la « DrawingArea » est la plus correcte et la plus appropriée:
https://www.gambas-it.org/wiki/index.php/Spostare_con_il_mouse_un%27immagine_caricata_in_una_DrawingArea
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#15 Posté le 26/7/2024 à 07:43:32
-- Unus Ex Altera --Merci Vuott,
mais je crois que je me suis très mal exprimé.
Patrick et vous,Vuott, avez cru que je voulais déplacer une "petite" image à l'intérieur d'un PictureBox, ce n'est pas exactement cela.
Je voudrais déplacer dans le PictureBox, l'image qui occupe déjà toute la surface du PictureBox.

Vos deux exemples fonctionnent très bien, l'un déplaçant une petite image à l'intérieur d'une plus grande qui occupe la surface entière du PictureBox en une ligne (au fait, Patrick, j'ai modifier cette ligne
1
2
' Me.Image = Image.Load(User.Home & "/Porte/" & Utililitaire.images[$ply])
ME.Image = Image.Load("./" & Utililitaire.images[$ply])
qui permet de récupérer les images puisque le répertoire Porte n'est pas installé)
et, l'autre permettant de déplacer une zone rectangulaire de l'image dans le pictureBox.

Question à Vuott,
Pourquoi :
La solution avec la « DrawingArea » est la plus correcte et la plus appropriée:
?

Merci à tous les deux, je vais encore chercher car je suis têtu mais ...
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
12