pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008
-
21 avril 2008 à 15:17
pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008
-
3 juin 2008 à 12:18
Bonjour,
je cherche à enregistrer un graphique MsChart en image (peu import le format)
Après de nombreuses recherches et essais infructueux je me résous enfin à demander de l'aide sur ce forum.
J'ai donc essayer de passer par le presse papier pour sauvegarder mon graph :
Private Sub SauverGraph(ByVal path As String)
AxMSChart1.EditCopy()
PictureBox1.Image = Clipboard.GetData(DataFormats.Bitmap)
PictureBox1.Image.Save(path)
End Sub
Or, le débugg me renvoie l'erreur suivante quand j'appèles ma fonction :
"FatalExecutionEngineError a été détecté
Message: Le runtime a rencontré une erreur irrécupérable. L'adresse de l'erreur était 0x79f89a89 sur le thread 0x110. Le code d'erreur est 0xc0000005. Il s'agit peut-être d'un bogue dans le CLR ou dans les portions unsafe ou non vérifiables du code utilisateur. Les causes courantes de ce bogue incluent des erreurs de marshaling utilisateur pour COM-Interop ou PInvoke, erreurs susceptibles d'endommager la pile."
Si quelqu'un à la mondre idée pour résoudre ce problème, ou une autre méthode de sauvegarde vers image d'un mschart (si possible sans OCX ou DLL en plus) je serais preneur.
najlaa85ma
Messages postés2Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention20 mai 2008 20 mai 2008 à 22:26
bonsoir dro93
Bon finalement g pu imprimer Ms chart directement avec choix d'imprimante et mise en page
bon voila le code
tu dois ajouter au form le composant printdocument("printdocument1")
et printdialogue("printdialogue1)
"Graf" c est le nom de ton mschart
Private
Declare
Function
BitBlt
Lib
"gdi32.dll"
Alias
"BitBlt"
(
ByVal
_hdcDest
As
IntPtr,
ByVal
nXDest
As
Integer
,
ByVal
nYDest
As
_
Integer
,
ByVal
nWidth
As
Integer
,
ByVal
nHeight
As
Integer
,
ByVal
_hdcSrc
As
IntPtr,
ByVal
nXSrc
As
Integer
,
ByVal
nYSrc
As
Integer
, _
ByVal
dwRop
As
System.Int32)
As
Long
Dim
memoryImage
As
Bitmap
Private
Sub
CaptureScreen()
Dim
mygraphics
As
Graphics = Graf.CreateGraphics()
Dim
s
As
Size Graf.SizememoryImage
New
Bitmap(s.Width, s.Height, mygraphics)
Dim
memoryGraphics
As
Graphics = Graphics.FromImage(memoryImage)
Dim
dc1
As
IntPtr = mygraphics.GetHdc
Dim
dc2
As
IntPtr = memoryGraphics.GetHdcBitBlt(dc2, 0, 0, Graf.ClientRectangle.Width, _
Graf.ClientRectangle.Height, dc1, 0, 0, 13369376)
mygraphics.ReleaseHdc(dc1)
memoryGraphics.ReleaseHdc(dc2)
End
Sub
Private
Sub
CaptureScreen_donnee()
Dim
mygraphics
As
Graphics = DataGrid1.CreateGraphics()
Dim
s
As
Size DataGrid1.SizememoryImage
New
Bitmap(s.Width, s.Height, mygraphics)
Dim
memoryGraphics
As
Graphics = Graphics.FromImage(memoryImage)
Dim
dc1
As
IntPtr = mygraphics.GetHdc
Dim
dc2
As
IntPtr = memoryGraphics.GetHdcBitBlt(dc2, 0, 0, Graf.ClientRectangle.Width, _
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 avril 2008 à 23:52
salut,
un petit clear du clipboard avant?..
ps : il n'y a plus de propriété picture dans le controle picturebox sous dotnet?
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008 22 avril 2008 à 10:20
Salut,
merci pour ta réponse.
J'ai essayé le clipbord.clear, au préalable, et j'ai malheureusement toujours la même erreur.
J'ai l'impression que c'est un bug de .NET. En effet, lorsque je copie dans Word le contenu de mon presse papier suite à l'instruction "AxMSChart1.EditCopy()", j'ai les données texte de mon MsChart...
Etrange...
Ca ne résoud pas mon problème malheureusement!
PS : picturebox.picture a été remplacé par picturebox.image.
pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008 22 avril 2008 à 12:07
Par contre, je viens de me rendre compte qu'en faisant un "collage spécial" sous word après mon "editcopy", j'ai bien mon mschart qui s'affiche en format image.
Sous paint, j'ai une erreur si je fais la même manip, ce qui veut dire que le contenu du presse papier n'est pas un format image à la base.
Existe-t'il une émulation du collage spécial de word sous vb.net?
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 avril 2008 à 00:00
je ne fais pas de dotnet ....
çà donne quoi quelquechose du genre PictureBox1.Image = Clipboard.GetData(DataFormats.metafile)
ou voir ce qui t'es proposé... ?
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008 23 avril 2008 à 16:40
J'ai encore bien galéré sur internet pour trouver une solution.
Malheureusement, il semblerait, selon certaines sources qui ne sont évidemment pas vérifiables auprès de Microsoft (bah tiens!), que .net ne supporterait pas le traitement des métafiles dans le clipboard (http://support.microsoft.com/?id=323530 qui aborde le sujet de manière elliptique).
Merci pour les liens que tu m'as envoyé toute fois.
PS : petite préscision au sujet du clipboard sous .net, le seul moyen de le vider complètement est :
"Clipboard.SetDataObject(New DataObject())"
La méthode .clear ne sert à rien...
D'autre part, le format vb6 "vbCFMetaFile" équivaut à "DataFormats.MetafilePict" en .net
Voilà, ça ne résoud pas mon problème, mais ça peut servir!
najlaa85ma
Messages postés2Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention20 mai 2008 17 mai 2008 à 14:09
bonjour,
g le méme probléme que toi g essayé ce code mais il me donne la meme erreur
Dim pr As New Printer
Graf.EditCopy()
pr.PaintPicture(Clipboard.GetData(DataFormats.), 0, 0, pr.ScaleWidth, pr.ScaleHeight)
pr.EndDoc()
est ce que tu peux me dire STP comment tu as fais pour copier ton grahe au word?
je serai trés reconnaissante si vous me trouverez une solution
merci.
pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008 20 mai 2008 à 11:51
bonjour najala32ma,
je n'ai malheureusement toujours pas réussi à trouver une solution pour enregistrer mon graphique en image directement via mon appli.
Vu que j'ai du la distribuer à ses commanditaires au travail, j'ai donc pris le parti de faire une "copie dans le presse papier" à partir de mon appli, solution inélégante s'il est est...
la fonction est la suivante :
"private sub copyClipboard()
AxMSChart1.EditCopy()
end sub"
Voici le workaround pour la copie dans word :
1) lance la fonction "copyClipboard()".
2) il faut ensuite coller le
Graphique dans « Word » en cliquant sur « Edition/Collage Spécial »
et en sélectionnant « En tant que : Image »
Voilà.
J'aimerais quand même bien faire fonctionner la copie en image directement...
et par là même l'impression.
pedro93
Messages postés10Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 3 juin 2008 3 juin 2008 à 12:18
Merci beaucoup,
j'ai désormais pu solutionner mon problème.
j'ai en outre utilisé ta fonction pour sauvegarder mon graphique en image :
Private Sub SauverGraph(path As String)
memoryImage.Save(path)
End Sub
Private Sub SauvImage() Handles SaveFileDialog3.FileOk
SauverGraph(SaveFileDialog3.FileName)
End Sub
Private Sub BMPToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FormatBmpToolStripMenuItem2.Click
CaptureScreen(AxMSChart1)
'extension par défaut bmp
SaveFileDialog3.DefaultExt = ".bmp"
SaveFileDialog3.AddExtension = True
SaveFileDialog3.Filter = "Fichiers Bitmap (*.bmp)|*.bmp|Tous fichiers (*.*)|*.*"
'on affiche la fenêtre de sauvegarde de fichiers
SaveFileDialog3.ShowDialog()
'si le fichier existe déjà on demande pour l'écraser
SaveFileDialog3.OverwritePrompt = True
End Sub
Il ne me reste plus qu'a faire un resize de ma zone à imprimer pour ça rentre dans le page (ma graph est assez imposant en taille!)