Je travaille actuellement sur la refonte d'un contrôle Thumbs perso' (et destiné à un usage interne uniquement). Ce contrôle est destiné à afficher des vignettes de photos un peu comme Windows Explorer.
Mon ancien contrôle que je réécris totalement était composé d'un contrôle Picture contenant un certain nombre de Contrôles Image (celui du stock de VB6). Jusque là pas de problème et les évènements se produisent aussi sans problème.
Le nouveau contient aussi un contrôle Picture avec un certain nombre de contrôles Image (mais celui issu des MSForms).
L'affichage est sans problème mais l'évènement MouseDown a un problème avec le clic droit. Un essai de lancer un menu popup se passe très bien avec le clic gauche, mais il ne réagit pas avec le clic droit SAUF SI j'ai fait un clic classique (donc gauche) auparavant. Je précise que l'index correspond bien car il réagit au MouseMove.
Je précise que j'utilise le contrôle des MSForms pour 2 raisons. Il permet l'option SizeModeClip pour la propriété PictureMode chose que la propriété Stretch du contrôle natif ne fait pas. Et 2ème raison, il est à usage interne seulement.
référence plutot que pointeur... on ne sais pas trop ce que cela manipule, mais ce n'est pas une adresse mémoire directe, attention aux abus de langages
lié au msforms... ils fonctionne étrangement.
tu n'aura pas le droit de distribuer ton appli, les msForms te l'interdisent (usage interne, noté, m'enfin)
Pourquoi passer par un quelconque controle Image, de toute façon ?
VB sais très bien dessiner des images (portions, étirées, etc...)
VB sais très bien dessiner des images (portions, étirées, etc...)
Oui mais comment, par une API ou une fonction native (et si oui laquelle ?) et alors comment récupérer les évènements MouseMove and Co sauf à mémoriser les coordonnées de toutes mes vignettes !!!
La solution GDI+ est tentante pour les raisons que tu citent et en plus j'y gagnerais certainement en rapidité, mais m'obligerait à utiliser des contrôles Picture en lieu et place des Image pour avoir au minimum un hWnd (voire un hDC) à fournir.
Effectivement on récupère via la fonction GdipLoadImageFromFile un objet image.
Mais de quel "Image" s'agit-il.
Sauf erreur de ma part, le seul objet Image VB est le contrôle dont on parlait plus tôt.
et est-ce qu'un simple Set suffit ?
J'ai fait un certain nombre d'essais avec GDI+, le problème qu'il me reste c'est la taille de la vignette affichée.
Elle est minuscule et je pense que cela vient d'un problème d'unités (un savant mélange entre les pixels et les twips), je continue et je te tiens au courant.
Finalement, j'ai trouvé une autre solution, beaucoup plus simple à mon avis.
J'ai utilisé l'API mouse_event qui simule un click de souris.
Cela m'évite de faire des calculs à n'en plus finir et accessoirement à me plonger dans GDI+, je n'ai pas trop le temps en ce moment, mais c'est prévu pour plus tard.
Mais pourquoi Microsoft a pondu 2 contrôles images (le natif VB et celui des MSForms) à qui il manque à chacun des propriétés mais pas les mêmes bien sur ?
Pas hyper propre c'est sur...
Mais entre calculer la position et les dimensions de chacune des vignettes à la main, c'est effectivement nettement plus simple.