Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2885 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VB] Déplacer une image à la souris [résolu !]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB] Déplacer une image à la souris [résolu !]

n°443936
Gnub
Posté le 30-06-2003 à 12:43:11  profilanswer
 

Bonjour !
Dans un petit programme, j'aimerai qu'on puisse déplacer une image avec la souris, un peu comme un glisser-déposer. J'ai mis en dessous le code que j'utilise. Cependant cette méthode a pour inconvénient de faire clignoter l'image quand elle passe par dessus d'autres contrôles, car elle est sans cesse redessinée.
J'ai fait des recherches du coté de DragDrop, mais lors du déplacement, seul le contour de l'image est affiché, alors que j'aimerai qu'on puisse voir son contenu.  
Comment puis-je procéder autrement ?
Merci :)
 

Code :
  1. Private Sub img_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2. If Button = vbLeftButton Then
  3.         ' Mémorise le point ou l'on a cliqué
  4.         sOffsetX = X
  5.         sOffsetY = Y
  6. End If
  7. End Sub
  8. Private Sub Img_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  9.     Dim sNewLeft As Single, sNewTop As Single
  10.     If Button = vbLeftButton Then
  11.         With img
  12.             ' Calcule les nouvelles coordonées de l'image
  13.             sNewLeft = .Left - (sOffsetX - X)
  14.             sNewTop = .Top - (sOffsetY - Y)
  15.             ' Empêche l'image de sortir de la fenêtre
  16.             If sNewLeft < 0 Then
  17.                 sNewLeft = 0
  18.             ElseIf sNewLeft + .Width > ScaleWidth Then
  19.                 sNewLeft = ScaleWidth - .Width
  20.             End If
  21.             If sNewTop < 0 Then
  22.                 sNewTop = 0
  23.             ElseIf sNewTop + .Height > ScaleHeight Then
  24.                 sNewTop = ScaleHeight - .Height
  25.             End If
  26.             ' Déplace l'image à ce point
  27.             .Move sNewLeft, sNewTop
  28.         End With
  29.     End If
  30. End Sub


Message édité par Gnub le 03-07-2003 à 23:12:59
mood
Publicité
Posté le 30-06-2003 à 12:43:11  profilanswer
 

n°444143
Gnub
Posté le 30-06-2003 à 15:12:44  profilanswer
 

vous pensez qu'il faut que j'utilise DirectDraw ?  [:gnub]

n°444150
HelloWorld
Salut tout le monde!
Posté le 30-06-2003 à 15:20:28  profilanswer
 

Les autres contrôles, ils sont de quels types ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°444187
Gnub
Posté le 30-06-2003 à 15:42:27  profilanswer
 

d'autres images...

n°444309
HelloWorld
Salut tout le monde!
Posté le 30-06-2003 à 16:44:25  profilanswer
 

Y'a pas un truc AutoRedraw en VB ?
VB je connais mal. Une solution 100% VB je sais pas.
Mais sinon y'a des solutions, sans passer par DirectX.
Il va surement falloir te gérer les bitmap (=> GDI, blit, ...) toi même et non pas utiliser un composant tout pret.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°444475
Gnub
Posté le 30-06-2003 à 18:36:41  profilanswer
 

je regarde du coté des api BitBlt et StretchBlt, qui semblent pouvoir convenir dans mon cas, mais ça m'a l'air un tantinet ardu à utiliser  [:gnub]  
 
enfin après tout, stune bonne occasion d'apprendre :)


Message édité par Gnub le 30-06-2003 à 18:37:39
n°447231
Carbon_14
Posté le 03-07-2003 à 10:35:14  profilanswer
 

Si j'y pense ce soir, faut que je regarde dans VB3, doit y avoir un exemple livré avec, ou du moins un exemple externe à Krosoft, c'est "vieux".
En essayant de changer l'attribut AutoRedraw des boutons (ou que certains), contrôles survolés, ça change qq chose ?
 
Imposer les coordonnées (.x = , .top = , etc..) au lieu de faire un move, je sais plus si ça change le comportement Windowsien ?

n°447237
HelloWorld
Salut tout le monde!
Posté le 03-07-2003 à 10:36:53  profilanswer
 

Y'a aussi l'attribut clipchildren ou je sais plus quoi à voir non ?
Fait des recherches avec le mot clé "flickering"


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°448098
Gnub
Posté le 03-07-2003 à 20:46:44  profilanswer
 

CARBON_14 a écrit :

Si j'y pense ce soir, faut que je regarde dans VB3, doit y avoir un exemple livré avec, ou du moins un exemple externe à Krosoft, c'est "vieux".
En essayant de changer l'attribut AutoRedraw des boutons (ou que certains), contrôles survolés, ça change qq chose ?
 
Imposer les coordonnées (.x = , .top = , etc..) au lieu de faire un move, je sais plus si ça change le comportement Windowsien ?


 
Autoredraw ne change pas grand chose :/ J'ai aussi tenté d'imposer les coordonées, mais c'est presque pire que Move (qui est a mon avis plus rapide car elle regroupe deux déplacements en une seule fonction). Si tu retrouve ton exemple je suis preneur :)
 
Je vais faire des recherches du coté de clipchildren et flickering ; merci pour vos réponses :)

n°448181
Carbon_14
Posté le 03-07-2003 à 22:34:59  profilanswer
 

Ai pas encore trouvé ce que je voulais mais avais un exemple avec API BilBlt et masque négatif etc.. Faudrait que je regarde comment ça pourrait s'adapter (pas totalement adapté, PictureBox). Dans un vieux PC Expert y avait méthode pour déplacer un poisson sur un fond quelconque, mais code C incomplet.
 
Sous VB3, bouger une PictureBox avec le code indiqué fonctionne à la perfection ! Mais une Image, ça cafouille (redessiné pas assez vite, moche). PC 486/100MHz, ss Win 3.11.
 
Ai écrit un truc pour déplacer du texte en C, faut que je regarde comment je faisais pour transposer. Si rien trouvé entre temps, je m'y replonge.
 
Ca ne serait pas possibler de mettre l'image dans une PictureBox (si ça existe encore dans les VB modernes), ça aiderait .


Message édité par Carbon_14 le 03-07-2003 à 22:42:35
mood
Publicité
Posté le 03-07-2003 à 22:34:59  profilanswer
 

n°448216
Gnub
Posté le 03-07-2003 à 23:08:24  profilanswer
 

tiens, je vais en effet tout de suite tester le coup de la picturebox : ce serait en effet une solution rapide et pratique...
 
Si ça ne marche pas, et qu'il esxiste dans d'autres langages des fonctions permettant de faire ça, je suis prenneur :) par contre pour intégrer ça au programme en vb, je ne sais pas si c'est façilement faisable...
Merci pour ton aide :)

n°448222
Gnub
Posté le 03-07-2003 à 23:12:38  profilanswer
 

Miraculeux ! Ca marche en effet a la perfection avec la pictureBox. En fait je n'avais pas pensé a l'utiliser, car d'après ce que j'ai compris, ce composant utilise un peu plus de ressources que l'image. Cependant, puisque ça marche avec la PictureBox, je ne vais pas m'en priver :)
Un grand merci !

n°448347
Carbon_14
Posté le 04-07-2003 à 08:44:44  profilanswer
 

Quad on regarde de près, une Image, en VB3 du moins, c'est "rien", juste les coordonnées d'une image qui y est "collée". Un emplacement géographique en fait.
 
Une PictureBox, c'est plus sophistiqué, c'est un conteneur à image (BMP, WMF, ..) qui a un mode de dessin, qui peut être réduite ou agrandie pour resizer son contenu, etc... Quand on la déplace, elle gère elle-même son contenu (avec les 4 BitBlt() de l'exemple de PC Expert).

n°448401
Gnub
Posté le 04-07-2003 à 10:04:35  profilanswer
 

ok, je comprends mieux la différence :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VB] Déplacer une image à la souris [résolu !]

 

Sujets relatifs
[applet]lire un fichier coté serveur [resolu][texture][opengl] inserer une simple image en 2D
[Js] Recuper une valeur d'un pop up dans la page principale [resolu][résolu] Faire une redirection automatique sur la page précédente
[MySQL] Supprimer une contrainte (innodb) [RESOLU][flash] charger une image externe
[ASP] Bizarrerie sur le test d'égalité dans un if ? [résolu]Comment cacher un lien lorsqu'on pointe dessus avec la souris ?
[HTML] Newb: image dans une autre fenêtre[vb.net] insérer image dans richtextbox
Plus de sujets relatifs à : [VB] Déplacer une image à la souris [résolu !]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR