Dessin en VBA

CM63 Messages postés 3 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 21 décembre 2006 - 20 déc. 2006 à 22:22
CM63 Messages postés 3 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 21 décembre 2006 - 21 déc. 2006 à 18:54
Salut, voici mon problème (ah c'est en Times new roman) je voudrais dessiner dans un objet image, posé dans un UserForm, mais je n'ai pas accès aux méthodes telles que Pset et autres, qui n'existent que dans les Form (pas user) de VB (pas A). Comment puis-je faire en VBA l'équivalent d'un line x,y, RGB(r,g,b) comme dans une image en VB?

Merci pour votre réponse.

(I can't see my proverb, I hope you will)

CM63

10 réponses

Utilisateur anonyme
20 déc. 2006 à 22:35
Salut (ha c'est en Verdana ) (faut pas cherche à comprendre)
lol

Faut utiliser les apis du gdi :


Private Declare Function SetPixel Lib "gdi32" Alias "SetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long,

----

(Coloration syntaxique automatique par Kenji)





__________
Kenji
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 déc. 2006 à 08:58
Celà ne fera l'affaire qu'à condition de dessiner sur une autre Form et d'affecter à son image sur la 1èere Form le dessin fait sur la seconde. (il dit vouloir mettre son image dans un contrôle image).

Il lui faudra également jouer un peu avec le hdc !!!

Je me demande vraiment si le plus simple pour lui ne serait pas l'insertion d'un objet OLE (paint ou autre) complété par l'utilisation du clipboard...
0
CM63 Messages postés 3 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 21 décembre 2006
21 déc. 2006 à 14:52
Merci beaucoup, Kenji, je vais essayer. Mais je ne comprends pas pourquoi Jmfmarques dit que je serais obligé de tracer dans une autre Form.

Sinon, en effet, il faut que je sache comment récupérer le... divice contexte je suppose? (hdc) d'une Form (ou UserForm) ou d'un widget Image
inclu dedans.

J'ai vu des contrib là-dessus, mais c'est un peu lourd.

Quant à un objet OLE, peut-on contrôler une exe OLE de Paint, par exemple, depuis VB(A), et comment? Si je peux y faire des set et des get
de pixels, ça me va.

Merci pour vos réponses.

CM63
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 déc. 2006 à 15:43
Salut cm63,

pourquoi sur une autre form ?
parce que tu dis vouloir afficher ton image dans un contrôle image, pardi.
Si tu dessines sur la Form de travail, ton dessin y figureras !

Comment avec un objet Ole inséré ?
Je ne pratique pas vba depuis plusieurs années, mais me rappelles cette possibilité...
Il est alors inutile d'utiliser des "set" et des "get" de pixels, comme tu dis, puisque tu es directement dans un outil de dessin !
mais, si tu y tenais : là encore, rien ne devrait t'empêcher d'utiliser le clipboard, d'envoyer ton image sur une autre Form (une autre, toujours pour les mêmes raisons) et d'y travailler avec les apis de GDI pour des "get" et des "set" de pixels...

Si tu tiens à dessiner sur une Form plutôt que de passer par un objet OLE, je crois me rappeler que sous VBA, le hdc de la form active est 0... (à vérifier).
A ce propos : ce n'est pas un "divice contexte" mais un "Device Context" ... (donc un contexte de dispositif, que ce dispositif soit matériel ou virtuel).

Je regrette de ne pas avoir  le VBA (je t'aurais volontiers montré comment s'y prendre et celà m'aurait amusé...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 déc. 2006 à 15:58
Tiens,

Je vais essayer en aveugle  et tu seras mes yeux et mes doigts ::

mets ce code.
adapte-le au besoin un peu au goût VBA (je crois que l'on dit userform et pas form sous VBA, par exemple) puis essaye de dessiner avec le bouton droit de la souris maintenu pressé.

Et dis-moi ce qui se passe (avec le plus de précisions possibles dans tes explications)

Const PS_DOT = 2
Const PS_SOLID = 0
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Byte
Private monhdc As Long


Private Sub form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Do While monhdc = 0
        monhdc = GetForegroundWindow()
        monhdc = GetDC(monhdc)
    Loop
 If Button <> 1 Then Exit Sub
   hRPen = CreatePen(PS_SOLID, 100, QBColor(I + 8))
   DeleteObject SelectObject(Me.hdc, hRPen)
   SetPixelV monhdc, X * 1.32, Y * 1.32, 0
   'LineTo Me.hdc, 200, 200
   DoEvents
End Sub


Private Sub Command1_Click()
 For I = 0 To 1000
    SetPixelV monhdc, 100, I, &HC000&
  Next
End Sub
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 déc. 2006 à 16:00
Excuse : pas le bouton droit mais le bouton gauche (yé m'en a être troimpé !)
0
Utilisateur anonyme
21 déc. 2006 à 16:10
Pour dessiner sur une form en vba, j'ai trouvé ce site qui est pas mal :

http://book.itzero.com/read/others/Course.Technology.Microsoft.Excel.VBA.Professional.Projects.eBook-LiB_html/8932final/LiB0086.html




Pour le hWnd d'une usreform :
http://www.codyx.org/snippet_determiner-handle-hwnd-userform-vba_256.aspx
 et on détermine l'hdc avec l'api GetDC




__________
Kenji
0
Utilisateur anonyme
21 déc. 2006 à 16:12
Oulà, j'ai oublier le refresh. J'en ai mis du temps.
C'est de ma faute à ouvrire toutes les pages à la fois.





__________
Kenji
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 déc. 2006 à 17:29
Pas mak, ron lien, Charles Racaud, pas mal du tout.
Il devrait maintenant pouvoir s'en sortir à l'aise.
0
CM63 Messages postés 3 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 21 décembre 2006
21 déc. 2006 à 18:54
Oui, évidemment, "device context" et non pas "divice contexte", j'avais tapé un peu vite. Merci Jmfmarques,
je vais essayer tes trucs, ça a l'air assez complet.

CM63
0
Rejoignez-nous