TButton/es: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | Un **TButton**  es un componente que provee un control básico de presionar un botón. Está disponible en la [[Standard tab/es]] de la [[Component Palette]]. | |
| 2 | 2 | ||
| 3 | 3 | Un TButton es un de los controles más básicos en un [[TForm|Form]]. Haciendo click con el ratón sobre él (o mediante la tecla \[tab\] sobre el botón y presionándole mediante la tecla Entrar/Intro/Enter), se activa una acción. Ese click se llama evento. Para esto se necesita un [[Event order|event handler]] que se llama después del salto. | |
| 4 | 4 | ||
| 5 | 5 | Se puede añadir un botón en un formulario haciendo click en TButton (un botón cuadrado con un "OK" en el medio) en la paleta de componentes Standard y ubicarlo haciendo click en el formulario. | |
| 6 | 6 | ||
| 7 | 7 | Para acceder fácilmente al manejador de evento para el click del ratón basta con hacer doble click sobre el botón que se creó en el formulario (o en el inspector de objetos, seleccionar el evento "OnClick" del botón). El manejador de evento para un *Button1* en un formulario *Form1* tendrá este aspecto: | |
| 8 | 8 | ||
| 9 | 9 | ``` pascal | |
| 10 | 10 | procedure TForm1.Button1Click(Sender: TObject); | |
| 11 | 11 | begin | |
| 12 | 12 | ||
| 13 | 13 | end; | |
| 14 | 14 | ``` | |
| 15 | 15 | ||
| 16 | 16 | Entre las sentencias **begin** y **end** se puede escribir el código que será ejecutado cuando **Button1** es presionado. | |
| 17 | 17 | ||
| 18 | 18 | Casi todos los tutoriales de principiantes disponibles utilizan TButtons como una entrada fácil en la [[Glossary/es|Programación Orientada a Objetos]] con Lazarus. Los siguientes tutoriales son adecuados para que los principiantes entiendan el uso de los botones: | |
| 19 | 19 | ||
| 20 | 20 | - [[Form Tutorial|The first GUI application]] for absolute beginners. | |
| 21 | 21 | - [[Lazarus Tutorial/es|Tu primer programa con Lazarus]] tutorial para Lazarus. | |
| 22 | 22 | - [[Object Oriented Programming with Free Pascal and Lazarus/es|Ejemplo de programación]] Programación Orientada a Objetos con FreePascal y Lazarus. | |
| 23 | 23 | ||
| 24 | 24 | #### Un ejemplo sencillo | |
| 25 | 25 | ||
| 26 | 26 | - Crea una nueva aplicación y suelta un TButton en el formulario (Form). | |
| 27 | 27 | - Haz doble click sobre ese *Button1* en el formulario (el método predeterminado para el evento: *OnClick* se crea para *Button1*y se abre el editor de código fuente). | |
| 28 | 28 | - Agrega el siguiente código en el procedimiento: | |
| 29 | 29 | ||
| 30 | 30 | ``` pascal | |
| 31 | 31 | procedure TForm1.Button1Click(Sender: TObject); | |
| 32 | 32 | begin | |
| 33 | 33 | ShowMessage('Lazarus me alegró el día'); //Se muestra un mensaje con ese contenido (texto)... | |
| 34 | 34 | end; | |
| 35 | 35 | ``` | |
| 36 | 36 | ||
| 37 | 37 | - Corre o ejecuta tu programa (con la tecla \<F9\> o presionando el botón verde de *Play*). | |
| 38 | 38 | ||
| 39 | 39 | ## Generar un botón dinámicamente | |
| 40 | 40 | ||
| 41 | 41 | A veces, en lugar de crear botones (u otros componentes) con el diseñador de formularios de Lazarus, es más fácil crearlos dinámicamente en tiempo de ejecución. Este enfoque es útil especialmente si tiene continuamente botones repetidos en un formulario (aunque también se pueden copiar y pegar en el formulario en tiempo de diseño). | |
| 42 | 42 | ||
| 43 | 43 | Esto se puede lograr como en el siguiente ejemplo (una calculadora rápida): | |
| 44 | 44 | ||
| 45 | 45 | - Crea una nueva [[Form Tutorial|GUI application]] en **blanco** con el formulario *Form1* y agrega **StdCtrls** a la [[Uses/es|Cláusula uses]] (ahí es donde está TButton). | |
| 46 | 46 | - Cambia el caption *Form1* a *Suma Rápida*. | |
| 47 | 47 | - Crea el método (procedure) para el evento OnCreate del Form1 (en el Inspector de Objetos debes ir hasta el evento *OnCreate* y hacer click en el botón \[...\]). | |
| 48 | 48 | - Agrega el siguiente código: | |
| 49 | 49 | ||
| 50 | 50 | ``` pascal | |
| 51 | 51 | procedure TForm1.FormCreate(Sender: TObject); | |
| 52 | 52 | var | |
| 53 | 53 | i: Integer; | |
| 54 | 54 | aButton: TButton; | |
| 55 | 55 | begin | |
| 56 | 56 | for i:=0 to 9 do begin //crea 10 botones | |
| 57 | 57 | aButton:=TButton.Create(Self); //Crea botón, el dueño (Owner) es Form1, donde el botón se libera luego | |
| 58 | 58 | aButton.Parent:=Self; //determina donde se mostrará | |
| 59 | 59 | aButton.Width:=aButton.Height; //El ancho debe corresponder a la altura de los botones | |
| 60 | 60 | aButton.Left:=i*aButton.Width; //Distancia desde la izquierda | |
| 61 | 61 | aButton.Caption:=IntToStr(i); //Captions (leyendas) de los botones (0.9) | |
| 62 | 62 | aButton.OnClick:=@aButtonClick; //El controlador de eventos para el botón -> se creará aún | |
| 63 | 63 | end; | |
| 64 | 64 | Self.Height:=aButton.Height; //Altura del formulario debe corresponder a la altura de los botones | |
| 65 | 65 | Self.Width:=aButton.Width*10; //Ancho del formulario para que coincida con el ancho de todos los botones | |
| 66 | 66 | end; | |
| 67 | 67 | ``` | |
| 68 | 68 | ||
| 69 | 69 | - Ahora debes crear el controlador de eventos para los clics del botón, | |
| 70 | 70 | - en el editor del código, ingresando su clase (class) *TForm1* en la sección **`private`**. | |
| 71 | 71 | - Agrega **`procedure aButtonClick(Sender: TObject);`** y presiona las teclas \[CTRL\] + \[Shift\] + \[c\] (La finalización del código se activa y crea el procedimiento `TForm1.aButtonClick(Sender: TObject);`. | |
| 72 | 72 | - Pega el siguiente código: | |
| 73 | 73 | ||
| 74 | 74 | ``` pascal | |
| 75 | 75 | procedure TForm1.aButtonClick(Sender: TObject); | |
| 76 | 76 | const | |
| 77 | 77 | Cnt: Integer = 0; | |
| 78 | 78 | var | |
| 79 | 79 | i: Integer; | |
| 80 | 80 | begin | |
| 81 | 81 | if (Sender is TButton) and //Llamado el controlador de eventos de un botón? | |
| 82 | 82 | TryStrToInt(TButton(Sender).Caption, i) //entonces intente convertir la etiqueta (Texto de la leyenda/Caption) en un número entero. | |
| 83 | 83 | then begin | |
| 84 | 84 | Cnt:=Cnt + i; //El contador de la suma se incrementa por el número de entrechende ¿? | |
| 85 | 85 | Caption:='Suma rápida: '+IntToStr(Cnt); //Escriba el resultado en el título del formulario | |
| 86 | 86 | end; | |
| 87 | 87 | end; | |
| 88 | 88 | ``` | |
| 89 | 89 | ||
| 90 | 90 | - Ejecuta tu aplicación. | |
| 91 | 91 | - Debería verse así: | |
| 92 | 92 | ||
| 93 | - | ||
| 94 | - | ||
| 95 | - | ||
| 96 | - | ||
| 93 | + |  | |
| 97 | 94 | ||
| 98 | 95 | > **Note:** Puedes asignar todos los manejadores de eventos imaginables a tus botones, siempre y cuando estén en el formulario **`procedure <class>.<name of procedure>(Sender: TObject);`**. Por lo tanto, puedes utilizar uno de otra clase!! | |
| 99 | 96 | ||
| 100 | 97 | ## Lea también | |
| 101 | 98 | ||
| 102 | 99 | - [[doc:lcl/stdctrls/tbutton.html|TButton doc]] | |
| 103 | 100 | - [[TBitBtn/es|TBitBtn]] | |
| 104 | 101 | - [[TSpeedButton]] | |
| 105 | 102 | - [[TColorButton]] | |
| 106 | 103 | - [[15-puzzle]] (Game) | |
| 107 | 104 | ||
| 108 | 105 | --- | |
| 109 | 106 | *From the Free Pascal wiki, page "TButton/es", as it stood on 2020-01-31 after a change by GAN, 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).* |
