Aide (urgent)

nostra78 Messages postés 137 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 6 décembre 2005 - 19 avril 2005 à 16:15
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 19 avril 2005 à 18:18
Bjr,


J'ai absolument besoin d'une propriété. J'ai récupéré un ocx permettant d'intégrer une picturebox sous une form vba. Jusque là tout va bien ; par contre , j'aurai besoin d'avoir la propriété line qui n'existe pas sous cet ocx. Comment réaliser cette propriété?? Quelequ'un à t'il déja travaillez sur ce problème ???
C'est urgent, je n'avance plus sur mon projet depuis une semaine. C pas très efficace comme travail :) ;)

Si quelqu'un pouvait me venir en aide. Je pense que c n'est pas facil à réaliser. Avis au bête de programmation. J'aurai déjà besoin qu'on m'aiguille dans le sens où je ne sais pas comment créer une propriété ; et je ne sais pas comment est conçu la propriété line (rappel qui existe sous vb6.0)

Merci d'avance.

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
19 avril 2005 à 17:19
Heu... tu as le code de l'ocx ?



Sinon, Line n'est pas une propriété mais une méthode. De plus, si tu as
accès au hDC de ton ocx, tu peux utiliser la fonction de l'API Windows
LineTo qui fait la même chose que Line, mais en plus rapide...

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
nostra78 Messages postés 137 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 6 décembre 2005
19 avril 2005 à 17:24
Excuse j'ai pas tout compris, je travail avec excel. En fait, j'ai besoin de tracer des courbes sur cette pictureBox. Peux tu m'explquer plus en détail. Merci
@+ Nostra78
0
nostra78 Messages postés 137 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 6 décembre 2005
19 avril 2005 à 17:32
Voilà ce que j'ai

Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long


Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte 'PS : si quelqu'un sait à quoi ça sert, je suis preneur
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBQUAD
End Type
Dim BMPINFO As BITMAPINFO
Dim BMPINFOH As BITMAPINFOHEADER


Private Buffer() As RGBQUAD 'tampon dans lequel on place l'image d'un PictureBox


'procédure pour placer l'image dans le tampon
'PichDC : hDC du PictureBox concerné
'PicImHandle : handle de l'image contenue dans le PictureBox
'x,y : Largeur et hauteur de l'image en Pixels
Public Sub PicToBuffer(PichDC As Long, PicImHandle As Long, x As Long, y As Long)
ReDim Buffer(x, y)
With BMPINFOH
.biBitCount = 32 'profondeur de couleur
.biHeight = y + 1 'on doit rajouter 1 parceque l'index commence à 0
.biWidth = x + 1
.biPlanes = 1 'PS : si quelqu'un sait à quoi ça sert, je suis preneur
.biSize = Len(BMPINFOH)
End With
BMPINFO.bmiHeader = BMPINFOH


'on met les données du Bitmap dans le tableau
GetDIBits PichDC, PicImHandle, 0, y + 1, Buffer(0, 0), BMPINFO, 0
End Sub



'procédure pour afficher le tampon dans un PictureBox
'PichDC : hDC du PictureBox concerné
'PicImHandle : handle de l'image contenue dans le PictureBox
Public Sub BufferToPic(PichDC As Long, PicImHandle As Long)
Dim x As Long
Dim y As Long
'on prend les dimensions de l'image (et donc du tampon)
x = UBound(Buffer, 1)
y = UBound(Buffer, 2)
With BMPINFOH
.biBitCount = 32
.biHeight = y + 1
.biWidth = x + 1
.biPlanes = 1
.biSize = Len(BMPINFOH)
End With
BMPINFO.bmiHeader = BMPINFOH
'on affiche...
SetDIBits pihdc, PicImHandle, 0, y + 1, Buffer(0, 0), BMPINFO, 0
End Sub


Public Sub RotateCCW() 'On fait pivoter l'image dans le sens contraire des aiguilles d'une montre
Dim TMP() As RGBQUAD 'buffer temporaire
Dim x As Long
Dim y As Long
Dim Xx As Long
Dim Yy As Long
x = UBound(Buffer, 1)
y = UBound(Buffer, 2)
ReDim TMP(y, x)
For Xx = 0 To x
For Yy = 0 To y
TMP(y - Yy, Xx) = Buffer(Xx, Yy)
Next Yy
Next Xx
ReDim Buffer(y, x)
Buffer = TMP
End Sub


Public Sub RotateCW() 'On fait pivoter l'image dans le sens des aiguilles d'une montre
Dim TMP() As RGBQUAD
Dim x As Long
Dim y As Long
Dim Xx As Long
Dim Yy As Long
x = UBound(Buffer, 1)
y = UBound(Buffer, 2)
ReDim TMP(y, x)
For Xx = 0 To x
For Yy = 0 To y
TMP(Yy, x - Xx) = Buffer(Xx, Yy)
Next Yy
Next Xx
ReDim Buffer(y, x)
Buffer = TMP
End Sub
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
19 avril 2005 à 18:18
Hum, et cà c'est un contrôle ocx ?



Je ne vois pas du tout l'intêret de passer par un contrôle pour faire cà, une simple dll aurait largement suffit, enfin bon...



Donc, il est facile de faire une fonction pour tracer une ligne :



Private Declare Function CreatePen Lib "gdi32" Alias "CreatePen" (ByVal
nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long

Private Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal
hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As
Long

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

Private Type POINTAPI

X As Long

Y As Long

End Type



Public Sub Line(byval hDC as long, byval XDepart as long, byval YDepart
as long, byval XArrivee as long, byval YArrivee as long, byval Color as
OLE_COLOR)



Dim lPen as Long

Dim pPoint as POINTAPI



Let lPen = CreatePen(0, 1, Color)

Call SelectObject(hDC, lPen)

Call MoveToEx(hDC, XDepart, YDepart, pPoint)

Call LineTo(hDC, XArrivee, YArrivee)



End Sub


Je te donne ce code tel quel, je ne l'ai pas testé, mais il devrait marcher je pense.


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
Rejoignez-nous