49 - VCL - controles Standard: TComboBox

El control TComboBox permite seleccionar un string de una lista.

Para inicializar los string que contendrá el TComboBox en tiempo de diseño del programa debemos acceder a la propiedad Items y en el dialogo que aparece cargar uno por línea.

Podemos asignar un valor a partir de 0 a la propiedad ItemIndex indicando cual elemento debe aparecer seleccionado por defecto.

Problema 1:

Confeccionar un programa que muestre en un control de tipo TComboBox los string 'rojo', 'verde' y 'azul'.
Cuando se presiona un botón pintar el fondo del formulario del color seleccionado.

TComoboBox VCL Delphi

Proyecto163

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)
    ComboBox1: TComboBox;
    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
  if ComboBox1.ItemIndex = 0 then
    Color := ClRed;
  if ComboBox1.ItemIndex = 1 then
    Color := ClGreen;
  if ComboBox1.ItemIndex = 2 then
    Color := ClBlue;
end;

end.

Consultamos la propiedad ItemIndex y según el valor pintamos el color de fondo del formulario:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0 then
    Color := ClRed;
  if ComboBox1.ItemIndex = 1 then
    Color := ClGreen;
  if ComboBox1.ItemIndex = 2 then
    Color := ClBlue;
end;

Un TComboBox permite ingresar cualquier cadena por teclado. Si necesitamos que solo se pueda seleccionar alguno de los elementos del TComboBox debemos iniciar la propiedad Style con el valor csDropDownList.

Otra forma de resolverlo es analizar el string seleccionado actualmente accediendo a la propiedad Text:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ComboBox1.Text = 'rojo' then
    Color := ClRed;
  if ComboBox1.Text = 'verde' then
    Color := ClGreen;
  if ComboBox1.Text = 'azul' then
    Color := ClBlue;
end;

Problema 2:

Disponer tres TComboBox con los valores de 0 a 255. Al presionar un botón fijar el color del formulario creando en dicho momento el color que surja de combinar los tres valores seleccionados en los TComboBox
Cargar los item a cada ComboBox recién cuando se inicie el programa (definir esta actividad en el evento OnCreate del formulario)

TComoboBox VCL Delphi

Proyecto164

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)
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
var
  f: Integer;
begin
  for f:=0 to 255 do
  begin
    ComboBox1.Items.Add(IntToStr(f));
    ComboBox2.Items.Add(IntToStr(f));
    ComboBox3.Items.Add(IntToStr(f));
  end;
  ComboBox1.ItemIndex := 0;
  ComboBox2.ItemIndex := 0;
  ComboBox3.ItemIndex := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Color := Rgb(StrToInt(ComboBox1.Text),
               StrToInt(ComboBox2.Text),
               StrToInt(ComboBox3.Text));
end;

end.

Cuando se crea el objeto Form1 lo primero que se ejecuta es el método FormCreate donde cargamos los 256 números en cada TComboBox:

procedure TForm1.FormCreate(Sender: TObject);
var
  f: Integer;
begin
  for f:=0 to 255 do
  begin
    ComboBox1.Items.Add(IntToStr(f));
    ComboBox2.Items.Add(IntToStr(f));
    ComboBox3.Items.Add(IntToStr(f));
  end;

Además en este mismo método procedemos a dejar seleccionado el primer item de cada ComboBox:

  ComboBox1.ItemIndex := 0;
  ComboBox2.ItemIndex := 0;
  ComboBox3.ItemIndex := 0;
end;

Cuando se presiona el botón "Pintar" procedemos a llamar a la función Rgb que nos genera el valor de un determinado color según la cantidad de rojo, verde y azul:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Color := Rgb(StrToInt(ComboBox1.Text),
               StrToInt(ComboBox2.Text),
               StrToInt(ComboBox3.Text));
end;

Problema propuesto

  • Solicitar el ingreso del nombre de una persona en un control TEdit y seleccionar de un control TComboBox un país. Al presionar un botón mostrar en la barra del título del formulario el nombre ingresado y el país seleccionado.
    TComoboBox 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)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    ComboBox1: TComboBox;
    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 := 'Nombre: ' + Edit1.Text + '  País seleccionado: ' + ComboBox1.Text;
end;

end.