'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
Oui, c le principal, ;-)
merci pour ce source simple mais tres utile
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
certainement...Moi, pour ma part, je recherche une source qui me permettrait d'écrire sur cette image généré..a bon entendeur...
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.
Il doit y avoir moyen de faire ca plus proprement avec les device context. je vais essayer de vous pondre ca... ;)
voilà suffit de mettre un mschart un pitcturebox (qui peux etre invisible) et un boutton et voilà le codePrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate 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 LongPrivate Const SRCAND = &H8800C6 ' (DWORD) dest = source AND destPrivate Const SRCCOPY = &HCC0020 ' (DWORD) dest = sourcePrivate Const SRCERASE = &H440328 ' (DWORD) dest = source AND (NOT dest )Private Const SRCINVERT = &H660046 ' (DWORD) dest = source XOR destPrivate Const SRCPAINT = &HEE0086 ' (DWORD) dest = source OR destPrivate Sub Command1_Click()Picture1.AutoRedraw = Truedc = GetDC(MSChart1.hwnd)BitBlt Picture1.hdc, 0, 0, MSChart1.Width, MSChart1.Height, dc, 0, 0, SRCCOPYPicture1.CurrentX = 5: Picture1.CurrentY = 5Picture1.FontName = "Verdana"Picture1.Print "XbY"SavePicture Picture1.Image, "C:\Image.bmp"End Sub
pourrais-tu expliquer pourqoui cette solution serait meilleure ?elle a pleins de déclarations supplémentaire et pleins de truc en plus... (API, ...)
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 LongPrivate 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 LongPrivate Sub Command1_Click()Picture1.AutoRedraw = TrueBitBlt Picture1.hdc, 0, 0, MSChart1.Width, MSChart1.Height, GetDC(MSChart1.hwnd), 0, 0, &HCC0020 'Dessine le Chart dans Picture1Picture1.CurrentX = 5: Picture1.CurrentY = 5 'Positionne le texte à écrirePicture1.FontName = "Verdana" 'Choisi la policePicture1.Print "XbY" ' écrit "XbY"SavePicture Picture1.Image, "C:\Image.bmp" 'Sauve l'imageEnd Sub
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 ;-)
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.
Salut,Merci pour le code.Je l'utilise pour imprimer un graph avec des dimensions précises.'Config du printerPrinter.Orientation = vbPRORLandscape 'PaysagePrinter.ScaleMode = vbMillimeters'Récupération du résultat du code précédentpicGraph.Picture = picGraph.Image'ImpressionPrinter.PaintPicture picGraph, x, y, largeur, hauteur'Lancement impressionPrinter.EndDocIl y a surement plus simple.Cordialement
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 873 525 membres 53 nouveaux aujourd'hui 16 151 membres club