BGRABitmap tutorial TAChart/fr: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | Vous pouvez faire de beaux graphiques avec [[BGRABitmap/fr|BGRABitmap]]. Ajoutez le paquet *TAChartBGRA* au projet depuis l'inspecteur de projet. | |
| 2 | 2 | ||
| 3 | 3 | Il se peut que le paquet n'apparaisse pas dans la liste ou ne soit pas installé. Dans ce cas, ouvrez-le manuellement avec le menu Paquet, Ouvrir un fichier paquet (.lpk). Il doit se trouver dans le composant *component\tachart*. Ensuite, cliquez sur le bouton du paquet pour l'installer. | |
| 4 | 4 | ||
| 5 | 5 | ## Ajouter un graphique TAChart | |
| 6 | 6 | ||
| 7 | 7 | Les graphiques [[TAChart/fr|TAChart]] ont en fait pour nom de classe *TChart*. Pour ajouter un graphique, parcourez les onglets des composants que vous pouvez poser sur la fenêtre, et choisissez l'onglet Chart avant de cliquer sur l'icône de *TChart*. Dessinez un rectangle sur la fenêtre pour le poser. | |
| 8 | 8 | ||
| 9 | 9 | Afin de l'alimenter avec des données, cliquez sur l'icône de *TRandomChartSource* et cliquez une fois dans la fenêtre pour le poser. Dans l'inspecteur d'objet, mettez *PointsNumber* à 10, *XMax* à 10 et *YMax* à 10. | |
| 10 | 10 | ||
| 11 | 11 | A présent, créez une série qui utilise cette source. Pour cela, cliquez sur votre graphique et, dans l'inspecteur d'objet, allez dans la propriété *Series*. Cliquez sur les trois petits points : vous pouvez ajouter une *Bar series*. Dans les propriétés de cette série, déroulez la propriété *Source* et choisissez *RandomChartSource1*. Le graphique devrait se remplir de barres rouges. | |
| 12 | 12 | ||
| 13 | - | ||
| 14 | - | ||
| 15 | - | ||
| 16 | - | ||
| 13 | + |  | |
| 17 | 14 | ||
| 18 | 15 | Nous allons faire de la 3D, alors ajoutons de la profondeur. Pour cela, mettez la propriété *Depth* de la série à 10. | |
| 19 | 16 | ||
| 20 | - | ||
| 21 | - | ||
| 22 | - | ||
| 23 | - | ||
| 17 | + |  | |
| 24 | 18 | ||
| 25 | 19 | Enfin, cliquez sur le graphique et mettez la propriété *Align* à *alClient* afin de remplir la fenêtre. | |
| 26 | 20 | ||
| 27 | 21 | ## Décorer un graphique utilisant le rendu normal | |
| 28 | 22 | ||
| 29 | 23 | Allez dans la propriété *Series* de votre graphique. Choisissez une série de barres, puis dans l'inspecteur d'objet, allez dans l'onglet des événements et définissez *OnBeforeDrawBar*. Ajoutez le code suivant : | |
| 30 | 24 | ||
| 31 | 25 | ``` pascal | |
| 32 | 26 | uses TABGRAUtils; | |
| 33 | 27 | ||
| 34 | 28 | procedure TForm1.BeforeDrawBarHandler(ASender: TBarSeries; ACanvas: TCanvas; | |
| 35 | 29 | const ARect: TRect; APointIndex, AStackIndex: Integer; | |
| 36 | 30 | var ADoDefaultDrawing: Boolean); | |
| 37 | 31 | begin | |
| 38 | 32 | ADoDefaultDrawing:= false; | |
| 39 | 33 | DrawPhong3DBar(ASender, ACanvas, ARect, APointIndex); | |
| 40 | 34 | end; | |
| 41 | 35 | ``` | |
| 42 | 36 | ||
| 43 | 37 | Ensuite, exécutez le programme. | |
| 44 | 38 | ||
| 45 | 39 | Votre graphique ressemble maintenant à cela :  | |
| 46 | 40 | ||
| 47 | 41 | Vous pouvez également utiliser la fonction *DrawChocolateBar*. Mettez la propriété *PointsNumber* de l'objet *RandomChartSource1* à 5, et changez le code de l'événement *OnBeforeDrawBar* de la série à : | |
| 48 | 42 | ||
| 49 | 43 | ``` pascal | |
| 50 | 44 | uses TABGRAUtils; | |
| 51 | 45 | ||
| 52 | 46 | procedure TForm1.BeforeDrawBarHandler(ASender: TBarSeries; ACanvas: TCanvas; | |
| 53 | 47 | const ARect: TRect; APointIndex, AStackIndex: Integer; | |
| 54 | 48 | var ADoDefaultDrawing: Boolean); | |
| 55 | 49 | begin | |
| 56 | 50 | ADoDefaultDrawing:= false; | |
| 57 | 51 | DrawChocolateBar(ASender, ACanvas, ARect, APointIndex, True); | |
| 58 | 52 | end; | |
| 59 | 53 | ``` | |
| 60 | 54 | ||
| 61 | - | ||
| 62 | - | ||
| 63 | - | ||
| 64 | - | ||
| 55 | + |  | |
| 65 | 56 | ||
| 66 | 57 | ## Utiliser BGRABitmap pour l'affichage de tout le graphique | |
| 67 | 58 | ||
| 68 | 59 | Les barres ne sont pas très différentes avec ou sans anticrénelage. Allez dans la propriété *Series* de votre graphique, supprimez les barres, ajoutez une *Line series*, et mettez sa *Source* à *RandomChartSource1*. Ensuite, mettez sa propriété *Depth* à 10 et sa propriété *SeriesColor* à *clRed*. | |
| 69 | 60 | ||
| 70 | - | ||
| 71 | - | ||
| 72 | - | ||
| 73 | - | ||
| 61 | + |  | |
| 74 | 62 | ||
| 75 | 63 | Afin de changer le moteur de rendu du graphique, cherchez le composant *TChartGUIConnectorBGRA* dans l'onglet Chart. Cliquez pour le poser sur le graphique. Ensuite, cliquez sur le fond du graphique et avec l'inspecteur d'objet, définissez la propriété *GUIConnector* en déroulant et en choisissant *ChartGUIConnectorBGRA1*. Le rendu se fait maintenant avec anticrénelage, sans avoir à lancer le programme : | |
| 76 | 64 | ||
| 77 | - | ||
| 78 | - | ||
| 79 | - | ||
| 80 | - | ||
| 65 | + |  | |
| 81 | 66 | ||
| 82 | 67 | ## Afficher sur un *Canvas* quelconque | |
| 83 | 68 | ||
| 84 | 69 | ### Affichage simple | |
| 85 | 70 | ||
| 86 | 71 | Pour afficher votre graphique, vous pouvez par exemple utiliser une *PaintBox*. Dans l'événement *OnPaint*, écrivez : | |
| 87 | 72 | ||
| 88 | 73 | ``` pascal | |
| 89 | 74 | uses BGRABitmap, TADrawerBGRA; | |
| 90 | 75 | ||
| 91 | 76 | procedure TForm1.PaintBox1Paint(Sender: TObject); | |
| 92 | 77 | var | |
| 93 | 78 | bmp: TBGRABitmap; | |
| 94 | 79 | id: IChartDrawer; | |
| 95 | 80 | rp: TChartRenderingParams; | |
| 96 | 81 | begin | |
| 97 | 82 | bmp := TBGRABitmap.Create(PaintBox1.Width, PaintBox1.Height); | |
| 98 | 83 | Chart1.DisableRedrawing; | |
| 99 | 84 | try | |
| 100 | 85 | id := TBGRABitmapDrawer.Create(bmp); | |
| 101 | 86 | id.DoGetFontOrientation := @CanvasGetFontOrientationFunc; | |
| 102 | 87 | rp := Chart1.RenderingParams; | |
| 103 | 88 | Chart1.Draw(id, Rect(0, 0, PaintBox1.Width, PaintBox1.Height)); | |
| 104 | 89 | Chart1.RenderingParams := rp; | |
| 105 | 90 | bmp.Draw(PaintBox1.Canvas, 0, 0); | |
| 106 | 91 | finally | |
| 107 | 92 | Chart1.EnableRedrawing; | |
| 108 | 93 | bmp.Free; | |
| 109 | 94 | end; | |
| 110 | 95 | end; | |
| 111 | 96 | ``` | |
| 112 | 97 | ||
| 113 | - | ||
| 114 | - | ||
| 115 | - | ||
| 116 | - | ||
| 98 | + |  | |
| 117 | 99 | ||
| 118 | 100 | Pour éviter le scintillement, pensez à utiliser *TBGRAVirtualScreen* de [[BGRAControls]]. | |
| 119 | 101 | ||
| 120 | 102 | ### Effet sur le texte | |
| 121 | 103 | ||
| 122 | 104 | Pour ajouter des effets sur le texte, vous aurez besoin d'au moins BGRABitmap v6.6 et de la dernière version SVN de Lazarus. Il y a une propriété *FontRenderer* pour chaque image *TBGRABitmap*, que vous pouvez définir. Vous ne devez pas libérer la mémoire de l'objet, car cela sera automatiquement fait par l'image. | |
| 123 | 105 | ||
| 124 | 106 | Les effets de texte sont fournis par l'unité *BGRATextFX* qui contient la classe *TBGRATextEffectFontRenderer*. Pour ajouter un contour doré aux lettres et une ombre, ajoutez les lignes suivantes : | |
| 125 | 107 | ||
| 126 | 108 | ``` pascal | |
| 127 | 109 | uses BGRATextFX, BGRAGradientScanner; | |
| 128 | 110 | ... | |
| 129 | 111 | var | |
| 130 | 112 | ... | |
| 131 | 113 | fontRenderer: TBGRATextEffectFontRenderer; | |
| 132 | 114 | gold: TBGRAGradientScanner; | |
| 133 | 115 | begin | |
| 134 | 116 | ... | |
| 135 | 117 | fontRenderer:= TBGRATextEffectFontRenderer.Create; | |
| 136 | 118 | fontRenderer.ShadowVisible := true; //ajoute une ombre | |
| 137 | 119 | fontRenderer.OutlineVisible := true; //ajoute un contour | |
| 138 | 120 | gold := TBGRAGradientScanner.Create(CSSGold,CSSGoldenrod,gtLinear,PointF(0,0),PointF(20,20),true,true); | |
| 139 | 121 | fontRenderer.OutlineTexture := gold; //définit la texture utilisée pour le contour | |
| 140 | 122 | fontRenderer.OuterOutlineOnly := true; //seulement le contour extérieur | |
| 141 | 123 | bmp.FontRenderer := fontRenderer; //transmet le FontRenderer à l'image, qui devient le propriétaire de cet objet | |
| 142 | 124 | ... | |
| 143 | 125 | gold.Free; | |
| 144 | 126 | end; | |
| 145 | 127 | ``` | |
| 146 | 128 | ||
| 147 | - | ||
| 148 | - | ||
| 149 | - | ||
| 150 | - | ||
| 129 | + |  | |
| 151 | 130 | ||
| 152 | 131 | --- | |
| 153 | 132 | *From the Free Pascal wiki, page "BGRABitmap tutorial TAChart/fr", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
