USERCONTROL IMAGE À PARTIR DE GDI+

Signaler
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Flocreate
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52843-usercontrol-image-a-partir-de-gdi

Flocreate
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
Bonjour,
Merci, renfield je vais faire la maj en mettant dans le "paint"

Petchv, je ne sais pas trop ce que tu appelle agrandir, mais je pense bien que oui.
Soit tu souhaite garder la meme taille pour le contrôle et en ce cas tu peux utiliser les propriétés offset
offset_x = (10/100) * Image_Width
offset_y = (10/100) * Image_Height
offset_w = (80/100) * Image_Width
offset_h = (80/100) * Image_Width
/!\ au Sizing_Mode
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
pas bon de passer par un AutoRedraw...

gerer l'evenement _Paint et laisser Windows l'appeler pour toi resolverai ton souci de Refresh
cs_petchy
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
3
bonjour
merci pour se controle,je peut mettre des images de trés bonne qualité.
est ce possible d'agrandir l'image au passage de la souris ?
@ plus
petchy
Flocreate
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
Maj effectuée.
En ce qui concerne la détection du changement de coordonnées, le AmbientChanged ne semble pas le permettre.
J'ai donc implémenté une Sub Refresh. Pour palier à ta taquinerie, il suffit maintenant de faire :
Private Sub gdIMG2_Click()
gdIMG2.Left = gdIMG2.Left + 150
gdIMG2.Refresh
End Sub
Si tu connais une autre méthode, je suis à l'écoute.

Je cherche aussi le moyen d'utiliser le HitTest pour activer les évènements de souris uniquement au dessus de l'image (si transparence <> FF).
Mais pour le moment je sèche et je ne voudrait pas avoir à utiliser de capture de procédure...
cordialement,
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
Autosize ?
que le controle epouse les dimensions de l'image...

ok pour le reste
Flocreate
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
bonjour renfield,
"
Mon Controle est marqué lié à:
D:\Documents and Settings\THOM31R.DOM\Bureau\gdIMG\smilley 1.png
si je modifie ce fichier image (le .png, via mon soft de dessin préféré),
Je m'attend a voir le changement pas forcément en temps reel, bien sur, mais au moins au rechargement de l'appli.
"
Ma fois c'est une idée sympathique. Je vois deux version possibles
Soit je met en place un moyen qui permette à l'utilisateur de "recharger le ficher" dans l'IDE
Soit je note dans mon control l'heure de modification de l'image et je compare au chargement (en IDE uniquement bien sur) Et si il y a besoin j'affiche une popup qui demande si on souhaite ou non mettre à jour.

"
via la fenetre de propriété, je vais m'attarder a modifier cette propriété (File) :
Je ne peux me contenter de saisir le nom du fichier (App.Path par default serait un plus)...
"
J'avais refait un tour sur une source dans VBFrance permettant de mettre un petit bouton "..." mais en y réfléchissant, j'ai préféré laisser mon control sans trop de dépendances afin de pouvoir l'ajouter dans n'importe quel projet assez simplement. Par contre une propertyPage serait certainement un moyen conviviale de permettre le choix du fichier.

"
Si je modifie cette propriété, pour renseigner le nom d'un fichier inexistant , le controle apparait vide, sans crash, bien.
Néanmoins, ma propriété File se retrouve vide...
Idem si mon fichier ne contient pas une image valide.
"
Oui en effet, je m'était aussi fait la réflexion. J'avais cependant laissé ainsi dans la mesure ou le moment où je constate que le fichier n'est pas valide est dans le Draw et non dans le property Let. difficile de revenir en arrière donc. Néanmoins, en passant par un Stream temporaire destiné uniquement au chargement de la nouvelle image, je pourrait éviter ce cas et prévenir l'utilisateur que son fichier est soit introuvable, soit incorect...

"
Dommage que le controle n'aies pas de propriété "autosize", permettant de mettre le controle aux bonnes dimensions
"
Qu'appelles tu autosize ? quand ca se lie au control parent Bottom, Top, Left, Right, middle ?

"
Bon point pour toi: la présence de ImgWidth et ImgHeight (utile uniquement si le ScaleMode de notre Form est en Pixels)
"
A l'origine j'ai ajouté cette propriété pour pouvoir utiliser les Offset, ca facilite bien la tache de savoir quelle taille fait notre image.

"
Les gouts et les couleurs...
Je change l'Offset_Y, Je m'étonne de la direction prise par l'image.
Saisissant 64, je m'attendais a perdre la bouche du Smiley : voir l'image descendre dans son container
Je le répète, c'est pleinement acceptable, juste une question de gouts
"
^^ Je me suis habitué à ce qu'on dise que le point 0,0 d'un écran et donc d'une image est en haut à gauche. De plus (réponse de flemmard) ca permet de cabler directement le Offset_Y dans l'appelle d'API ImgDrawRectRectI

"
FondTransparent est un mot FR, ca tache, non ?
"
Je n'aime pas l'anglais mais je vais faire un effort pour la release ^^

"
Taquin, je code :
Private Sub gdIMG2_Click()
gdIMG2.Left = gdIMG2.Left + 150
End Sub
Je te laisse admirer le fond transparent qui se promène avec le bouton ^^
"
mmm vraiment taquin ;) je vais voir ce que je peux faire... peut être avec un ambient change

"
le code du bouton n'est là que pour l'exemple. néanmoins, gaffe au comportement de tes boutons :
si on place le curseur sur le controle,
que l'on maintienne le bouton de la souris appuyé ,
que l'on sorte le curseur du bouton,
et que l'on relache le bouton (tu me suis ?)
>>>>>>>>>>> Click
Ce comportement n'est pas conforme au comportement des boutons que l'on connais.
Manque un appel a IsOver pour conditionner le déclenchement du Click
"
En effet, je me suis trompé dans la définition du cahier des charges comme le montre le pdf représentant la machine à état. Je vais corriger (tu fais bien de le signaler, je comptait créer un UserControl gdiButton basé sur gdImg et sur le code présenté ici)

je vais tacher de mettre à jour le code d'ici lundi.
cordialement,
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
Rendu nickel, réactif

Mon Controle est marqué lié à:
D:\Documents and Settings\THOM31R.DOM\Bureau\gdIMG\smilley 1.png

si je modifie ce fichier image (le .png, via mon soft de dessin préféré),
Je m'attend a voir le changement pas forcément en temps reel, bien sur, mais au moins au rechargement de l'appli.

via la fenetre de propriété, je vais m'attarder a modifier cette propriété (File) :
Je ne peux me contenter de saisir le nom du fichier (App.Path par default serait un plus)...
Si je modifie cette propriété, pour renseigner le nom d'un fichier inexistant , le controle apparait vide, sans crash, bien.
Néanmoins, ma propriété File se retrouve vide...
Idem si mon fichier ne contient pas une image valide.

Dommage que le controle n'aies pas de propriété "autosize", permettant de mettre le controle aux bonnes dimensions
Bon point pour toi: la présence de ImgWidth et ImgHeight (utile uniquement si le ScaleMode de notre Form est en Pixels)

Les gouts et les couleurs...
Je change l'Offset_Y, Je m'étonne de la direction prise par l'image.
Saisissant 64, je m'attendais a perdre la bouche du Smiley : voir l'image descendre dans son container
Je le repète, c'est pleinement acceptable, juste une question de gouts

FondTransparent est un mot FR, ca tache, non ?

Taquin, je code :
Private Sub gdIMG2_Click()
gdIMG2.Left = gdIMG2.Left + 150
End Sub
Je te laisse admirer le fond transparent qui se promène avec le bouton ^^

le code du bouton n'est là que pour l'exemple. néanmoins, gaffe au comportement de tes boutons :
si on place le curseur sur le controle,
que l'on maintienne le bouton de la souris appuyé ,
que l'on sorte le curseur du bouton,
et que l'on relache le bouton (tu me suis ?)
>>>>>>>>>>> Click
Ce comportement n'est pas conforme au comportement des boutons que l'on connais.
Manque un appel a IsOver pour conditionner le déclenchement du Click
Flocreate
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
Oui en effet, merci ;)
Impossible de cacher son intérêt pour les mmorpg ;)
cordialement,
Bacterius
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
6
Je signale juste que c'est PNG et pas PNJ ^^
PNG = Portable Network Graphics
PNJ = Personnage Non Joueur

Cordialement, Bacterius !