Bonjour
J'espère être au bon endroit pour poster.
Donc voilà , j'au un TChart contenant 2 TSeries.
Dessus je dois tracer un graphique. Les contraintes de ce graphique sont incompatibles avec le fonctionnement de toutes les TSeries existantes.
Donc j'utilise le Canvas du Tchart (pas de problème pour moi).
A l'écran tout fonctionne et c'est parfait.
Mais je dois pouvoir sauvegarder ce qui est affiché par le TChart dans un fichier JPG.
Et là, c'est le drame : tout est sauvegardé sauf ce que je mets dans le Chart1.canvas !
Pour moi c'est un bug non ?
Google ne m'a été d'aucune aide, dans le meilleur des cas, j'ai fini par obtenir une image noir au lieu de celle de mon Tchart sans le Canvas.
J'ai fini par mettre en place une solution qui fonctionne mais qui est "sale" elle consiste à mettre le TChart dans un TPanel et à sauvegarder non pas le TChart mais le TPanel et là j'ai tout
Mais c'est moche et je n'aime pas ce qui est moche. Il y aurait-il une autre solution ?
Ceci fonctionne :
Ceci ne me recopie que le TChart avec ses 2 TSeries sans le Chart.Canvas (ce qui je pense est un bug)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 procedure TForm1.ButtonGraph1Click(Sender: TObject); var lRect: TRect; lFormBitmap: Graphics.TBitmap; j:TJPEGImage; begin savedialog1.filename:='graph2d.jpg'; if savedialog1.execute then begin if fileexists(savedialog1.filename) then DeleteFile(savedialog1.filename); lRect := PanelChart.ClientRect; lFormBitmap := Graphics.TBitmap.Create; try lFormBitmap.Width := PanelChart.ClientWidth; lFormBitmap.Height := PanelChart.ClientHeight; lFormBitmap.Canvas.CopyRect( Rect(0,0,lFormBitmap.Width-1,lFormBitmap.Height-1), PanelChart.Canvas,lRect); j := TJPEGImage.Create; try j.Assign(lFormBitmap); j.CompressionQuality:=90; j.savetofile(savedialog1.filename); finally j.free; end; finally lFormBitmap.Free; end; end; end;
Peut-être avez-vous déjà rencontrer ce type de problème et avez-vous une solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 procedure TForm1.ButtonGraph1Click(Sender: TObject); var jpg: TRasterImage; begin savedialog1.filename:='graph2d.jpg'; if savedialog1.execute then begin jpg := Chart1.SaveToImage(TJpegImage); try TJPegImage(jpg).CompressionQuality:=90; jpg.SaveToFile(savedialog1.filename); finally jpg.Free; end; end;
Sinon tant pis.
Partager