MSCHART VERS BMP : LA SOLUTION

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 - 29 juil. 2004 à 01:11
frank241 Messages postés 3 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 30 octobre 2006 - 30 oct. 2006 à 13:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24963-mschart-vers-bmp-la-solution

frank241 Messages postés 3 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 30 octobre 2006
30 oct. 2006 à 13:44
Salut,

Merci pour le code.

Je l'utilise pour imprimer un graph avec des dimensions précises.
'Config du printer
Printer.Orientation = vbPRORLandscape 'Paysage
Printer.ScaleMode = vbMillimeters

'Récupération du résultat du code précédent
picGraph.Picture = picGraph.Image

'Impression
Printer.PaintPicture picGraph, x, y, largeur, hauteur

'Lancement impression
Printer.EndDoc

Il y a surement plus simple.

Cordialement
cs_Jielde Messages postés 226 Date d'inscription mardi 17 octobre 2000 Statut Membre Dernière intervention 1 décembre 2010
27 juin 2006 à 23:03
Salut,

Merci beaucoup pour cette astuce bien pratique.

Par contre lorsque je pose un control devant man MSChart, il est dessiner aussi dans mon BMP, pourkoi ?

merci.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 août 2004 à 10:04
D'accord avec sibi12..... ca évite d'aller manipuler le presse-papier.....

le but, c'est que ca enregistre une image, si a chaque fois qu'on le fait on pers ce que l'on avait copié..... on va pas être très très contents, ;-)

les API sont très très utiles pour booster un peu VB.... il ne faut pas en avoir peur, et même se familiariser avec ;-)
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
4 août 2004 à 09:44
En fait ta solution passe par le presse papier ce qui n'est pas toujours du plus "propre" vu que l'utilisateur peut avoir mis quelque chose dedans.

Ensuite tu peux retravailler l'image en plaçant le texte que tu veux dessus.

Si les déclaration te dérange tu risque d'être vite limité en VB ;).
Tu peux tjs supprimer les constantes et remplacer le SRCCOPY ds l'appel de la fonction BitBlt par &hCC0020 ce qui ne te laisse que 2 malheureux appels ;)

On peux aussi mettre GetDC et BitBlt sur la même ligne. ce qui donne :

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
Picture1.AutoRedraw = True

BitBlt Picture1.hdc, 0, 0, MSChart1.Width, MSChart1.Height, GetDC(MSChart1.hwnd), 0, 0, &HCC0020 'Dessine le Chart dans Picture1

Picture1.CurrentX 5: Picture1.CurrentY 5 'Positionne le texte à écrire
Picture1.FontName = "Verdana" 'Choisi la police
Picture1.Print "XbY" ' écrit "XbY"

SavePicture Picture1.Image, "C:\Image.bmp" 'Sauve l'image
End Sub
cs_renardeau Messages postés 44 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 décembre 2009
3 août 2004 à 22:17
pourrais-tu expliquer pourqoui cette solution serait meilleure ?

elle a pleins de déclarations supplémentaire et pleins de truc en plus... (API, ...)
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
3 août 2004 à 16:36
voilà suffit de mettre un mschart un pitcturebox (qui peux etre invisible) et un boutton et voilà le code


Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCAND &H8800C6 ' (DWORD) dest source AND dest
Private Const SRCCOPY &HCC0020 ' (DWORD) dest source
Private Const SRCERASE &H440328 ' (DWORD) dest source AND (NOT dest )
Private Const SRCINVERT &H660046 ' (DWORD) dest source XOR dest
Private Const SRCPAINT &HEE0086 ' (DWORD) dest source OR dest

Private Sub Command1_Click()
Picture1.AutoRedraw = True

dc = GetDC(MSChart1.hwnd)
BitBlt Picture1.hdc, 0, 0, MSChart1.Width, MSChart1.Height, dc, 0, 0, SRCCOPY
Picture1.CurrentX 5: Picture1.CurrentY 5
Picture1.FontName = "Verdana"
Picture1.Print "XbY"
SavePicture Picture1.Image, "C:\Image.bmp"
End Sub
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
31 juil. 2004 à 19:09
Il doit y avoir moyen de faire ca plus proprement avec les device context. je vais essayer de vous pondre ca... ;)
cs_renardeau Messages postés 44 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 décembre 2009
29 juil. 2004 à 12:54
il servirait à indiquer que cette image a été générée par mon programme.

Je ne désire pas le mettre dans le titre car cela diminue de façon non négligeable le titre de mon dessin.
cs_renardeau Messages postés 44 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 décembre 2009
29 juil. 2004 à 12:44
certainement...

Moi, pour ma part, je recherche une source qui me permettrait d'écrire sur cette image généré..

a bon entendeur...
cauroir Messages postés 27 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 2 août 2007
29 juil. 2004 à 10:33
Ce qui aurait ete mieux : le sauver en jpg !
Je crois qu'il y a des sources qui convertissent le BMP en JPG sur ce site
cauroir Messages postés 27 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 2 août 2007
29 juil. 2004 à 10:32
merci pour ce source simple mais tres utile
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
29 juil. 2004 à 01:11
Oui, c le principal, ;-)
Rejoignez-nous