Accueil > > > CREATION, APERÇU ET IMPRESSION D'UN OFFICE CHART(OU DE TOUT OBJECT D'UNE FORM) DS VB.NET
CREATION, APERÇU ET IMPRESSION D'UN OFFICE CHART(OU DE TOUT OBJECT D'UNE FORM) DS VB.NET
Information sur la source
Description
Salut, voila un p'tit bout de code pour lequel j'ai passé pas mal de temps a chercher. C'est un bout d'une appli qui me permet de creer des graphiques a l'aide d'un office chart, puis de faire un aperçu et de l'imprimer. Je rempli le graph a l'aide de données recupérées dans des tableau unidirectionnels, mais vous pouvez utiliser d'autres sources de données. Ce code utilise une api (bitblt) Je le met autant por aider que pour mieux le comprendre car je l'avoue, je suis pas forcement tout au clair avec les handle, l'api et tout ça...mais bon, ça marche...c'est deja un debut. Alors si vous avez des commentaires ou quoi que ce soit, ça sera bien venu Pour que le code marche, vous devrez ajouter a votre form, un office chart 11, un bouton , un printdocument et un printpreviewdialog
Source
- 'declaration de l'API:
- 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
- 'declaration de la variable bitmap :
- Private image As Bitmap
-
- 'fonction de "capture" de l'image du graphique:
- 'là je l'avoue j'aurais du mal a expliquer ce qu'il fais exactement
- Private Sub captured()
-
- Dim mygraph As Graphics = OChart.CreateGraphics
- Dim s As Size = OChart.Size
- image = New Bitmap(s.Width, s.Height, mygraph)
-
- Dim memograph As Graphics = Graphics.FromImage(image)
- Dim dc1 As IntPtr = mygraph.GetHdc
- Dim dc2 As IntPtr = memograph.GetHdc
-
- BitBlt(dc2, 0, 0, OChart.Width, _
- OChart.Height, dc1, 0, 0, &HCC0020)
-
- mygraph.ReleaseHdc(dc1)
- memograph.ReleaseHdc(dc2)
-
- End Sub
-
- 'procedure de creation du graphique :
- 'lst() et qos() sont deux tableaux unidirectionnels
- 'ochart est mon office chart
- Private Sub creegraph(ByVal lst(), ByVal qos())
- Dim constants
- OChart.Clear()
- OChart.Charts.Add()
- OChart.Charts(0).Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered
- 'graphique de type histogramme
-
- constants = OChart.Constants
- 'creation d'une serie de données :
- OChart.Charts(0).SeriesCollection.Add()
- OChart.Charts(0).SeriesCollection(0).Caption = "qos"
- 'données des etiquettes de l'axe X :
- OChart.Charts(0).SetData(constants.chDimCategories, constants.chDataLiteral, lst)
- 'données :
- OChart.Charts(0).SeriesCollection(0).SetData(constants.chDimValues, constants.chDataLiteral, qos)
- 'couleur de la serie de données :
- OChart.Charts(0).SeriesCollection(0).Interior.Color = RGB(0, 255, 0)
- 'arriere plan du graphique avec un degradé :
- OChart.Charts(0).PlotArea.Interior.SetPresetGradient(OWC11.ChartGradientStyleEnum.chGradientHorizontal, OWC11.ChartGradientVariantEnum.chGradientVariantStart, OWC11.ChartPresetGradientTypeEnum.chGradientDaybreak)
- 'tttre du graphique :
- OChart.Charts(0).HasTitle = True
- OChart.Charts(0).Title.Caption = "Joli graphique"
- OChart.Charts(0).Title.Font.Size = 14
-
- End Sub
-
- 'recupération et redimensionnement de l'image pour le printdocument1 :
-
- Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- ' agrandit l'image de 1.1 fois en largeur et 1.3 fois en hauteur
- e.Graphics.ScaleTransform(1.1, 1.3)
- 'dessine l'image en partant de 30 a droite et 30 enbas du coin haut gauche
- e.Graphics.DrawImage(image, 30, 30)
-
- End Sub
-
- 'lancement de l'aperçu ou de l'impression :
- Private Sub Bt_imp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_imp.Click
-
- Dim lste()
- Dim qose()
- 'procedure qui recupere les données pour mon graphique
- graph(lste, qose)
- 'appel des procedures de creation et recupération du graph
- creegraph(lste, qose)
- captured()
- 'mise du document en paysage :
- PrintDocument1.DefaultPageSettings.Landscape = True
- 'version pour faire un aperçu :
- PrintPreviewDialog1 = New PrintPreviewDialog
- PrintPreviewDialog1.Document = PrintDocument1
- PrintPreviewDialog1.WindowState = FormWindowState.Maximized
- PrintPreviewDialog1.Show()
- PrintPreviewDialog1.BringToFront()
- 'pour impression directe :
- PrintDocument1.Print()
-
- 'liberation des ressources du printdocument :
-
- PrintDocument1.Dispose()
-
- End Sub
'declaration de l'API:
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
'declaration de la variable bitmap :
Private image As Bitmap
'fonction de "capture" de l'image du graphique:
'là je l'avoue j'aurais du mal a expliquer ce qu'il fais exactement
Private Sub captured()
Dim mygraph As Graphics = OChart.CreateGraphics
Dim s As Size = OChart.Size
image = New Bitmap(s.Width, s.Height, mygraph)
Dim memograph As Graphics = Graphics.FromImage(image)
Dim dc1 As IntPtr = mygraph.GetHdc
Dim dc2 As IntPtr = memograph.GetHdc
BitBlt(dc2, 0, 0, OChart.Width, _
OChart.Height, dc1, 0, 0, &HCC0020)
mygraph.ReleaseHdc(dc1)
memograph.ReleaseHdc(dc2)
End Sub
'procedure de creation du graphique :
'lst() et qos() sont deux tableaux unidirectionnels
'ochart est mon office chart
Private Sub creegraph(ByVal lst(), ByVal qos())
Dim constants
OChart.Clear()
OChart.Charts.Add()
OChart.Charts(0).Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered
'graphique de type histogramme
constants = OChart.Constants
'creation d'une serie de données :
OChart.Charts(0).SeriesCollection.Add()
OChart.Charts(0).SeriesCollection(0).Caption = "qos"
'données des etiquettes de l'axe X :
OChart.Charts(0).SetData(constants.chDimCategories, constants.chDataLiteral, lst)
'données :
OChart.Charts(0).SeriesCollection(0).SetData(constants.chDimValues, constants.chDataLiteral, qos)
'couleur de la serie de données :
OChart.Charts(0).SeriesCollection(0).Interior.Color = RGB(0, 255, 0)
'arriere plan du graphique avec un degradé :
OChart.Charts(0).PlotArea.Interior.SetPresetGradient(OWC11.ChartGradientStyleEnum.chGradientHorizontal, OWC11.ChartGradientVariantEnum.chGradientVariantStart, OWC11.ChartPresetGradientTypeEnum.chGradientDaybreak)
'tttre du graphique :
OChart.Charts(0).HasTitle = True
OChart.Charts(0).Title.Caption = "Joli graphique"
OChart.Charts(0).Title.Font.Size = 14
End Sub
'recupération et redimensionnement de l'image pour le printdocument1 :
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
' agrandit l'image de 1.1 fois en largeur et 1.3 fois en hauteur
e.Graphics.ScaleTransform(1.1, 1.3)
'dessine l'image en partant de 30 a droite et 30 enbas du coin haut gauche
e.Graphics.DrawImage(image, 30, 30)
End Sub
'lancement de l'aperçu ou de l'impression :
Private Sub Bt_imp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_imp.Click
Dim lste()
Dim qose()
'procedure qui recupere les données pour mon graphique
graph(lste, qose)
'appel des procedures de creation et recupération du graph
creegraph(lste, qose)
captured()
'mise du document en paysage :
PrintDocument1.DefaultPageSettings.Landscape = True
'version pour faire un aperçu :
PrintPreviewDialog1 = New PrintPreviewDialog
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.WindowState = FormWindowState.Maximized
PrintPreviewDialog1.Show()
PrintPreviewDialog1.BringToFront()
'pour impression directe :
PrintDocument1.Print()
'liberation des ressources du printdocument :
PrintDocument1.Dispose()
End Sub
Conclusion
voila, j'espere que ça pourra vous aider
encore une fois, n'hesitez pas a commenter
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg SOIRéE ALT.NET MAI - 3 PRéSENTATIONSSOIRéE ALT.NET MAI - 3 PRéSENTATIONS par Rui
Juste pour rappel, la prochaine soirée ALT.NET Paris aura lieu le 24 Mai
Nous initions un nouveau format, à savoir plus de sessions dans un format plus court. Le but est de voir plus de choses dans un format plus concis et créer ainsi une dynamique...
Cliquez pour lire la suite de l'article par Rui
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|