Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Como expandir PickList por software

Hola gente del foro
Vengo con una nueva consulta, tal vez sea una tontera pero todavía no se como hacerlo.
Necesito que cuando Empiece a escribir en un campo del DBGrid se expanda la lista del picklist automáticamente.
No tengo idea siquiera si se puede hacer.

Lo que intento hacer es que cuando empiece a escribir en el campo me vaya filtrando nombres y solo queden los que contengan las letras que voy escribiendo, por ejemplo...
Si tengo nombres

Carolina
Juan
Martín
Maria
Pedro
Roberto

y escribo en el campo de nombre "ar" me aparezcan en la lista Martin, Maria, Carolina que son los nombres que contiene la cadena "ar"
La idea es hacer una consulta de los nombres que contenga la cadena que voy escribiendo y cargarlos en el picklist, pero para que se vayan viendo se debe expandir la lista para que vayan apareciendo los nombres en la lista.

Agradeceré sus comentarios

Saludos
MARX
Responder Con Cita
  #2  
Antiguo 03-05-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Filtra el dataset del grid. Podes usar el evento OnFilterRecord, la propiedad filter o lanzar consultas sql

Hay ejemplos de los 3 casos en el foro, aunque cualquier problema no dudes en preguntar
Responder Con Cita
  #3  
Antiguo 03-05-2016
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.

También creo que un filtrado desde el TDataSet o mediante una consulta SQL sería lo mas adecuado.

Pero contestando al título de tu consulta, podes usar el evento OnKeyDown del DBGrid y la función API SendInput para desplegar el PickList, vg:

Código PHP:
const KEYEVENTF_KEYDOWN 0;  

void sendKey(const WORD &key, const DWORD &flag)
{
  
INPUT ip;

  
ZeroMemory(&ipsizeof(INPUT));
  
ip.type           INPUT_KEYBOARD;
  
ip.ki.wScan       0;
  
ip.ki.time        0;
  
ip.ki.dwExtraInfo 0;
  
ip.ki.dwFlags     flag;
  
ip.ki.wVk         key;
  
SendInput(1, &ipsizeof(INPUT));
}

void __fastcall TForm1::DBGrid1KeyDown(TObject *SenderWORD &Key,
      
TShiftState Shift)
{
  if (
Key == VK_F5) {  // ( F5 por ejemplo)
    
sendKey(VK_F2,   KEYEVENTF_KEYDOWN);
    
sendKey(VK_F2,   KEYEVENTF_KEYUP);
    
sendKey(VK_MENUKEYEVENTF_KEYDOWN);
    
sendKey(VK_DOWNKEYEVENTF_KEYDOWN);
    
sendKey(VK_DOWNKEYEVENTF_KEYUP);
    
sendKey(VK_MENUKEYEVENTF_KEYUP);
  }

Una vez desplegada la lista se comporta de forma similar a un ComboBox al presionar letras.

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 04-05-2016 a las 00:33:39. Razón: optimizar parámetros
Responder Con Cita
  #4  
Antiguo 03-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Buenisimo ecfisa.
Lo estoy probando
Te hago una pregunta ¿Que librería es la que hay que definir para usar estas funciones?.
Responder Con Cita
  #5  
Antiguo 03-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Ya está, anduvo perfecto.
Ahora tengo que ver como lo implemento con el query.
Gracias ecfisa.


Saludos
MARX
Responder Con Cita
  #6  
Antiguo 04-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Hago otra consulta, aprovechando sus conocimientos. ¿Hay alguna forma de escribir mas de un caracter en un campo del DBGrid cuando la lista del picklist está desplegada?
Responder Con Cita
  #7  
Antiguo 05-05-2016
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 MARX.

Si no te entiendo mal, si.

Es el comportamiento por defecto de la propiedad PickList, se desplaza la selección en la lista desplegada a medida que se ingresan caracteres y con la tecla BackSpace se anula lo tecleado para el reingreso.

Si deseas desplegar la lista ordenada, previamente tendrías que cargar los datos en un TStringList y usar su método Sort, por ejemplo:
Código PHP:
...
  
TStringList *ts = new TStringList;
  
__try {
    
ts->Add("Abutarda");
    
ts->Add("Abulon");
    
ts->Add("Abadejo");
    
ts->Add("Abuelo");
    
ts->Sort();  // <- (*)
    
DBGrid1->Columns->Items[0]->PickList->Assign(ts);
  }
  
__finally {
    
delete ts;
  }
... 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 05-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
A ver si me explico mejor. Cuando se despliega la lista de un picklist y escribo en el campo donde se desplegó la lista, no se pueden ver las letras que escribo, ingreso letras y lo unico que sucede es que se mueve la linea seleccionada a las palabras que empiezan con la letra que toqué, pero en el campo no se puede visualizar nada.
Lo que yo quiero es que cuando la lista está desplegada se pueda ir viendo lo que escribo como para ir ejecutando una consulta con el texto que se va escribiendo.
En un combobox si se puede ver lo que escribo en el cuadro de texto de el mismo combobox mientras la lista está desplegada.
Quiero saber si hay alguna forma que el picklist se comporte como el combobox en ese sentido.
No se si me entienden. Creo que ni yo me entiendo lo que escribí... jajaja.
Responder Con Cita
  #9  
Antiguo 05-05-2016
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.

Ahora creo entenderte... No veo posible hacer lo que buscas mediante la propiedad PickList.

Una consulta mas, ¿ De donde obtenes los datos que se cargan en PickList ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 06-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Hola ecfisa.
Los datos los voy a sacar de una consulta que se va ir actualizando a medida que se ingresen los caracteres.
Pienzo hacer una consulta en SQL con la propiedad like
No quiero utilizar un DBComboBox arriba del DBGrid porque me ha traido problema con los diferentes comportamientos que necesito en los campos del DBGrid.

cualquier otro dato que necesites hacemelo saber.

Saludos
MARX
Responder Con Cita
  #11  
Antiguo 07-05-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Una idea seria escribir en un TEDIT o similar y conforme vayas escribiendo vas mandando lo escrito al componente ese que deseas usando el evento OnKeyUp por ejemplo. Con eso verías el texto sin problemas.
Responder Con Cita
  #12  
Antiguo 08-05-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Hola Aguml.
Si, mi idea era hacerlo con un DBLookup que apuntara a una consulta, pero me traía problemas con algunos comportamientos del DBGrid. Tenía que agregar mucha programacion para que no se notara que es un DBLookup
Igual, es buena idea.
Gracias por tu aporte.

Saludos
MARX
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
Como puedo expandir un panel hacia la derecha con un efecto lento? NelsonJG Gráficos 6 28-09-2013 20:27:37
Como puedo conectar 3 o 4 monitores a mi laptop para expandir el escritorio? flystar Varios 5 22-04-2010 10:40:09
evento expandir (+) en cxGrid sakuragi OOP 3 15-08-2006 21:09:58
como puedo obtener el valor seleccionado en un Picklist de un dbgrid Shidalis OOP 2 09-08-2005 20:08:42
Expandir TreeView Taribus Varios 1 05-10-2003 20:48:23


La franja horaria es GMT +2. Ahora son las 05:41:33.


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