cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008
-
27 juin 2006 à 10:00
bellazanouba -
1 janv. 2008 à 23:12
Bonjour à tous,
J'ai un petit problème à vous soumettre. J’ai 2 objets ‘Image’ dont je dois changer l’image chaque fois que l’utilisateur clique dessus. Jusque là, rien de compliqué, j’utilise la fonction ‘LoadPicture’ dans l’événement ‘Click’ de chacun des objets ‘Image’. <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>
Mais j’ai remarqué que quand on clique plusieurs fois rapidement sur les objets ‘Image’, le rafraichissement des images est très lente. Or c’est le but recherché dans cette application. J’ai fait la même application avec des objets ‘CommandButton’ à la place des objets ‘Image’ et c’est plus rapide. C’est satisfaisant pour cette application. Or je ne peux pas avoir de boutons dans l’application.
Est-ce que quelqu’un aurait une idée pour m’aider svp ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 27 juin 2006 à 10:09
Charge tes images dans deux contrôles Image. Et masque l'un ou l'autre selon la parité du click, ainsi tu n'aura plus le temps de chargement des images, juste le temps d'affichage qui sera moins long !
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 juin 2006 à 10:11
ton LoadPicture est une mauvaise chose, ici.... c'est lent de recharger le fichier a chaque fois.
tu pourrais stocker tes images, et les replacer dans tes controles Image, quand nécessaire.
cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008 27 juin 2006 à 10:50
Darksidious, Renfield<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
Merci pour vos suggestions.
Juste une petite précision, j’ai remarque que ce n’est pas la fonction ‘LoadPicture’ ou ‘LoadResPicture’ qui prend du temps, mais c’est bien l’événement ‘Click’ de l’objet ‘Image’. J’ai effectué un test supplémentaire en chargeant les images des objets ‘Images’ dans l’événement ‘Click’ des objets ‘CommandButton’ et c’est plus rapide.
Renfield, veux-tu bien m’explique comment il faut faire pour stocker toutes les images, stp ?
cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008 28 juin 2006 à 13:56
Merci pour la suggestion mais comme je l’ai déjà signalé plus haut, c’est l’événement ‘Click’ de l’objet ‘Image’ qui est moins rapide que celui de l’objet ‘CommandButton’. L’idéal serait de pouvoir utiliser l’objet ‘CommandButton’ sans avoir l’effet 3D de cette objet.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
Je vais regarder comment fonctionne l’objet ‘ImageList’.
cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008 28 juin 2006 à 16:17
Renfield,
L’événement ‘Click’ paraît plus lent pour le rafraichissement de l'image dans l'objet 'Image' que dans l’objet ‘CommandButton’. Ce n’est pas après un clic, bien après plusieurs cliques de suite.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 juin 2006 à 16:36
il est complètement inconcevable de faire tous ces LoadPicture sans arrêt dans le code...
ne cherche pas plus loin tes problèmes de lenteur.... bonjour les accès disque a chaque clic
en passant, tu aurait pu faire :
LoadPicture(strDirectory & "\GL" & format$ ( Pressure , "000") & ".bmp")
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 28 juin 2006 à 17:50
Je suis du même avis que Renfield : c'est sûrement pas la méthode click du contrôle Image ou PictureBox qui prend du temps, mais ta méthode RedrawBarGraph qui est appelée à chaque click et qui charge à chaque fois une image ! Charge tes images une fois pour toute, et n'accède pas au disque sans arrêt, tu y gagnera en rapidité !
cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008 28 juin 2006 à 17:54
Renfield, je sais que les ‘LoadPicture’ ce n’est pas top. J'ai essayé ‘LoadResPicture’ et c’est un peu mieux. Mais sans plus.
Pourtant si tu utilise ces ‘LoadPicture’ dans l’événement ‘Click’ des objets ‘CommandButton’ c’est plus rapide !!! <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 28 juin 2006 à 18:01
Tu lis un peu ce qu'on t'écrit ? CHARGE une fois pour toute toutes tes images !
Tu peux utiliser tout tes loadpicture dès le chargement de ta feuille (stocke-les dans des stdpicture par exemple), et puis après tu n'a plus qu'à redéfinir le Picture de ton contrôle par la bonne image. Mais surtout évite de faire des LoadPicture ou autre LoadResPicture à tout va !
cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008 29 juin 2006 à 14:05
Darksidious,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
J’ai stocké les images avec un ‘ImageList’, ça ne fonctionne pas mieux. Ensuite, j’ai réessayé avec les objets ‘stdPicture’ comme tu me l’as préconisé. Et c’est pareil !!!
Je te jure il faut me croire !!! J’ai vraiment l’impression que c’est plus lent dans l’événement ‘Click’ de l’objet ‘Image’ par rapport à l’objet ‘CommandButton’.
Peut-être que je me trompe avec l’objet ‘stdPicture’ ???
Voici le code que j’ai écrit et compare par toi-même :
‘ Debut ->
Option Explicit
Dim intPressure As Integer
Dim strDirectory As String
Dim gphL000 As New StdPicture
Dim gphL010 As New StdPicture
Dim gphL020 As New StdPicture
Dim gphL030 As New StdPicture
Dim gphL040 As New StdPicture
Dim gphL050 As New StdPicture
Dim gphR050 As New StdPicture
Dim gphR060 As New StdPicture
Dim gphR070 As New StdPicture
Dim gphR080 As New StdPicture
Dim gphR090 As New StdPicture
Dim gphR100 As New StdPicture
Private Sub Form_Load()
intPressure = 0
strDirectory = App.Path
Set gphL000 = LoadPicture(strDirectory & "\GL000.bmp")
Set gphL010 = LoadPicture(strDirectory & "\GL010.bmp")
Set gphL020 = LoadPicture(strDirectory & "\GL020.bmp")
Set gphL030 = LoadPicture(strDirectory & "\GL030.bmp")
Set gphL040 = LoadPicture(strDirectory & "\GL040.bmp")
Set gphL050 = LoadPicture(strDirectory & "\GL050.bmp")
Set gphR050 = LoadPicture(strDirectory & "\GR050.bmp")
Set gphR060 = LoadPicture(strDirectory & "\GR060.bmp")
Set gphR070 = LoadPicture(strDirectory & "\GR070.bmp")
Set gphR080 = LoadPicture(strDirectory & "\GR080.bmp")
Set gphR090 = LoadPicture(strDirectory & "\GR090.bmp")
Set gphR100 = LoadPicture(strDirectory & "\GR100.bmp")
cs_IcebergMan
Messages postés41Date d'inscriptionvendredi 11 février 2005StatutMembreDernière intervention11 décembre 2008 29 juin 2006 à 15:07
Renfield,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
Malheureusement, l’utilisateur va ‘mitrailler’ cet objet ‘image’. En fait, Chaque fois qu’il cliquera sur la partie de droite, il va faire monter le ‘bargraph’ et il le diminuera par un clic sur la partie de gauche. Les images ont une taille variant de 18 Ko à 20 Ko au format ‘bmp’ et j’ai même essayé le format ‘jpg’ (1 à 2 Ko), mais ce n’est pas mieux.
J’ai remplacé l’évenement ‘Click’ par ‘MouseDown’ et le résultat est un peu mieux, mais c’est loin d’être satisfaisant par rapport à un objet ‘CommandButton’.
N’y a-t’il pas moyen d’enlever l’effet 3D du bouton, je souhaiterai avoir un bouton plat sans délimitation visible dans lequel je changerai sa propriété ‘Picture’ comme pour les objets ‘Image’.
Enfin, je vous remercie tous les deux (Darksidious et toi) d’être patient avec moi. Mais rassurez-vous, je lis bien ce que vous écrivez et je le test. Je pense que je me suis fait mal comprendre.
Bien à vous,
Ice.
P.S. : Est-il possible de vous envoyer mon les images dans un zip, histoire de voir ce que je veux faire avec le ‘bargraph’ ?