47 - VCL - controles Standard: TCheckBox

El control TCheckBox permite implementar un cuadro de selección (básicamente un botón de dos estados: seleccionado o no seleccionado)

La propiedad Checked almacena true si la opción está seleccionada y false en caso contrario.

Problema 1:

Confeccionar un programa que muestre 3 objetos de la clase TCheckBox con etiquetas de tres idiomas. Cuando se presiona un botón mostrar en la barra de títulos del formulario todos los CheckBox seleccionados hasta el momento.

TCheckBox VCL Delphi

Proyecto157

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := '';
  if CheckBox1.Checked then
    Caption := Caption + '(Ingles)';
  if CheckBox2.Checked then
    Caption := Caption + '(Frances)';
  if CheckBox3.Checked then
    Caption := Caption + '(Aleman)';
end;

end.

En el evento OnClick del botón primero borramos el contenido del título del formulario:

  Caption := '';

Seguidamente mediante estructuras if verificamos el estado de cada CheckBox, en caso de estar seleccionado concatenamos al título del formulario el valor que representa ese CheckBox:

  if CheckBox1.Checked then
    Caption := Caption + '(Ingles)';
  if CheckBox2.Checked then
    Caption := Caption + '(Frances)';
  if CheckBox3.Checked then
    Caption := Caption + '(Aleman)';

Problema 2:

Disponer un control TLabel que muestre el siguiente mensaje: "¿Está de acuerdo con las normas del servicio?", luego un TCheckBox y finalmente un objeto de tipo TButton desactivo (propiedad Enabled con false). Cuando se tilde el CheckBox debemos activar el botón (para esto debemos responder al evento OnClick del objeto CheckBox)

TCheckBox VCL Delphi

Proyecto158

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    CheckBox1: TCheckBox;
    Button1: TButton;
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
    Button1.Enabled := true
  else
    Button1.Enabled := false;
end;

end.

Cuando se presiona el CheckBox1 se ejecuta el método CheckBox1Click donde controlamos si el CheckBox1 está seleccionado o no:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
    Button1.Enabled := true
  else
    Button1.Enabled := false;
end;

Si se encuentra seleccionado activamosel Button1, en caso contrario lo desactivamos.

Problema propuesto

  • Disponer 5 objetos de la clase TCheckBox con nombres de lenguajes de programación. Cuando se presione un botón mostrar en un objeto de la clase TLabel la cantidad de CheckBox seleccionados.
    TCheckBox VCL Delphi
Solución
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  cantidad: Integer;
begin
  cantidad := 0;
  if CheckBox1.Checked then
    cantidad := cantidad + 1;
  if CheckBox2.Checked then
    cantidad := cantidad + 1;
  if CheckBox3.Checked then
    cantidad := cantidad + 1;
  if CheckBox4.Checked then
    cantidad := cantidad + 1;
  if CheckBox5.Checked then
    cantidad := cantidad + 1;
  Label1.Caption := IntToStr(cantidad);
end;

end.