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 25-03-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
¿Cómo ocultar los botones de un componente "TCategoryButtons"?

Hola a todos,

¡A ver si podéis echarme una mano con esto! Estoy utilizando un componente "TCategoryButtons" en cierto programa, y, me gustaría que se pudieran filtrar los botones para que sólo se mostrasen los que coincidiesen con aquello que busque el usuario. Es decir, suponiendo que tengo una lista de botones como:

Código:
Manolo
Pedrito
Francisco
... suponiendo que el usuario busque "Manolo", me gustaría que "Pedrito" y "Francisco" no apareciesen. El asunto no parece baladí, puesto que, cada botón de "TCategoryButtons" es un objeto "TButtonItem", que, no cuenta con una propiedad "Visible" o similar. Es decir, puedo "recorrer" todos los botones del componente, pero, no puedo ocultarlos llegado el caso.

Estoy a punto de descartar que exista la posibilidad de hacer lo que quiero, sin embargo, me llama la atención que el propio IDE de Delphi (al menos en Delphi XE2 es así) muestra la paleta de componentes en un "TCategoryButton", al menos el programa WinSpy indica que su clase se llama "TIDECategoryButtons", y, como sabéis, sí que es posible filtrar dicha lista de componentes...

¿Alguien se ha topado algún vez con este "problema"? ¿Y conoce la solución? ¿Y la quiere compartir?

¡Muchas gracias!
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 25-03-2015 a las 09:04:04.
Responder Con Cita
  #2  
Antiguo 25-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Pues la verdad es que a primera vista no se ve forma de hacerlo.
He revisado un poco el código (imagino que igual que has hecho tú) y si hay forma de hacerlo no es trivial.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 25-03-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias Germán. En efecto, al menos en un "TCategoryButtons" estándar, parece que no se contempla esa posibilidad.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 26-03-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Caramba, después de voltear un poco buscando, aparentemente no hay una manera "usual" de hacerlo, si alguno la tiene, por favor dígalo...

Lo único que se me ocurrió fue simplemente liberar los botones que no coincidan con tu búsqueda, luego de recorrer los TButtonItem y luego crearlos en ejecución cuando sean requeridos.

Adecuando el siguiente código para la necesidad de "ocultar":

Código Delphi [-]
CategoryButtons1.Categories[0].Items[0].Free;

Y el del siguiente link para la necesidad de volver a "mostrar":

Cita:
Código sacado de http://www.functionx.com/delphi/cont...rybuttons.htm:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
    SeriesOfButtons : TCategoryButtons;
    Category        : TButtonCategory;
    btn             : TButtonItem;
begin
    SeriesOfButtons := TCategoryButtons.Create(Self);
    SeriesOfButtons.Parent := Self;

    SeriesOfButtons.Left := 8;
    SeriesOfButtons.Top  := 40;

    Category := SeriesOfButtons.Categories.Add;

    btn := Category.Items.Add();
end;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 26-03-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola Jhonny,

Pensé en la solución que propones, pero, no está demás volver sobre ello. En un principio la descarté, porque, precisamente, digamos que aprovecho la posibilidad de preparar dichos botones en tiempo de diseño, desde el mismo IDE de Delphi. Sin embargo, si no hay más remedio (tal vez cambiar a otro componente que permita lo que queremos de forma "natural") sería cuestión de ver el desempeño final de dicha solución.

Gracias por responder Jhonny. Si decido hacerlo ya contaré cómo va el asunto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 26-03-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Hola Jhonny,

Gracias por responder Jhonny. Si decido hacerlo ya contaré cómo va el asunto.
Estaré atento
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 25-05-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno, pues, en efecto, nuestro amigo Jhonny iba bien encaminado. Parece claro que no pueden ocultarse botones de un "TCategoryButtons", pero, el control se comporta muy bien a la hora de crear las categorías y botones en tiempo de ejecución, de hecho parece preparado para algo así, de manera que resulta más o menos sencillo realizar el filtrado, una vez que podemos crear los elementos en tiempo de ejecución, basta con buscar por la cadena de búsqueda en el caption de un botón... antes de crearlo y añadirlo al control.

El quid está por tanto en tener una fuente desde la que que crear dichos elementos, por ejemplo, en mi caso se trata de sendos arrays estáticos, donde defino todas las acciones y todos los controles disponibles (véase la imagen de abajo) así como algunas de sus características, entre ellas su nombre, que es lo que me sirve a la hora de buscar o filtrar una determinada acción o control. En fin, que es posible hacer lo que me preguntaba al principio, siempre que no creemos las categorías y botones en tiempo de diseño, en todo caso, pudiendo recrearlos en tiempo de ejecución.



Tal vez incluso podríamos ir un poco más allá. Por ejemplo, yo creo que el propio Delphi utiliza este control (u otro similar) para su paleta de componentes, por ejemplo. Ahora bien, Delphi nos muestra "en negrita" el texto que estamos buscando o el filtro que estamos usando. Yo creo que esto podría hacerse utilizando algún evento "Draw" del "TCategoryButtons". Otra cosa que tengo que decir es que yo estoy filtrando sobre unos 100 elementos más o menos: no sé cómo se comportará con muchos más, pero, no pinta del todo mal.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 26-05-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por dec Ver Mensaje
... yo creo que el propio Delphi utiliza este control (u otro similar) para su paleta de componentes, por ejemplo.
Diría que sí es ese mismo componente. Y se ve que va agil.
Responder Con Cita
  #9  
Antiguo 26-05-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola Casimiro,

Sí que se parecen ambos componentes, sí. De hecho se me olvidó comentar que las categorías de este componente cuentan con los métodos "BeginUpdate" y "EndUpdate", lo que evita "parpadeos". Lo cierto es que parece que el componente está hecho para algo así: no tanto para añadir categorías y botones en tiempo de diseño (que también), como para trabajar con ellos en tiempo de ejecución. De hecho en mi caso esto es hasta una ganancia extra: puesto que ya no tendré que ir añadiendo botones en tiempo de diseño, sino que al añadir acciones al "mapa de acciones", el componente mostrará las nuevas acciones sin más. Una ganancia colateral para variar.
__________________
David Esperalta
www.decsoftutils.com
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
TCategoryButtons scriptors Varios 5 15-03-2015 15:28:26
Ocultar botones distintos form The Cid James Varios 13 01-08-2013 19:06:37
componente para botones El_Chava Varios 8 29-09-2005 16:35:00
Problema con Componente derivado de TPanel y Botones Critter Varios 4 05-09-2004 11:08:55
Crear un Componente TScrollbox con botones dentro CORBATIN OOP 15 06-05-2004 22:48:37


La franja horaria es GMT +2. Ahora son las 15:00:18.


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