baouc
Messages postés26Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention15 octobre 2007
-
17 juin 2006 à 00:13
baouc
Messages postés26Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention15 octobre 2007
-
18 juin 2006 à 10:57
Bonjour à tous,
voilà, je développe une appli sous vba depuis excel.
Mon problème se situe au niveau d'une Userform (équivalent de la form), sur laquelle je veux dessiner (en gros, pour faire simple).
J'utilise donc l'api setpixel, mais il ne me place pas le pixel où il faut dans ma Useform.
En fait, pour voir réellement ce qui se passe, j'utilise directement l'évènement MouseDown de la form, et je fait un setpixel avec les coordonnées X et Y retournée via le clic. Jusque là, rien d'extraordinaire, sauf que le pixel n'est pas où il faut.
Si je clique au coin en haut à gauche, il est où il faut. Mais plus je m'éloigne (dans la form) vers la droite et/ou vers le bas, plus le pixel est créé avec un décalage " retard" qui s'accentue.
Pax exemple, ma form fait 100x100 pixels.
1. Je fait setpixel 0,0 => il me le met en 0,0
2. Je fait setpixel 10,0 => il me le met en 8,0
3. Je fait setpixel 20,0 => il me le met en 15,0
4. Je fait setpixel 50,0 => il me le met en 25,0
5. Je fait setpixel 0,10 => il me le met en 0,8
6. Je fait setpixel 0,30 => il me le met en 0,15
7 Je fait setpixel 100,100 => il me le met en 560,560
Vous voyez le truc koi (les valeur, je l'ai ai mises au pif, histoire de).
Peut etre une piste avec TwipsPerPixelY, mais je ne sais ni l'utiliser, ni à quoi ça sert.
Vous seriez super sympas de m'aider.
Merci à tous.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 17 juin 2006 à 12:49
Normal, SetPixel demande des pixels alors que vba te renvoie des twips.
Si tu ne peux pas changer le scalemode de ta fenêtre avec vba, alors change l'unité de mesure des api windows : il me semble que c'est la fonction SetMapMode
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 17 juin 2006 à 12:51
je ne touche pas à VBA, attend quelqu'un de plus calé.
pour moi c'est ton scalemode. change le pour vbpixels '(3)
je doute qu'il n'y ait pas de scalemode en VBA...
baouc
Messages postés26Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention15 octobre 2007 17 juin 2006 à 13:32
Merci de vos réponses,
je vais aller jeter un coup d'oeil sur SetMapMode.
Sinon, j'ai remarqué autre chose. En fait au début, le décalage de 0.75 c'était avec l'évènement MouseDown qui ne servait qu'à tester.
En reprenant le prog normal, donc un X et Y imposé (maform.Heighr=500 et maForm.Weight =500) le point de départ au centre donc X=250 et Y=250, j'ai fait un test pour contater le décalage en faisant :
Const k As Integer = 250
Const Ky As Integer = k
For i = 0 To k
SetPixel DCIMG, k + i, Ky + i, vbBlue
SetPixel DCIMG, k + i, Ky - i, vbBlue
SetPixel DCIMG, k - i, Ky - i, vbBlue
SetPixel DCIMG, k - i, Ky + i, vbBlue
Next i
Ce qui a pour effet de tracer (normalement) une croix du centre de la form vers les bords.
Et la croix est tracée, chaque pixels les uns contre les autres, ce qui n'aurait pas été le cas avec le test MouseDown. (oui, un rapport de 0.75 provoquait un décalage donc les pixels devaient séloigner de plus en plus avec des "blanc" entre).
Donc a pripori, le premier problème rencontré, tampis de ne pas le résoudre, puisque je ne m'en sert pas). C'est bizarre tout ça quand même!.
Donc maintenant je m'apperçoit juste que le centre de la croix est décalé et que, chose étrange aussi, le croix est vrillées, constatez vous même le résultat avec ce code :
Const k As Integer = 250 + 79 ' +79 pour centrer sur X
Const Ky As Integer = k - 10 '-10 pour centrer sur Y
For i = 0 To k
SetPixel DCIMG, k + i, Ky + i, vbBlue
SetPixel DCIMG, k + i, Ky - i, vbBlue
SetPixel DCIMG, k - i, Ky - i, vbBlue
SetPixel DCIMG, k - i, Ky + i, vbBlue
Next i
baouc
Messages postés26Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention15 octobre 2007 17 juin 2006 à 15:06
Bon je viens d'essaye avec SetMapMode, la Userform est bien en pixel, puisque si je la change en Twips, ça trace rien de bon (je suis en dehors de la form).
Pour info, comment, ou avec qui, on connait les valeurs des paramètres des fonction API car à chaque fois, je galère.
Comme par exemple pour SetMapMode
Public Const MM_ANISOTROPIC = 8
Public Const MM_HIENGLISH = 5
Public Const MM_HIMETRIC = 3
Public Const MM_ISOTROPIC = 7
Public Const MM_LOENGLISH = 4
Public Const MM_TEXT = 1
Public Const MM_TWIPS = 6
baouc
Messages postés26Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention15 octobre 2007 18 juin 2006 à 10:57
Je me suis débrouillé en ajustant manuellement pour le moment mon centre, sa marche bien, je réessayerais plus tard,
en tout cas merci beaucoup a vous.