Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2011
mcarazas mcarazas is offline
Miembro
 
Registrado: may 2006
Posts: 40
Poder: 0
mcarazas Va por buen camino
Ayuda con COMBOBOX

Hola Amigos del Foro:

Estoy desarrollando una aplicación para una distribuidora en cual implemento un lector de código de barras, para leer el código utilizo un combobox mi pregunta es cómo puedo hacer para que el combobox salte inmediatamente a otro objeto cuando encuentre el producto.
En que evento tengo que trabajar, agradeceré cualquier ayuda.
Responder Con Cita
  #2  
Antiguo 14-11-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me imagino que tendras que darle una condicion, si esta se cumple entonces hace lo que necesites.
Puedes usar el evento OnChange o el evento OnSelect, algo asi:

Código Delphi [-]
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
  0: begin
    Showmessage('nada');
  end;
 end;
 end;
Si se selecciona el primer item salta el mensaje.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 14-11-2011
mcarazas mcarazas is offline
Miembro
 
Registrado: may 2006
Posts: 40
Poder: 0
mcarazas Va por buen camino
Cita:
Empezado por mcarazas Ver Mensaje
Hola Amigos del Foro:

Estoy desarrollando una aplicación para una distribuidora en cual implemento un lector de código de barras, para leer el código utilizo un combobox mi pregunta es cómo puedo hacer para que el combobox salte inmediatamente a otro objeto cuando encuentre el producto.
En que evento tengo que trabajar, agradeceré cualquier ayuda.
Gracias por responder, cuando trabajo en el evento OnSelect ya no funcion el evento OnChange. Que puede ser?
Responder Con Cita
  #4  
Antiguo 14-11-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me imagino que tendrá que ser o uno u otro, no los dos ya que esencialmente hacen lo mismo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 14-11-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
mcarazas, recuerda poner títulos descriptivos a tus preguntas, gracias por tu colaboración. Guía de estilo.
Responder Con Cita
  #6  
Antiguo 14-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por mcarazas Ver Mensaje
Gracias por responder, cuando trabajo en el evento OnSelect ya no funcion el evento OnChange. Que puede ser?
Depende de como esté configurada la propiedad Style.
En csDropDown funcionan ambos eventos, se dispara OnChange cuando se modifica el texto y OnSelect cuando se realiza una elección desde la lista desplegable.
Si está en csSimple no se muestra la lista desplegable por lo tanto no hay forma que se dispare el evento OnSelect.
En csDropDownList, csOwnerDrawFixed y csOwnerDrawVariable el usuario no puede modificar el texto, por lo tanto sólo se disparará OnSelect.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 14-11-2011
mcarazas mcarazas is offline
Miembro
 
Registrado: may 2006
Posts: 40
Poder: 0
mcarazas Va por buen camino
Ayuda con Combobox

Gracias por responder, yo necesito saltar cuando encuentre el codigo del lector si coloco con el Case, seria que estoy buscando uno por uno y yo tengo una lista de productos muy grande.
Código Delphi [-]
procedure TForm1.ComboBox1Select(Sender: TObject);
begin  
case ComboBox1.ItemIndex of  
0: begin    Showmessage('nada');  
1:..........una lista grande  end; end; end;

Última edición por mcarazas fecha: 14-11-2011 a las 23:21:58.
Responder Con Cita
  #8  
Antiguo 15-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No tengo en claro en que evento se recibe la cadena del lector, pero ateniendome al pedido de tu primer mensaje:
Cita:
cómo puedo hacer para que el combobox salte inmediatamente a otro objeto cuando encuentre el producto
Yo haría algo como esto:
Código Delphi [-]
  ...
  with ComboBox1 do
  begin
    Text:= LectorStr;
    if Items.IndexOf(LectorStr) <> - 1 then   // ¿ Existe el producto  ?
      SelectNext(ActiveControl, True, True);  // si, pasar a próximo control
    ....
  end;
  ...
Donde LectorStr sería la cadena o función que contiene o devuelve el valor que acaba de leer el scanner.

Pero tampoco estoy seguro a que te refieres con "salte inmediatamente a otro objeto"...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 15-11-2011
mcarazas mcarazas is offline
Miembro
 
Registrado: may 2006
Posts: 40
Poder: 0
mcarazas Va por buen camino
Ayuda con combobox

Estoy trabajando en un ComboBox y su propiedad Style esta en csSimple, eso quiere decir el combo no se depliega cuando el Combo encuentra un producto quiero que salte a un cuadro de texto, pero automaticamente.

En el anterior codigo que me dieron cuando el combo comparaba los primeros digitos pero no el codigo completo, y saltaba al otro
Responder Con Cita
  #10  
Antiguo 15-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por mcarazas Ver Mensaje
Estoy trabajando en un ComboBox y su propiedad Style esta en csSimple, eso quiere decir el combo no se depliega cuando el Combo encuentra un producto quiero que salte a un cuadro de texto, pero automaticamente.

En el anterior codigo que me dieron cuando el combo comparaba los primeros digitos pero no el codigo completo, y saltaba al otro
Hola.

Cuando dices "cuadro de texto", no sé a que componente te refieres (TEdit, TStaticText,...) y tampoco sé cuál de los códigos que te dieron es el que no compara la totalidad de los dígitos. Si te refieres al que utiliza el método IndexOf de TStrings, compara por la totalidad de la cadena que se le envía en el argumento.

Por favor describe con la mayor claridad y detalle la situación. Es decir, evento en que se recibe el código de producto, componente que lo recibe, evaluación que deseas realizar sobre el código recibido, etc.

Para que podamos unificar conceptos trata en lo posible de llamar a los componentes por su nombre ya que distintos componentes tienen distintas propiedades, atributos y eventos.

Resumiendo, todo lo que aconseja nuestra poco leída Guía de estilo

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-11-2011 a las 23:31:43. Razón: corrección ortográfica
Responder Con Cita
  #11  
Antiguo 16-11-2011
mcarazas mcarazas is offline
Miembro
 
Registrado: may 2006
Posts: 40
Poder: 0
mcarazas Va por buen camino
Perdon creo que no me dejando entender.
Estoy trabajando en un ComboBox, el ComboBox tiene varios productos cargados, su propiedad Style esta en CsSimple como esta en la imagen.
Los primeras 13 letras del ComboBox son los digitos del codigo de barras, como el lector lee los 13 digitos el ComboBox va comparando hasta que encuentra el producto. Mi pregunta es como programo o en que evento trabajo para que el ComboBox encuentre el Codigo y salte automaticamente a un TEdit.
Imágenes Adjuntas
Tipo de Archivo: jpg ventas.jpg (26,0 KB, 12 visitas)
Responder Con Cita
  #12  
Antiguo 16-11-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
De la manera que lo planteas nunca te va a buscar el código de barras por scanner ni por teclado, ya que para buscar en el ComboBox por IndexOf('7771214002632') nunca lo encontrará porque no coincide con la descripción "7771214002632 - AC100 - ACEITE DE OLIVA EXTRA VIRGEN 500 ML" y en ocasiones el código de barras puede tener menos de 13 dígitos.
Lo mejor es buscarlo en la DB o crearte una DB para los códigos de barras:
Código SQL [-]
CREATE TABLE CodigosBarras
  (
    IDCODIGOBARRA   int IDENTITY(1,1)
    CODIGOBARRAS    varchar(13)
    ARTICULOID      int
  )

CREATE UNIQUE INDEX PKU_IDCODIGOBARRA
  ON CodigosBarras(IDCODIGOBARRA)

CREATE UNIQUE INDEX PSU_CODIGOBARRAS
  ON CodigosBarras(CODIGOBARRAS)

CREATE INDEX PS_ARTICULOID
  ON CodigosBarras(ARTICULOID)
En la ficha del artículo asocias el código de barras al código del artículo.
En vez de utilizar un ComboBox utiliza un Edit

Espero que te sirva
Un saludo.
Responder Con Cita
  #13  
Antiguo 16-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Tál como te comenta olbeup, no encontrará el código de esa manera. Para lograr lo que buscas tendrías que crearte una variable de tipo TStrings que almacene paralelamente los códigos propiamente dichos y realizar las búsquedas sobre ella. Es decir que cuando realizas la carga del ComboBox tendrías que hacer:
Código Delphi [-]
  tsCódigo:= TStringList.Create;
  while not DataSet.Eof do
  begin
    tsCódigo.Add(DataSet.FieldByName('CODIGO').AsString);
    ComboBox1.Items.Add(DataSet.FieldByName('CODIGO').AsString + DataSet.FieldByName('DETALLE').AsString);
    DataSet.Next;
  end;

Luego, para buscar el código, algo como:
Código Delphi [-]
  ...
  ix := tsCódigo.IndexOf(Edit1.Text); // Edit que recibe el código
  if ix <> -1 then 
  begin
    ComboBox1.ItemIndex:= ix;  // mostrar item
    Edit2.SetFocus;  // ir a otro Edit
  end
  ...
En algún punto deberás hacer tsCodigo.Free para liberar memoria. (Estoy escribiendo el código en el aire, así que seguramente obtengas algún error si lo probas)

Pero es muchísimo más sencillo y eficiente comprobar la existencia del código ejecutando una consulta sobre el DataSet.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 16-11-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Vale, lo que puedes hacer es en vez de utilizar Add, vas a utilizar AddObject, es mas útil.
Lo primer es crearte un objecto
Código Delphi [-]
type
  TFillItem = class
    private
      FIDFieldValue: Integer;
      FTitleField: String;
      FFieldValue: Variant;
      FFieldWide: WideString;
    published
      property IDFieldValue: Integer read FIDFieldValue write FIDFieldValue;
      property TitleField: String read FTitleField write FTitleField;
      property FieldValue: Variant read FFieldValue write FFieldValue;
      property FieldWide: WideString read FFieldWide write FFieldWide;
  end;

Lo segundo es crearte un procedimiento para cargar todos los artículos en el ComboBox:
Código Delphi [-]
procedure TForm1.LoadArticlesCB;
var
  FillItem: TFillItem;
begin
  with DataSet do
    while (not Eof) do
    begin
      FillItem := TFillItem.Create;
        FillItem.IDFieldValue := FieldByName('IDARTICULO').AsInteger;
        FillItem.FieldValue   := FieldByName('IMPORTE').AsFloat;
        FillItem.TitleField   := FieldByName('DETALLE').AsString;
        FillItem.FieldWide    := FieldByname('OBSERVACIONES').AsString;

      ComboBox1.Items.AddObject(FillItem.TitleField, FillItem);

      Next;
    end;
end;
Luego, para buscar el código
Código Delphi [-]
...
var
  FillItem: TFillItem;
begin
  with ComboBox1 do
  begin
    ix := Items.IndexOf(Text);
    if (ix <> -1) then
    begin
      FillItem := Items.Objects[ix];
      Text := Text + ' - ' + FillItem.TitleField;
      Edit2.SetFocus;
    end
    else
      ShowMessage('Artículo no encontrado [' + Text + ']');
  end;
end;
y cuando se cierre la aplicación
Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  nI: Integer;
begin
  with ComboBox1 do
    for nI := 0 to (Items.Count -1) do
      TFillItem(Items.Objects[nI]).Free;
end;
Espero que te sirva
Un saludo
Responder Con Cita
  #15  
Antiguo 17-11-2011
mcarazas mcarazas is offline
Miembro
 
Registrado: may 2006
Posts: 40
Poder: 0
mcarazas Va por buen camino
Gracias por su ayuda, ahora se que voy a hacer
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con el combobox Nostradonuts Varios 3 19-02-2011 15:50:55
Ayuda con ComboBox paladincubano Varios 4 04-11-2008 14:02:47
Ayuda Con COMBOBOX!!! pecosita C++ Builder 7 31-10-2006 03:58:07
Ayuda con Combobox pepecharlie67 Varios 8 26-12-2005 12:21:17


La franja horaria es GMT +2. Ahora son las 23:56:31.


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
Copyright 1996-2007 Club Delphi