Mschart vers bmp : la solution

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 358 fois - Téléchargée 30 fois

Contenu du snippet

Exportation d'un graphique MSChart vers un fichier BMP
Je l'ai cherché longtemps, le voici pour votre meilleur plaisir

Source / Exemple :


'Alors qu'un MSChart  est dans votre fenêtre, 
'vous crééer un bouton dans lequel vous mettez
' le code suivant
'REM : le MSChart s'appelle : MSChart

      ' Sauvegarde de l'image
      MSChart.EditCopy
      Call SavePicture(Clipboard.GetData, App.Path & "\Image.bmp")

      ' On efface le clipboard
      Clipboard.Clear

Conclusion :


je ne pige pas tout mais le principal c'est que ca fonctionne non ?

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
dimanche 2 mai 2004
Statut
Membre
Dernière intervention
30 octobre 2006

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
Messages postés
226
Date d'inscription
mardi 17 octobre 2000
Statut
Membre
Dernière intervention
1 décembre 2010

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.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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 ;-)
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

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
Messages postés
44
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 décembre 2009

pourrais-tu expliquer pourqoui cette solution serait meilleure ?

elle a pleins de déclarations supplémentaire et pleins de truc en plus... (API, ...)
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.