Rapid-Q Documentation par/by d-evolution (c)2004 - 2005 | Appendix A: QTBUTTON

# Composante QTBUTTON Component ....>

###### Version actuelle/Current version : 0.89
MàJ/Updated : 31/12/2004

QTButton est un contrôle hérité de QButton, d'où Q(True)Button, avec la possibilité de placer une enjolivure (un skin) en fond. Pour commencer, créez une resource "btn_BMP" contenant l'image bitmap qui sera l'enjolivure de tous les QTButtons. QTButton is an herited QButton with skinning capability. First create a bitmap resource named "btn_BMP", this will be the default skin for all QTButtons you defined. Example : $REsource btn_BMP As "_RES\Boutons.bmp" *(remplacer la partie en vert, le reste ne doit pas être modifié / modify the green part, it should point to an existing bitmap) Note IMPORTANTE sur l'utilisation de fichier BMP sous Win9x : L'utilisation de certains fichiers BMP peut geler l'écran. Ouvrir l'image dans Internet Explorer et l'enregistrer à nouveau va résoudre ce problème. Vous remarquerez alors que l'image n'a plus la même taille sur le disque dur. De son côté XP semble moins irrité par ce léger problème, néanmoin après plusieurs exécutions de l'application un message Resource insuffisante peut apparaître et peut aller jusqu'à geler le système complètement. RapidQ semble avoir un problème avec l'information supplémentaire contenue dans certaines images bitmap.
| Fonctionel / Passed |  | Corrigé / Fixed |  | Acceptable / Partialy working |  | Ne pas utiliser / Don't use
| Commencez par créer une image bitmap contenant les images, alignées horizontalement, représentant vos boutons. First create a bitmap picture containing all the pictures, in a horizontal row, that will represent your buttons. Ordre des images / images order
1 | 2 | 3 | 4
1. Normal 2. Désactivé / Disabled 3. Enfoncé / Pushed 4. Survollé / Hover (New!) QTButton supporte jusqu'à quatres effets, mais vous pouvez n'intégrer que le nombre qui vous plaît, tant qu'ils respectent l'ordre d'affichage. Ainsi vous pouvez n'avoir qu'un seul effet, deux effets, ainsi de suite. QTButton support up to four fx, but you can add only the number you need, has long they respect the display order. So you may have only one effect, two effects and so on.

Propriétés de QTButton Properties

Champs/ Field | Type | L/E R/W | Défaut/ Default | Supporte/ Support
Align | ENTIER / INTEGER | LE / RW | alNone | W
| Align détermine la façon dont le contrôle s'aligne à l'intérieur de son contrôle parent. Align determines how the control aligns within its parent control.
BMP | STRING | -- |  | W
| BMP est utilisé en interne par QTButton pour créer l'enjolivure. Vous risquez d'obtenir d'étrange résultat si vous l'ajoutez à votre code. Pour remédier à se problème .BMP doit être le premier champs déclaré ou essayez plutôt d'utiliser ICOBMP.BMP si vous désirez insèrer une petite image à côté du texte. BMP is currently used internally by QTButton for drawing skin and shouldn't be used in your code. Instead try using ICOBMP.BMP if you want to put a little picture near the caption. Use BMP to assign a new bitmap file, or to use BMP in a draw statement. Examples: DIM button AS QBUTTON button.BMP = "whatever.bmp" Ajouter une image en contournant l'enjolivure / Add picture w/o destroying the skin La bonne façon / The Good Way : DIM TButton1 AS QTBUTTON TButton1.BMP = "whatever.bmp" TButton1.Parent = Form TButton1.Left = 8 ... ou/or CREATE Button1 AS QTBUTTON BMP = "whatever.bmp" Left = 8 ... END CREATE ou/or CREATE Button1 AS QTBUTTON ICOBMP.BMP = "whatever.bmp" Left = 8 ... END CREATE ou/or Appeler Redraw juste après avoir ajoutée l'image / Call Redraw once new BMP value set Details: You can hold multiple images on a single bitmap, but they must be of the same size and next to each other in a horizontal row. The "first" bitmap appears when the button is up. The "second" bitmap appears when the button disabled. The "third" bitmap appears when the button is down (clicked). You have to tell Rapid-Q how many images are in your bitmap by assigning the number to NumBMPs.
BMPHandle | RESOURCE | -- |  | W
| Comme BMP, BMPHandle est utilisé en interne par QTButton pour créer l'enjolivure. Vous risquez d'obtenir d'étrange résultat si vous l'ajoutez à votre code. Pour remédier à se problème .BMPHandle doit être le premier champs déclaré ou essayez plutôt d'utiliser ICOBMP.BMPHandle si vous désirez insèrer une petite image à côté du texte. Like BMP, BMPHandle is currently used internally by QTButton for drawing skin and shouldn't be used in your code. Instead try using ICOBMP.BMPHandle if you want to put a little picture near the caption. Assign a BMP resource handle to appear on the selected button. Example: $RESOURCE game_BMP AS "game.bmp" DIM button AS QTBUTTON button.bmpHandle = game_BMP Ajouter une image en contournant l'enjolivure / Add picture w/o destroying the skin La bonne façon / The Good Way : 'Voir l'astuce dans BMP / 'See the trick in BMP Détails / Details: Voir BMP / See BMP
Cancel | ENTIER / INTEGER | LE / RW | False | W
| Si Cancel est True, l'événement OnClique attaché au button est éxécuté lorsque l'utilisteur appuie sur la touche Échappe. If Cancel is True, the button's OnClick event handler executes when the user presses the Escape key.
Caption | STRING | LE / RW |  | WXG
| Caption spécifie le texte qui apparaît sur le bouton. Pour souligner une lettre, inclure (&) devant la lettre. Caption specifies the text that appears on the button. To underline a character, include an ampersand (&) symbol before the character. Multi-Lignes / Multi-Lines Pour créer un effet multi-lignes, ajoutez chr$(10) entre les mots où vous voulez créer l'effet. To create a multi-lines button, add chr$(10) between the words where you want to create that effect. Example : .Caption = "Ceci est " +chr$(10) +_ "un bouton " +chr$(10) +_ "multi-lignes."
Color | ENTIER / INTEGER | LE / RW |  | X
Cursor | ENTIER / INTEGER | LE / RW | crDefault | W
Default | ENTIER / INTEGER | LE / RW | False | W
| Si Default est True, l'événement OnClique attaché au button est éxécuté lorsque l'utilisteur appuie sur la touche Entrée. If Default is True, the button's OnClick event handler executes when the user presses the Enter key.
Enabled | ENTIER / INTEGER | LE / RW | True | WXG
Font | QFONT | E / W |  | W
GroupIndex | ENTIER / INTEGER | LE / RW | 0 | WXG
| GroupIndex permet à plusieurs boutons de coopérer en groupe. Si GroupIndex est 0, le bouton réagis independemment de tous les autres boutons. GroupIndex allows buttons to work together as a group. If GroupIndex is 0, the button behaves independently of all other buttons.
Handle | ENTIER / INTEGER | E / R |  | W
Height | ENTIER / INTEGER | LE / RW |  | WXG
Hint | STRING | LE / RW |  | WXG
Kind | ENTIER / INTEGER | LE / RW | bkCustom | W
Layout | ENTIER / INTEGER | -- | blBMPLeft | W
| Layout détermine où sera affiché l'image bitmap sur le bouton. / Layout determines where the bitmap image appears on the button. 0 = blBMPLeft -- l'image apparaît à gauche du texte / image appears at the left side of the caption 1 = blBMPRight -- l'image apparaît à droite du texte / image appears at the right side of the caption 2 = blBMPTop -- l'image apparaît au dessus du texte / image appears above the caption 3 = blBMPBottom -- l'image apparaît sous le texte / image appears below the caption
Left | ENTIER / INTEGER | LE / RW | 0 | WXG
ModalResult | ENTIER / INTEGER | LE / RW | mrNone | W
NumBMPs | ENTIER / INTEGER | LE / RW |  | W
| NumBMPs a été redéfinie pour déterminer le nombre d'image inclut dans l'image du bouton (l'enjolivure). NumBMPs has been redefine to determine the number of images within the bitmap button (the skin).
NumICOBMPs | ENTIER / INTEGER | LE / RW |  | W
| NumICOBMPs détermine le nombre d'image inclut dans l'image icône qui sera placée juste à côté du texte du bouton. NumICOBMPs determines the number of images within the icon bitmap that will be draw near the button caption.
Parent | QFORM/QPANEL/QTABCONTROL | LE / W |  | WXG
PopupMenu | QPOPUPMENU | E / W |  | W
ShowHint | ENTIER / INTEGER | LE / RW | False | WXG
Spacing | ENTIER / INTEGER | -- | 4 | W
| Actuellement utilisé en interne et ne devrait pas être inclut dans votre code. Détermine l'espace, en pixels, séparant l'image du texte. Currently used internally and shouldn't be used in your code. Determines the separation, in pixels, between the image and the caption. Note: Doit être déclaré après BMP/BMPHandle et non avant.
TabOrder | ENTIER / INTEGER | LE / RW |  | W
Tag | ENTIER / INTEGER | LE / RW |  | WXG
Top | ENTIER / INTEGER | LE / RW | 0 | WXG
Width | ENTIER / INTEGER | LE / RW |  | WXG
Visible | ENTIER / INTEGER | LE / RW | True | WXG

Méthodes de QTButton Methods

Méthode/ Method | Type | Description | Paramètres/ Params | Supporte/ Support
StartDrag | SUB | Permet de déplacer la bouton Allows Button to be dragged | 0 | W
ReDraw | SUB | Redessine le bouton ReDraw button | 0 | W

Événements de QTButton Events

Événement/ Event | Type | Survient lorsque.../ Occurs when... | Paramètres/ Params | Supporte/ Support
OnClick | VOID | L'utilisateur a cliqué sur le bouton User clicked on the button | 0 | WXG
OnKeyDown | SUB (Key AS Word, Shift AS INTEGER) | Une touche est maintenue enfoncée Key held down | 2 | W
OnKeyPress | SUB (Key AS BYTE) | L'utilisateur appuie sur une touche User presses a key | 1 | W
OnKeyUp | SUB (Key AS Word, Shift AS INTEGER) | L'utilisateur relâche une touche User releases a key | 2 | W
OnMouseDown | SUB (Button%, X%, Y%, Shift%) | Le bouton de la souris est maintenu enfoncé Mouse button held down | 4 | WXG
OnMouseMove | SUB (X%, Y%, Shift%) | La souris se déplace Vous devrez ajouter .InheritOnMouseMove(x,y,shift) dans votre SUB Mouse moves You should add .InheritOnMouseMove(x,y,shift) in your SUB | 3 | WXG
OnMouseEnter | SUB (X%, Y%, Shift%, Sender As QTButton) | La souris entre sur le bouton Mouse moves over the button | 3 | WXG
OnMouseLeave | SUB (X%, Y%, Shift%, Sender As QTButton) | La souris quitte le bouton Mouse moves outside the button | 3 | WXG
OnMouseUp | SUB (Button%, X%, Y%, Shift%) | Le bouton de la souris est relâché Vous devrez utiliser .InheritOnMouseUp dans le SUB Mouse button is released You should use .InheritOnMouseUp in your SUB | 4 | WXG

Options avancés de QTButton Advanced Options
Options générals affectant tous les boutons.

btn_BMP $REsource btn_BMP As "_RES\bitmap.bmp" | Resource obligatoir par défaut pour tous les QTButton, contenant l'image du bouton, si elle n'est pas spécifié vous recevrez un messages d'erreur. Il est possible de créer d'autres resources contenant d'autres images de bouton, pour ce, voir l'example plus bas.
QTBtnOptimize = True / *False *(Défaut/Default) | Option visant à optimizer le nombre de fois où le btn sera redessiné lors du chargement de l'application et ainsi accélérer l'ouverture de celui-ci. Il doit être insèrer juste après $include "QTButtonXX.inc" pour que optimisation soit au maximum. Si les btns sont dessinés incorrectement désactivez-le en retirant la ligne QTBtnOptimize ou en ajoutant QTBtnOptimize = False et LeNomDuBtn.ReDraw au chargement pour corriger le problème. Pour évaluer l'optimisation ajoutez la ligne ShowMessage STR$(DrawCount) au chargement de votre fenêtre principale et comparez-le avec et sans l'optimisation. Note: Vous pouvez aussi utiliser la méthode ReDraw pour forcer le redessinement des btns incorrectement dessinés et ainsi garder une meilleure optimisation. |

Examples pour QTButton Examples (Copier et coller dans un nouveau projet/Copy and Paste in a new project) Example 1 : (Actualisez la page pour restaurer le texte/To restore text simply Refresh the page) '-- Un bouton glissant/A drag button $REsource btn_BMP As "Boutons.bmp"' -- Remplacez-le par une image que vous possèdez ' -- Replace it with a picture you already own '$REsource btn_BMP As "Boutons_Plat.bmp"' -- Utiliser celui-ci pour créer un bouton plat ' -- Use this picture instead to create a flat btn like $Include "QTButton89.inc"' -- Corrigez le chemin si nécessaire ' -- Fix the path as necessary DIM Form AS QForm DIM Button AS QTButton SUB MouseDown Button.StartDrag SHOWMESSAGE STR$(Button.Left)+", "+STR$(Button.Top) END SUB Button.Parent = Form Button.NumBMPs = 4' -- Corrigez le nombre d'image si nécessaire ' -- Fix the number of picture as necessary Button.Caption = "Drag Me" Button.OnMouseDown = MouseDown Form.ShowModal
Example 2 : (Actualisez la page pour restaurer le texte/To restore text simply Refresh the page) '-- Différentes possibilités/A more complete examples '- Démontre comment utiliser deux enjolivires et comment utiliser un groupe de btns '- Demonstrate how to use two skins at run-time and how to create/group btns $REsource btn_BMP As "Boutons.bmp"' -- Remplacez-le par une image que vous possèdez ' -- Replace it with a picture you already own $REsource btn_BMP1 As "Boutons_Plat.bmp"' -- Utiliser celui-ci pour créer un bouton plat ' -- Use this picture instead to create a flat btn like ' Image Smillie bitmap Dim ico_BMP As QBitmap With ico_BMP .Width = 18 .Height = 18 .Circle (1,1,17,17, -1, &HFFAADD) .Line(6,4,6,7,0) .Line(7,4,7,7,0) .Line(10,4,10,7,0) .Line(11,4,11,7,0) .Line(5,10,5,10,0) .Line(12,10,12,10,0) .Line(4,9,4,9,0) .Line(13,9,13,9,0) .Line(6,11,11,11,0) End With $Include "QTButton89.inc"' -- Corrigez le chemin si nécessaire ' -- Fix the path as necessary ' Événements souris / Mouse events Declare Sub Boutons_Click(Sender As QTButton) Declare Sub Boutons_MouseMove(X As Integer, Y As Integer, Shift As Integer, Sender As QButton) Declare Sub QBouton_MouseMove(X As Integer, Y As Integer, Shift As Integer, Sender As QButton) Declare Sub QBouton_MouseUp(btn As Integer, X As Integer, Y As Integer, Shift As Integer, Sender As QButton) Declare Sub Enjolivure_Click(Sender As QTButton) Create Form As QForm Caption = "Examples de QTButton Examples" ClientWidth = 329 ClientHeight = 260 Center Create TButton As QTButton' Using the form editor simply rename QButton with QTButton ' and add NumBMPs = NumberOfImagesInYourBMP and you've done Left = 8 Top = 8 NumBMPs =4 Caption = "Sélectionné" OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton2 As QTButton Left = 8 Top = 38 Caption = "Normal" NumBMPs =4 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton3 As QTButton Enabled = 0 Left = 8 Top = 68 NumBMPs =4 Caption = "Désactivé" OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton4 As QTButton Default = 1 Left = 8 Top = 98 Caption = "Défaut" NumBMPs =4 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton5 As QTButton Default = 1 Left = 8 Top = 128 Caption = "&Sous-ligné" NumBMPs =4 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove Hint = "Appuyez simultanément ALT+S pour voir ce qui arrivera" ShowHint = 1 End Create Create TButton6 As QTButton Left = 98 Top = 8 Height = 60 NumBMPs =4 Caption = "Multi-Lignes" +chr$(10) +"Retaillé" +chr$(10) +"Multi-Lines" OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove Hint = "Pour créer un effet multi-lignes ajoutez chr$(10) " +chr$(10) +_ "entre les mots où vous voulez créer l'effet." ShowHint = 1 End Create Create TButton7 As QTButton Left = 98 Top = 98 Height = 20 Width = 20 Caption = "..." NumBMPs =4 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton8 As QTButton Left = 128 Top = 98 Height = 20 Width = 20 NumBMPs =4 Hint = "Vide" ShowHint = 1 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton9 As QTButton BMP = ico_BMP.BMP Spacing = 1 Left = 158 Top = 98 Height = 20 Width = 20 NumBMPs =4 Hint = "Avec uniquement une image" ShowHint = 1 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton10 As QTButton kind = 2 Left = 188 Top = 8 NumBMPs =4 Caption = "Fermer" Hint = "Un QTButton avec Kind = 1" ShowHint = 1 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton11 As QButton kind = 2 Left = 188 Top = 38 Caption = "Fermer" Hint = "Un bouton classic avec Kind = 1" ShowHint = 1 OnMouseMove = QBouton_MouseMove OnMouseUp = QBouton_MouseUp 'OnMouseDown = QBouton_MouseDown OnClick = Boutons_Click End Create Create TButton12 As QButton Left = 188 Top = 68 Caption = "&Classique" Hint = "Un bouton classic" ShowHint = 1 OnMouseMove = QBouton_MouseMove OnMouseUp = QBouton_MouseUp 'OnMouseDown = QBouton_MouseDown OnClick = Boutons_Click End Create Create TButton13 As QTButton Left = 188 Top = 98 BMP = ico_BMP.BMP 'BMPHandle = ico_BMP NumBMPs = 4 Caption = "Bitmap" Hint = "Un bouton avec une image" ShowHint = 1 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton14 As QTButton Layout = 2 Left = 188 Top = 128 BMP = ico_BMP.BMP 'BMPHandle = ico_BMP Height = 40 Spacing = 3 NumBMPs = 4 Caption = "Au dessus" Hint = "Un bouton avec une image placée au dessus du texte" ShowHint = 1 OnClick = Boutons_Click OnMouseMove = Boutons_MouseMove End Create Create TButton15 As QTButton Layout = 2 Left = 302 Top = 8 Height = 20 Width = 20 Spacing = 3 NumBMPs = 4 Font.Bold = 1 Caption = ">" Hint = "Alterner l'enjolivure" ShowHint = 1 OnClick = Enjolivure_Click OnMouseMove = Boutons_MouseMove End Create CREATE TButton16 AS QTButton Left = 288 Top = 48 Width = 23 Height = 22 NumBMPs = 4 GroupIndex = 1 END CREATE CREATE TButton17 AS QTButton Left = 288 Top = 72 Width = 23 Height = 22 NumBMPs = 4 GroupIndex = 1 END CREATE CREATE TButton18 AS QTButton Left = 288 Top = 96 Width = 23 Height = 22 NumBMPs = 4 GroupIndex = 1 END CREATE CREATE TButton19 AS QTButton Left = 288 Top = 128 Width = 23 Height = 22 NumBMPs = 4 GroupIndex = 2 END CREATE CREATE TButton20 AS QTButton Left = 288 Top = 152 Width = 23 Height = 22 NumBMPs = 4 GroupIndex = 2 END CREATE Create Image As QImage AutoSize = 1 Top = 128 Left = 98 BMP = QTBtnBMP.BMP End Create Create Label1 As QLabel Top = 158 Left = 8 Caption = "Image du bouton / Button bitmap :" End Create Create Image1 As QImage AutoSize = 1 Top = 174 Left = 8 BMP = QTBtnBMP.BMP Hint = "Cette image démontrer comment je mis prends pour faire en sorte " +chr$(10) +_ "que la propriété BMP devienne une enjolivure..." ShowHint = 1 End Create End Create Sub Boutons_Click ShowMessage "Vous avez cliqué sur le bouton : " +sender.caption +chr$(10)+_ "You've clicked on button : " +sender.caption Image1.BMP = Sender.BMP End Sub Sub Boutons_MouseMove ' *... ' ' Now that we've insert MouseMove event inside our program the internal event has been ' canceled, to combine the new MouseMove with the internal one, simply add these lines ; ' ObjectName.InheritOnMouseMove(x,y,shift) ' But what happen when more than one Object use the same SUB event, we need to determine ' which Object is calling the event, since if we only add ; ' Object1.InheritOnMouseMove(x,y,shift) ' Object2.InheritOnMouseMove(x,y,shift) ' MouseMove event from Object2 will also fireup when Moving over Object1. To resolve this ' we use conditional statements; if, elseif, select case, .... ' Déclanche l'événement interne MouseMove / Fireup internal mousemove event for determined object SELECT CASE Sender.Handle' On utilise l'Handle puisque le Texte ne sera pas retourner ' si on a créé un btn sans texte ' We use Handle since Caption will not be returned when using ' btns without caption Case TButton.Handle: TButton.InheritOnMouseMove(x,y,shift) Case TButton2.Handle: TButton2.InheritOnMouseMove(x,y,shift) Case TButton3.Handle: TButton3.InheritOnMouseMove(x,y,shift) Case TButton4.Handle: TButton4.InheritOnMouseMove(x,y,shift) Case TButton5.Handle: TButton5.InheritOnMouseMove(x,y,shift) Case TButton6.Handle: TButton6.InheritOnMouseMove(x,y,shift) Case TButton7.Handle: TButton7.InheritOnMouseMove(x,y,shift) Case TButton8.Handle: TButton8.InheritOnMouseMove(x,y,shift) Case TButton9.Handle: TButton9.InheritOnMouseMove(x,y,shift) Case TButton10.Handle: TButton10.InheritOnMouseMove(x,y,shift) Case TButton13.Handle: TButton13.InheritOnMouseMove(x,y,shift) Case TButton14.Handle: TButton14.InheritOnMouseMove(x,y,shift) Case TButton15.Handle: TButton15.InheritOnMouseMove(x,y,shift) END SELECT ' On poursuit avec notre événement / Now continuing with our event Image1.BMP = Sender.BMP End Sub Sub QBouton_MouseMove If (X < 0) Or (Y < 0) Or (X > sender.Width) _ Or (Y > Sender.Height) Then ' le pseudo-evénement MOUSELEAVE / the MOUSELEAVE pseudo-event ReleaseCapture_QTBtn ' on retourne le caption à la normal / revert the caption to normal Sender.Font.Bold = 0 Sender.Font.Color = -2147483630 ElseIf GetCapture_QTBtn() <> Sender.Handle Then ' le pseudo-evénement MOUSEENTER / the MOUSEENTER pseudo-event SetCapture_QTBtn Sender.Handle ' on met le texte en gras / make the caption bold Sender.Font.Bold = 1 Sender.Font.Color = -2147483635 Image1.BMP = Sender.BMP End If End Sub Sub QBouton_MouseUp ReleaseCapture_QTBtn Sender.Font.Bold = 0 Sender.Font.Color = -2147483630 End Sub ' Changer d'enjolivure / Change skin on the fly Sub Enjolivure_Click(Sender As QTButton) Static curSkin As Integer ' Détermine laquelle est appliquée / Determine wich one are applied If curSkin < 1 Then' 2nd QTBtnBMP.BMPHandle = btn_BMP1 curSkin = 1 Else' Original QTBtnBMP.BMPHandle = btn_BMP curSkin = 0 End If ' Pour complèter la tâche on demande à chaque btn de se redessiner / ' To complete we ask each btn to self-redraw TButton.ReDraw TButton2.ReDraw TButton3.ReDraw TButton4.ReDraw TButton5.ReDraw TButton6.ReDraw TButton7.ReDraw TButton8.ReDraw TButton9.ReDraw TButton10.ReDraw TButton13.ReDraw TButton14.ReDraw TButton15.ReDraw End Sub Form.ShowModal

Prev Component | Contents | Next Component