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.
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.
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;
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)
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;
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.