Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Insertar valores en Combobox (https://www.clubdelphi.com/foros/showthread.php?t=73270)

coej 12-04-2011 12:10:27

Insertar valores en Combobox
 
Hola de nuevo, por aquí sigo con la biblia de delphi, ahora trabajando con combobox, me gustaría insertar valores para que aparecieran en el combobox, pero al insertar este código, me da error...
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
   begin
  Form1.Combobox1.items.add('ITEM');

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if key = Chr(13) then
with Combobox1 do
if (Text <> '') and (Items.Indexof (Text) < 0) then
Items.Add (Text);
end;


end.
El error es Statement expecte but procedure found, en la línea de procedure, he probado a quitar la procedure, y me da error , violación de escritura, es como si en tiempo de ejecución no pudiera insertar un valor en el combobox..., gracias por las respuestas y comprensión de la tontería que será seguramente, un saludo...

nemesio 12-04-2011 14:26:51

Saludos.

El error te lo da porque no estas colocando la inserción en un procedimiento o función, sino que abres un begin, escribes el código y el begin nunca tiene el end que le corresponde. Copia el código en un Botón para que hagas la prueba y verás que si te funciona.

Caro 12-04-2011 14:50:24

Hola coej, tienes que quitar las dos líneas que estan en rojo para que funcione tu codigo, la explicación ya te la ha dado nemesio.

Código:

......................................
implementation
{$R *.dfm}
  begin
  Form1.Combobox1.items.add('ITEM');


procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if key = Chr(13) then
.........................

Saluditos

coej 12-04-2011 15:29:46

Solo se puede hacer la inserción si introduzco ese código en una procedure o función???, si no no puedo conseguir que funcione???, podríais ponerme un ejemplo modificado de mí codigo , en el que se introducen un valor en el combobox'??, gracias...

nemesio 12-04-2011 16:36:31

Código Delphi [-]

unit Unit1;
interface
uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;
type  TForm1 = class(TForm)
   ComboBox1: TComboBox;
   procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
   private    { Private declarations }  
   public    { Public declarations }  
end;
var  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
   Form1.Combobox1.items.add('ITEM');
end;
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = Chr(13) then
  with Combobox1 doif (Text <> '') and (Items.Indexof (Text) < 0) then
     Items.Add (Text);
end;

end.

Ahí está un ejemplo de como lo harás en el evento onClick de un Button. Tambien puedes hacerlo en cualquier otro evento como el OnShow del formulario o como mejor te convenga dependiendo de la necesidad.

Saludos

coej 12-04-2011 19:08:00

Gracias Nemesio, eso no lo puedo hacer "a pelo", es decir siempre lo tengo que asociar a un evento o componente del formulario, si lo quisiera hacer simplemente insertarlo sin asociarlo a algún evento o componente???, es decir, simplemente quiero insertar 2 items a pelo en línea de codigo sin asociar a nada...?????

Caro 12-04-2011 20:28:48

Cita:

Empezado por coej (Mensaje 396752)
.............. si lo quisiera hacer simplemente insertarlo sin asociarlo a algún evento o componente???, es decir, simplemente quiero insertar 2 items a pelo en línea de codigo sin asociar a nada...?????

Hola de nuevo coej, puedes utilizar el evento OnCreate o OnShow de tu formulario:

Código Delphi [-]
unit Unit1;

interface

uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;
type  TForm1 = class(TForm)
   ComboBox1: TComboBox;
   procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
   private    { Private declarations }
   public    { Public declarations }
end;

var  Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = Chr(13) then
  with Combobox1 do
   if (Text <> '') and (Items.Indexof (Text) < 0) then
     Items.Add (Text);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 Combobox1.items.add('ITEM 1');
 Combobox1.items.add('ITEM 2');
end;

end.

Saluditos

beginner01 12-04-2011 21:10:09

Cita:

Empezado por coej (Mensaje 396752)
Gracias Nemesio, eso no lo puedo hacer "a pelo", es decir siempre lo tengo que asociar a un evento o componente del formulario, si lo quisiera hacer simplemente insertarlo sin asociarlo a algún evento o componente???, es decir, simplemente quiero insertar 2 items a pelo en línea de codigo sin asociar a nada...?????


saludos.

Código Delphi [-]
 
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = Chr(13) then
  with Combobox1 do
   if (Text <> '') and (Items.Indexof (Text) < 0) then
     Items.Add (Text);
end;

si dejas solo esta parte fijate que si vas agregando texto y presionando la tecla enter el combobox se ira llenendo con el texto correspondiente.

coej 12-04-2011 21:57:19

Gracias a ambos, por lo que veo hay que meter "todo", en procedures o eventos-componentes , etc, no se puede hacer a "pelo", vengo de otros lenguajes de programación y por lo que estoy comprobando en distinto...

Si, esa parte de código la seguía de la biblia, y te inserta lo que escribes, pero cuando sales del programa y vuelves a entrar , no lo almacena...

Mí duda va más después de ver vuestras respuestas, en que un unit , no puedo poner la línea en ningún sitio como yo quiero(solo la línea...de código que subrayo(es decir en el unit no hay ninguna línea de código fuera de procedures, funciones si las hay , type, ect,???????...
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

  Form1.Combobox1.items.add('ITEM');

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if key = Chr(13) then
with Combobox1 do
if (Text <> '') and (Items.Indexof (Text) < 0) then
Items.Add (Text);
end;

   
end.

Y no sé si puedo hacerlo en la parte de código de project , en el cual se inicializan la aplicación...
Creo que tengo que dar un repaso a la estructura básica de un programa en delphi para aclararme yo...


Pero una de las cosas que quiero intentar, es que se inicialice el combobox, por ejemplo con dos items (rojo y azul), al abrir el programa, y después , si inserto alguno más que se guarde para la próxima vez que se abra(quizás esto último sería ya asociado a otros contenedores)...

Muchas gracias por vuestras respuestas y paciencia, un saludo de un novatazo..jeje

oscarac 12-04-2011 22:01:50

puse lo que deseas se puede hacer de muchas formas

se puede utilizar una tabla, una base de datos, un archivo texto, donde se vaya almacenando los Items que quieras agregar (debes tener en cuenta que tambien esta la posibilidad de eliminar los Items que ya no desees, pero eso depende de lo que quieras hacer)

solo por curiosidad... de que lenguaje provienes?

coej 12-04-2011 22:07:02

Si eso imagino que se podrá hacer, cuando llegue a ello , ya preguntaré seguro, ahora solo estoy viendo cosas muy básicas siguiendo la biblia de delphi 7 de marco cantu.

java, oracle 10g, no tiene nada parecido a las units, y el project, donde se inicializa la aplicación, al menos no igual...

oscarac 12-04-2011 22:09:33

no hay mejor forma de aprender que metiendote a programar y haciendo preguntas.....

no se donde lo lei pero lo cito.... No hay preguntas tontas... es tonto el que no pregunta

solo ten en cuenta la guia de estilo

coej 12-04-2011 22:13:19

No te preocupes, que soy preguntón por naturaleza, y os vais a hartar de verme por aquí, y lo del las guías de estilo, ya me tiraron hace 2 días de las orejas por ello...

Pues eso, la duda que me sigue aún rondando es si no se puede escribir en las units líneas de código fuera de procedures, types, var etc, y donde se escribiría???
O si quiero iniciar un combobox al abrir el programa valdría con la solución del oncreate , onshow, pero si lo quiero hacer fuera de procedure se podría , en el unit, o debería ser al inicializar en project???

Edito , acabo de probar el código con la solución formshow, y me abre el programa, sin los items añadidos?????

oscarac 12-04-2011 22:24:44

yo acabo de hacer la prueba y si me salen los items

oscarac 12-04-2011 22:30:37

otra forma es que desde el mismo project (program) hagas esto
Código Delphi [-]
program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Form1.cmb1.Items.Add('Item 1');
  Form1.cmb1.Items.Add('Item 2');
  Form1.cmb1.Items.Add('Item 3');
  Form1.cmb1.Items.Add('Item 4');
  Form1.cmb1.Items.Add('Item 5');
  Form1.cmb1.Items.Add('Item 6');
  Application.Run;
end.

para un ejemplo sencillo funciona bien... pero imaginate en una aplicacion... tendrias que cargar todos los formularios y pues no es muy aconsejable

coej 12-04-2011 23:37:56

A eso me refería desde el principio, voila...

No entendía donde poner ese código , y porque no podía ponerlo en el código de unit, al final imaginaba que era ahí...

coej 12-04-2011 23:43:44

Poniendo este codigo en unit no me salen los items...
Código Delphi [-]
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;


    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if key = Chr(13) then
with Combobox1 do
if (Text <> '') and (Items.Indexof (Text) < 0) then
Items.Add (Text);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
 Combobox1.items.add('ITEM 1');
 Combobox1.items.add('ITEM 2');
end;


end.

Poniendo esto en Project , si...
Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
   Form1.Combobox1.Items.Add('Item 1');
  Form1.Combobox1.Items.Add('Item 2');
    Form1.Combobox1.Items.Add('Item 3');
  Application.Run;
end.

Ni idea de porque???

oscarac 12-04-2011 23:44:34

ok
si necesitas algo mas.. solo pregunta

coej 12-04-2011 23:48:27

Cita:

Empezado por oscarac (Mensaje 396804)
ok
si necesitas algo mas.. solo pregunta

Seguro que con el formshow te funciona????
Puedes copiarme el código del unit con el que te funciona o lo has pegado del hilo???, es que no se porque a mí no me muestra los items con la procedure formshow???, gracias

oscarac 13-04-2011 00:02:03

Claro aqui esta
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    cmb1: TComboBox;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
  cmb1.Items.Add('Item 1');
  cmb1.Items.Add('Item 2');
  cmb1.Items.Add('Item 3');
  cmb1.Items.Add('Item 4');
  cmb1.Items.Add('Item 5');
  cmb1.Items.Add('Item 6');
  cmb1.ItemIndex := 1;
end;
end.

al final veras una linea cmb1.itemindex := 1;

eso hace que el combo empiece con el ITEM2

en Delphi el primero valor para array o listas es cero


La franja horaria es GMT +2. Ahora son las 23:19:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi