Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2004
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 22
Tomás Va por buen camino
Buscar texto en ComboBox conociendo el comienzo

Hola a todos:

Tengo un ComboBox con varias líneas cuyos tres primeros caracteres son un código:
G.1 Gastos nocturnos
G.2 Gastos de juego
...
I.1 Ingresos apuestas
...
El usuario escoge y guardo sólo el código, G.3, G.7, I.2, etc.
Para modificar un registro lo leo: ComboBox1.Text := TextoRegistro, con lo que el combo solo muestra el código pero no el texto explicativo.

¿Hay alguna manera de mostrar toda la linea conociendo solo sus tres primeros caracteres?

Gracias. Tomás.
Responder Con Cita
  #2  
Antiguo 22-03-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La cuestión no es que esté muy clara, pero se infiere por lo que dices que TextoRegistro contiene los tres caracteres y TextoRegistro2 contendría el resto?

ComboBox1.Text := TextoRegistro + TextoRegistro2


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 22-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
A parte de lo comentado por el amigo Marcos, decirte que si quieres hacer que tu combo tengas más de una columna, en mi web tienes un ejemplo de cómo lograrlo

Espero te sirva
Responder Con Cita
  #4  
Antiguo 22-03-2004
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 22
Tomás Va por buen camino
Hola:

Parece ser que no me he hecho entender bien, por lo que voy a intentarlo de nuevo:

Tabla con estos campos: CANTIDAD, CONCEPTO, PARTIDA

Añado un registro nuevo y edito en ficha con:
DBEditCantidad (pongo por j. "12,34")
DBEditConcepto (pongo por ej. "Seguro")
ComboBox con las partidas donde escojo por ej. "G.6 Responsabilidad civil"
y al aceptar guardo solo G.6 [Copy(CBPartidas.Text,1,3]

Si quiero modificar este registro presento los datos en la ficha:
En el primer DBEdit se verá "12,34" que puedo modificar
En el segundo se verá "Seguro" que puedo modificar
En el Combo quiero que se vea la línea del combo que pone "G.6 Responsabilidad civil", pero no se como lograrlo, solo consigo poner "G.6" que es el texto que tengo guardado.

Espero haberme hecho entender. Gracias.
Responder Con Cita
  #5  
Antiguo 22-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo único que tienes que hacer es usar el método IndexOf de ComboBox.Items para hallar el índice de la cadena deseada ("G.6 Responsabilidad civil" por ejemplo) y asignarle el índice a la propiedad ItemIndex del combo.

Pero por otra parte no creo que sea muy conveniente este método que estás usando. Considero que lo más correcto sería crear una tabla catálogo con dos campos:

codigo y descripcion

para separar limpiamente el código ("G.6" por ejemplo) de su descripción ("Responsabilidad civil").

De esta forma, en lugar de usar un ComboBox, usarías un DbLookupComboBox apuntando sus propiedades DataSource y DataField al campo de la tabla original y sus propiedades ListSource, KeyField y ListField a la tabla catálogo.

Así el usuario seleccionará igual que con tu método con la ventaja de que automáticamente se guardará sólo el código e igualmente el despliegue de la descripción en el combo también será automática. Además, cualquier cambio en la descripción se reflejará inmediatamente sin tener que cambiar a mano las cadenas en el código.

// Saludos
Responder Con Cita
  #6  
Antiguo 22-03-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Es que si solamente guardas 3 caracteres no vas a poder ver 6.

[Copy(CBPartidas.Text,1,x]) -> x sería el número de caracteres que deseas guardar porque si en el combo solamente hay 3 no te puede mostrar más.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 22-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tengo que corregir lo que dije en el mensaje anterior.

El método IndexOf no va a servir ya que según entiendo ahora tú tienes que buscar toda la cadena conociendo sólo el código, es decir, tal como sucede si escribiésemos directamente en el combo usando la propiedad AutoComplete.

El ComboBox tiene un método, SelectItem, que, éste sí, me parece que es lo qe buscas. El inconveniente es que es un método protegido pero puedes usar el conocido truco de desprotección declarando un descendiente 'de palo':

Código:
type
  THackComboBox = class(TComboBox);
Posteriormente lo usas para acceder al método protegido:

Código:
THackComboBox(ComboBox1).SelectItem('G.6');
Esto colocará al combo en el primer ítem que empiece con "G.6" mostrando el texto completo.

De cualquier forma insisto en lo que te dije antes respecto de la tabla catálogo.

// Saludos
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


La franja horaria es GMT +2. Ahora son las 19:13:39.


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