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 08-10-2010
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Poder: 0
WPascal Va por buen camino
Question Cómo dejar desplegado un ComboBox e inmovil?

Hola a todos, pues necesito que un ComboBox se quede desplegado y que no se contraiga, he intentado varias cosas pero no encuentro ninguna característica, a ver si alguien sabe cómo lo podría hacer.
Ah! , y tambien preguntarles si se puede cambiar el límite máximo de Items que se le puede agregar al ComboBox, pues creo que el máximo es 6700 y yo necesito unos 86000 lineas.
De antemano gracias y espero poderles ayudar también a ustedes en un futuro.
Responder Con Cita
  #2  
Antiguo 09-10-2010
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 y bienvenido.

Sobre la primera pregunta, creo que lo que buscas lo hace el TListBox.

86000 lineas... ¿ Las tenés almacenadas en memoria ?
Si no es así, pareciera mas adecuado el uso de TDBLookupComboBox.


Saludos.
Responder Con Cita
  #3  
Antiguo 09-10-2010
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Poder: 0
WPascal Va por buen camino
Hola, gracias por tu respuesta, la razon por la que estoy usando el ComboBox para que me permita filtrar lo que voy escribiendo en el campo superior que este tiene, intenté con el listBox pero no puede encontrar una propiedad que me permita escribir en la parte superior y filtrar con lo que hay debajo, te agradecería si me pudieras decir si tiene esa propiedad.

En cuanto a las 86000 lineas, son en realidad 86000 palabras que quiero que se filtren mientras se escribe arriba pero quiero que la lista de opciones no se repliegue y tampoco quiero usar una base de datos.
Espero haber sido más claro.
Gracias
Responder Con Cita
  #4  
Antiguo 09-10-2010
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 WPascal Ver Mensaje
Hola, gracias por tu respuesta, la razon por la que estoy usando el ComboBox para que me permita filtrar lo que voy escribiendo en el campo superior que este tiene, intenté con el listBox pero no puede encontrar una propiedad que me permita escribir en la parte superior y filtrar con lo que hay debajo, te agradecería si me pudieras decir si tiene esa propiedad.

En cuanto a las 86000 lineas, son en realidad 86000 palabras que quiero que se filtren mientras se escribe arriba pero quiero que la lista de opciones no se repliegue y tampoco quiero usar una base de datos.
Espero haber sido más claro.
Gracias
No, el ListBox no te muestra el cuadro de edición, si bién al pulsar una tecla te situa en el primer item de la lista
con esa letra, no hace lo que buscas...

En al segundo punto, en realidad no es importante si son palabras o frases completas, lo que veo como limitante
es el número máximo de líneas. Que para serte sincero desconocía que fuesen 6700.

En realidad si me dicen un número tan alto de items yo pensaria en almacenarlos en disco.

Voy a pensar y buscar algo más sobre el tema, si me surge algo te aviso.

Saludos.
Responder Con Cita
  #5  
Antiguo 09-10-2010
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 de nuevo.

Me quedé con dudas sobre la capacidad del Combo he hice una prueba:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to 86000 do
  try
    ComboBox1.Items.Add('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
  except
    ShowMessage(IntToStr(i));
  end;
end;

Tardó en llenarlo, pero no provocó excepción... ¿ Estas seguro que son sólo 6700 items ?

Saludos.

Última edición por ecfisa fecha: 09-10-2010 a las 02:19:10.
Responder Con Cita
  #6  
Antiguo 09-10-2010
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
Quizá podría usar un ClientDataSet guardando los datos en un xml o el formato nativo del CDS y de esta manera puede usar conroles de bases de datos sin realmente usar una base de datos.

// Saludos
Responder Con Cita
  #7  
Antiguo 09-10-2010
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 roman Ver Mensaje
Quizá podría usar un ClientDataSet guardando los datos en un xml o el formato nativo del CDS y de esta manera puede usar conroles de bases de datos sin realmente usar una base de datos.

// Saludos
Muy buena idea roman, un ClientDataSet es 'la' solución ya que se puede trabajar en memoria con todos los beneficios de los DataControls.

Saludos.
Responder Con Cita
  #8  
Antiguo 09-10-2010
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Poder: 0
WPascal Va por buen camino
hola Ecfisa y Roman, en realidad yo estoy empezando y no entiendo mucho lo de xml , clientDataSet, ni base de datos , asi que tendré que esperar a aprender a utilizar estos componentes segun la idea que dio Roman.

En cuanto al experimento que hizo Ecfisa, pues yo agregué las palabras a partir de un diccionario de palabras de esos que se utilizan para hacer ataques por fuerza bruta, o sea que lo hice copie y pegue, tal vez haciendolo de esta manera se limita a 6700, no sé, si quieren busquen el diccionario en la pagina GragonJar como "listado de diccionarios fuerza bruta" en google, entre los que alli estan está el de 69000 palabras, no les dejo el enlace porque el foro no me deja..

el principal problema es el limite de tamaño, digamos que logro reducir el numero de palabras a menos de 6700, entonces me podrías decir como hago para que el ComboBox quede deplegado y estático?, a proposito no sé si tal vez tengas un diccionario de palabras en español (para fuerza bruta), pues el que tengo es el de las 60000 palabras y quisiera uno que tenga las más comunes del español que no creo que sobrepasen las 6000.

Me debo ir pero les agradezco mucho su tiempo y sus respuestas y cualquier sugerencia más luego les consulto porque estoy en un ciber jeje
Saludos.

Última edición por WPascal fecha: 09-10-2010 a las 02:49:52.
Responder Con Cita
  #9  
Antiguo 09-10-2010
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Poder: 0
WPascal Va por buen camino
Hola amigos, les cuento que ya solucione el problema del limite maximo, lo que debia hacer era en vez copiar y pegar, darle click derecho y seleccionar load y cargar el archivo de texto y cargo muy bien aunque como ya dijiste, se demora.
Ahora la duda que me queda es si se puede bloquear el ComboBox para que quede desplegado.
Que esten bien.
Responder Con Cita
  #10  
Antiguo 09-10-2010
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.

El único modo que se me ocurre es que te crees un descendiente de TComboBox y redefinas el evento
OnCloseUp, bastante complicado...
Si sólo deseas que se despliegue el combo cuando tiene el foco, podés hacer:
Código Delphi [-]
  ComboBox1.Perform(CB_SHOWDROPDOWN, 1,0);
Pero se te va a replegar cuando lo pierda.

Es muchísimo más sencillo como sugirió roman.

Ponés un TClientDataSet hacés doble click sobre el componente y en el editor de campos -> botón derecho del mouse -> new field.
Le das un nombre, tipo string y la longitud que desees.

Ejemplo de carga: ( 'palabra' es el nombre del campo en el ejemplo )
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  cds.CreateDataSet;
  cds.Open;
  for i:= 1 to 86000 do
  begin
    cds.Append;
    cds.FieldByName('palabra').Value:= IntToStr(i); // o también: cdspalabra.Value:= IntToStr(i) 
    cds.Post;
  end;
end;

Luego le asociás el DataControl que más te convenga, DBLookupCombobox, TDBLookupListBox, DBGrid...

Saludos.

Última edición por ecfisa fecha: 09-10-2010 a las 10:29:58.
Responder Con Cita
  #11  
Antiguo 09-10-2010
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Poder: 0
WPascal Va por buen camino
Ok Ecfisa, intentaré hacer lo que me estás sugiriendo, el primer código que me sugeriste para darle foco al ComboBox , se lo puedo asignar a un botón, cierto?
me podrías explicar más o menos cómo funciona? porque me parece que me puede ayudar, pues necesito que por lo menos el ComboBox se despliegue al presionar un botón pero no necesariamente al escribir sobre él con el teclado.
Para que me entiendas mejor, dichos botones lo que hacen es escribir sobre el campo del ComboBox reemplazando al teclado, pero al escribir el ComboBox no se despliego porque no estoy escribiendo sobre él con teclado sino con los botones.
Si lo deseas y para que me entiendas mejor te dejo el archivo en la zona de FTP del foro>Delphi>Ejemplos>Teclado en pantalla con base de palabras.rar , para que veas lo que quiero hacer.
Saludos
Responder Con Cita
  #12  
Antiguo 09-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por WPascal Ver Mensaje
... la razon por la que estoy usando el ComboBox para que me permita filtrar lo que voy escribiendo en el campo superior que este tiene, intenté con el listBox pero no puede encontrar una propiedad que me permita escribir en la parte superior y filtrar con lo que hay debajo, te agradecería si me pudieras decir si tiene esa propiedad.
...
Nada te impide combinar el funcionamiento de dos componentes, en éste caso podrías usar un componente TEdit normal (u otro similar) combinado con un TListBox.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #13  
Antiguo 09-10-2010
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 WPascal Ver Mensaje
Ok Ecfisa, intentaré hacer lo que me estás sugiriendo, el primer código que me sugeriste para darle foco al ComboBox , se lo puedo asignar a un botón, cierto?
me podrías explicar más o menos cómo funciona? Saludos
Contestando a tus preguntas, si. Se lo podés asignar a un botón sin problemas, y funcionará siempre que primero situes el foco en el Combo.

CB_SHOWDROPDOWN es un mensaje para decirle a windows que oculte o muestre el Combo. (siempre que este no tenga el estilo igual a csSimple)

Podés enviar mensajes con dos funciones más: SendMessage y PostMessage:
PostMessage pone el mensaje en la cola y retorna , sólo devuelve si se pudo insertar el mensaje o no.
SendMessage espera que se procese el mensaje y retorna, devuelve mensajes de consulta.

Ejemplos:
Código Delphi [-]
  (* consulta si el combo está replegado y si es así lo despliega *)
  if SendMessage(ComboBox1.Handle, CB_GETDROPPEDSTATE, 0, 0) <> 1 then
    SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 1, 0);   
  (* pone el mensaje desplegar combo en cola *)
   PostMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 1, 0);

Saludos.
Responder Con Cita
  #14  
Antiguo 09-10-2010
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Poder: 0
WPascal Va por buen camino
Ok Ecfisa, entonces intentaré aplicarle esta función a los botones del programa y luego te aviso cómo me fue.
Gracias por tu ayuda.
En cuanto a la sugerencia de rgstuamigo, pues es interesante pero como les digo, estoy empezando a manejar Delphi y por el momento solo manejo los componentes básicos, claro que espero más adelante saber lo que ustedes saben jeje.
Nuevamente gracias Ecfisa. Seguimos hablando
Responder Con Cita
  #15  
Antiguo 22-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por WPascal Ver Mensaje
En cuanto a la sugerencia de rgstuamigo, pues es interesante pero como les digo, estoy empezando a manejar Delphi y por el momento solo manejo los componentes básicos, ...
Bueno pensandolo bien tal parece que puedes lograrlo hacer usando un simple Combobox ; poniendo la propiedad Style = csSimple al Combobox y luego redimensionas la altura (Heigth) del combobox al tamaño que deseas que se vea. Si lo haces en tiempo de diseño podras observar una linea horizontal divisoria entre los items y el cuadro de edicion del combobox, como si se tratase de dos componentes .
Espero que con eso soluciones tu problema.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #16  
Antiguo 22-10-2010
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 rgstuamigo Ver Mensaje
Bueno pensandolo bien tal parece que puedes lograrlo hacer usando un simple Combobox ; poniendo la propiedad Style = csSimple al Combobox y luego redimensionas la altura (Heigth) del combobox al tamaño que deseas que se vea. Si lo haces en tiempo de diseño podras observar una linea horizontal divisoria entre los items y el cuadro de edicion del combobox, como si se tratase de dos componentes .
Espero que con eso soluciones tu problema.
Saludos...
Tenés toda la razón mi amigo.

Ganas de complicarnos que tenemos algunos...

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como mostrar la ventana de lenar inten de un combobox en tiempo de un combobox gulder Varios 3 19-05-2007 19:55:58
Q propiedad del dblookupcombobox no lo muestra desplegado? mariachiquero Varios 6 10-05-2007 13:56:57
Efecto en desplegado Jorghino reyes Varios 1 10-09-2005 18:17:58
Como dejar Delphi maximizado????? Antuan Varios 2 01-08-2005 12:18:58
!TmainMenu Desplegado Carlosguiland OOP 1 09-11-2004 19:28:11


La franja horaria es GMT +2. Ahora son las 04:52:37.


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