Bonsoir,
Je cherche à faire un zoom d'une zone centrée sur le pointeur.
J'utilise le bout de code suivant :
Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur
picture1.Cls
Z = 2 'Définir la valeur du Zoom
Call StretchBlt(picture1.hdc, 0, 0, 100,100, _
Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY)
'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels
Ca marche bien... sauf que je suis décalé !
Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore si
je déplace ma UserForm.
Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt étaient
les coordonnées
haut/gauche de l'image source (donc la position du pointeur - 1/2 de la
taille de l'image source)
Qu'en est-il exactement et comment corriger ce décalage ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christophe
Bonjour
Comment le DC est-il mappé ?( Me.hdc ) lhpst doit être exprimé en coordonnées logique du DC. ici tu l'exprimes en pixel donc on doit avoir picture1.scalemode=pixel. qui correspont au mode de mapping MM_TEXT (une unité logique = une unité de périphérique) avec origine en haut à gauche.
Pour passer d'unité logique en unité de periphérique et inversement utilises les fonctions API DpToLp et LpToDp.
Attention getcurseurpos donne les coordonnées sur l'ecran, ce qui n'a rien à voir avec les coordonnées client d'un pictureBox
utilise getclientrect pour obtenir le rectangle client de ton controle utilise clienttoscreen et screentoclient pour passer d'un systeme à l'autre.
Pour évité se genre de pbs j'utilise mouse_down sur le pictureBox et je récupère X et Y attention à convertir en long pour utilisation dans les API.
Christophe VERGON
"Charles Cournault" a écrit dans le message de news: 3fd7995f$0$244$
Bonsoir, Je cherche à faire un zoom d'une zone centrée sur le pointeur. J'utilise le bout de code suivant :
Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur picture1.Cls Z = 2 'Définir la valeur du Zoom Call StretchBlt(picture1.hdc, 0, 0, 100,100, _ Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY)
'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels
Ca marche bien... sauf que je suis décalé ! Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore
si
je déplace ma UserForm.
Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt
étaient
les coordonnées haut/gauche de l'image source (donc la position du pointeur - 1/2 de la taille de l'image source)
Qu'en est-il exactement et comment corriger ce décalage ?
Bonjour
Comment le DC est-il mappé ?( Me.hdc )
lhpst doit être exprimé en coordonnées logique
du DC. ici tu l'exprimes en pixel donc on doit avoir
picture1.scalemode=pixel. qui correspont au mode de mapping MM_TEXT
(une unité logique = une unité de périphérique) avec origine en haut à
gauche.
Pour passer d'unité logique en unité de periphérique et inversement utilises
les fonctions API DpToLp et LpToDp.
Attention getcurseurpos donne les coordonnées sur l'ecran, ce qui n'a rien à
voir avec les coordonnées client d'un pictureBox
utilise getclientrect pour obtenir le rectangle client de ton controle
utilise clienttoscreen et screentoclient pour passer d'un systeme à l'autre.
Pour évité se genre de pbs j'utilise mouse_down sur le pictureBox et je
récupère X et Y attention à convertir en long pour utilisation dans les API.
Christophe VERGON
"Charles Cournault" <charles.cournault@free.fr> a écrit dans le message de
news: 3fd7995f$0$244$4d4eb98e@read.news.fr.uu.net...
Bonsoir,
Je cherche à faire un zoom d'une zone centrée sur le pointeur.
J'utilise le bout de code suivant :
Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur
picture1.Cls
Z = 2 'Définir la valeur du Zoom
Call StretchBlt(picture1.hdc, 0, 0, 100,100, _
Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY)
'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels
Ca marche bien... sauf que je suis décalé !
Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore
si
je déplace ma UserForm.
Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt
étaient
les coordonnées
haut/gauche de l'image source (donc la position du pointeur - 1/2 de la
taille de l'image source)
Qu'en est-il exactement et comment corriger ce décalage ?
Comment le DC est-il mappé ?( Me.hdc ) lhpst doit être exprimé en coordonnées logique du DC. ici tu l'exprimes en pixel donc on doit avoir picture1.scalemode=pixel. qui correspont au mode de mapping MM_TEXT (une unité logique = une unité de périphérique) avec origine en haut à gauche.
Pour passer d'unité logique en unité de periphérique et inversement utilises les fonctions API DpToLp et LpToDp.
Attention getcurseurpos donne les coordonnées sur l'ecran, ce qui n'a rien à voir avec les coordonnées client d'un pictureBox
utilise getclientrect pour obtenir le rectangle client de ton controle utilise clienttoscreen et screentoclient pour passer d'un systeme à l'autre.
Pour évité se genre de pbs j'utilise mouse_down sur le pictureBox et je récupère X et Y attention à convertir en long pour utilisation dans les API.
Christophe VERGON
"Charles Cournault" a écrit dans le message de news: 3fd7995f$0$244$
Bonsoir, Je cherche à faire un zoom d'une zone centrée sur le pointeur. J'utilise le bout de code suivant :
Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur picture1.Cls Z = 2 'Définir la valeur du Zoom Call StretchBlt(picture1.hdc, 0, 0, 100,100, _ Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY)
'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels
Ca marche bien... sauf que je suis décalé ! Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore
si
je déplace ma UserForm.
Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt
étaient
les coordonnées haut/gauche de l'image source (donc la position du pointeur - 1/2 de la taille de l'image source)
Qu'en est-il exactement et comment corriger ce décalage ?
Charles Cournault
Merci pour tes pistes Il s'avère que la première fut la plus intéressante
J'ai ajouté : HdcEcran = GetDC(0) que j'utilise dans StretchBlt et j'ai donc les coordonnées de ma souris par rapport à l'écran
"Christophe" a écrit dans le message de news: br9e1c$kqs$
Bonjour
Comment le DC est-il mappé ?( Me.hdc ) lhpst doit être exprimé en coordonnées logique du DC. ici tu l'exprimes en pixel donc on doit avoir picture1.scalemode=pixel. qui correspont au mode de mapping MM_TEXT (une unité logique = une unité de périphérique) avec origine en haut à gauche.
Pour passer d'unité logique en unité de periphérique et inversement
utilises
les fonctions API DpToLp et LpToDp.
Attention getcurseurpos donne les coordonnées sur l'ecran, ce qui n'a rien
à
voir avec les coordonnées client d'un pictureBox
utilise getclientrect pour obtenir le rectangle client de ton controle utilise clienttoscreen et screentoclient pour passer d'un systeme à
l'autre.
Pour évité se genre de pbs j'utilise mouse_down sur le pictureBox et je récupère X et Y attention à convertir en long pour utilisation dans les
API.
Christophe VERGON
"Charles Cournault" a écrit dans le message de news: 3fd7995f$0$244$ > Bonsoir, > Je cherche à faire un zoom d'une zone centrée sur le pointeur. > J'utilise le bout de code suivant : > > Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur > picture1.Cls > Z = 2 'Définir la valeur du Zoom > Call StretchBlt(picture1.hdc, 0, 0, 100,100, _ > Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY) > > 'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels > > Ca marche bien... sauf que je suis décalé ! > Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore si > je déplace ma UserForm. > > Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt étaient > les coordonnées > haut/gauche de l'image source (donc la position du pointeur - 1/2 de la > taille de l'image source) > > Qu'en est-il exactement et comment corriger ce décalage ? > > > >
Merci pour tes pistes
Il s'avère que la première fut la plus intéressante
J'ai ajouté : HdcEcran = GetDC(0)
que j'utilise dans StretchBlt
et j'ai donc les coordonnées de ma souris par rapport à l'écran
"Christophe" <geo.ch@tiscali.fr> a écrit dans le message de news:
br9e1c$kqs$1@news.tiscali.fr...
Bonjour
Comment le DC est-il mappé ?( Me.hdc )
lhpst doit être exprimé en coordonnées logique
du DC. ici tu l'exprimes en pixel donc on doit avoir
picture1.scalemode=pixel. qui correspont au mode de mapping MM_TEXT
(une unité logique = une unité de périphérique) avec origine en haut à
gauche.
Pour passer d'unité logique en unité de periphérique et inversement
utilises
les fonctions API DpToLp et LpToDp.
Attention getcurseurpos donne les coordonnées sur l'ecran, ce qui n'a rien
à
voir avec les coordonnées client d'un pictureBox
utilise getclientrect pour obtenir le rectangle client de ton controle
utilise clienttoscreen et screentoclient pour passer d'un systeme à
l'autre.
Pour évité se genre de pbs j'utilise mouse_down sur le pictureBox et je
récupère X et Y attention à convertir en long pour utilisation dans les
API.
Christophe VERGON
"Charles Cournault" <charles.cournault@free.fr> a écrit dans le message de
news: 3fd7995f$0$244$4d4eb98e@read.news.fr.uu.net...
> Bonsoir,
> Je cherche à faire un zoom d'une zone centrée sur le pointeur.
> J'utilise le bout de code suivant :
>
> Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur
> picture1.Cls
> Z = 2 'Définir la valeur du Zoom
> Call StretchBlt(picture1.hdc, 0, 0, 100,100, _
> Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY)
>
> 'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels
>
> Ca marche bien... sauf que je suis décalé !
> Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore
si
> je déplace ma UserForm.
>
> Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt
étaient
> les coordonnées
> haut/gauche de l'image source (donc la position du pointeur - 1/2 de la
> taille de l'image source)
>
> Qu'en est-il exactement et comment corriger ce décalage ?
>
>
>
>
"Christophe" a écrit dans le message de news: br9e1c$kqs$
Bonjour
Comment le DC est-il mappé ?( Me.hdc ) lhpst doit être exprimé en coordonnées logique du DC. ici tu l'exprimes en pixel donc on doit avoir picture1.scalemode=pixel. qui correspont au mode de mapping MM_TEXT (une unité logique = une unité de périphérique) avec origine en haut à gauche.
Pour passer d'unité logique en unité de periphérique et inversement
utilises
les fonctions API DpToLp et LpToDp.
Attention getcurseurpos donne les coordonnées sur l'ecran, ce qui n'a rien
à
voir avec les coordonnées client d'un pictureBox
utilise getclientrect pour obtenir le rectangle client de ton controle utilise clienttoscreen et screentoclient pour passer d'un systeme à
l'autre.
Pour évité se genre de pbs j'utilise mouse_down sur le pictureBox et je récupère X et Y attention à convertir en long pour utilisation dans les
API.
Christophe VERGON
"Charles Cournault" a écrit dans le message de news: 3fd7995f$0$244$ > Bonsoir, > Je cherche à faire un zoom d'une zone centrée sur le pointeur. > J'utilise le bout de code suivant : > > Call GetCursorPos(lhpst) 'Déterminer les coordonnées du pointeur > picture1.Cls > Z = 2 'Définir la valeur du Zoom > Call StretchBlt(picture1.hdc, 0, 0, 100,100, _ > Me.hdc, lhpst.x - 100 / Z, lhpst.y - 100 / Z, 100 / Z, 100 / Z, SRCCOPY) > > 'NB : Picture1 a une taille fixe de 1500/1500 twips soit 100/100 pixels > > Ca marche bien... sauf que je suis décalé ! > Ce n'est pas l'image sous le pointeur qui s'affiche, et ça décale encore si > je déplace ma UserForm. > > Je pensais que les paramètres xSrc et ySrc de la fonction StretchBlt étaient > les coordonnées > haut/gauche de l'image source (donc la position du pointeur - 1/2 de la > taille de l'image source) > > Qu'en est-il exactement et comment corriger ce décalage ? > > > >