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-06-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Agrupar componentes

Hola a todos/as:

Tenemos el Borland Delphi 2005 y nos gustaría saber si es posible agrupar lógicamente componentes.

Es decir: seleccionar una serie de componentes y formar un grupo con ellos al cuál se le da un nombre. Luego ese nombre de grupo se utilizaría en el código para dar una misma orden a todos los componentes.

Por ejemplo, agrupo los botones BitBtn1, BitBt2 y BitBtn3 en el grupo "Group1".
Y luego en el código hago "Group1.Visible:= false;", y el efecto sería que los tres botones se ocultan.

¿Es posible hacerlo en Borland Delphi 2005?

Un saludo

David Rguez.
Responder Con Cita
  #2  
Antiguo 08-06-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Para eso puedes utilizar Tepanel y TGroupBox. Si ocultas un panel, todos los componentes que contenga también se ocultan.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 08-06-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola,

no estoy seguro de que se pueda hacer eso de la manera que lo pides ni con Delphi2005 ni con ninguna otra versión.
Pero lo que si puedes hacer es lo siguiente:
- Los formularios de Delphi tienen una propiedad llamada Components. Que es una matriz con todos los componentes que hay en ese formulario.
- Tambien tienes una función llamada FindComponent que te permite buscar un componente en concreto en el formulario
- Por último puedes preguntar a un elemento de la lista de Components si ese objeto pertenece a una clase en concreto y si es así, puedes modificar sus propiedades.

Para muestra un botón:
La siguiente función recorre todos los componentes y para unas determinadas clases de objetos vacia su contenido (sean texto, labels, combos, etc.)

Código Delphi [-]
Var
  i:Integer;
begin
  With Form do
  For i := 0 to ComponentCount - 1 do
    If Components[i].Tag in Tags then
      If Components[i] is TEdit then TEdit(Components[i]).Clear
      Else
        If Components[i] is TStaticText then TStaticText(Components[i]).Caption := ''
        Else
          If Components[i] is TComboBox then TComboBox(Components[i]).ItemIndex := -1
          Else
            If Components[i] is TListView then TListView(Components[i]).Items.Clear
            Else
              If Components[i] is TMaskEdit then TMaskEdit(Components[i]).Clear
              Else
                If Components[i] is TMemo then TMemo(Components[i]).Lines.Clear
                ELSE
                  if Components[i] is TCheckBox then TCheckBox(Components[i]).Checked:=false;

Esta función afecta a todos los componentes del formulario que sean de estas clases.
Si sólo quieres que afecte a los edits del formulario y además a sólo algunos de ellos, puedes usar la función FindComponent.

Otro ejemplo: en el formulario debe haber 7 checkbox como mínimo y deben tener la nomenclatura igual: MiCheck1, MiCheck2, ...
La función busca esos checkbox y los marca.

Código Delphi [-]
var x : Integer;
begin
  if chkAll.Checked then   
    for x := 1 to 7 do (FindComponent('chk' + IntToStr(x)) as TCheckBox).Checked := True;

Bueno después de todo este rollo, espero que te pueda servir algo. Y si me he equivocado en algo, que me corrijan, y si alguien tiene alguna idea mejor...

Saludos
Responder Con Cita
  #4  
Antiguo 08-06-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Cita:
Empezado por Ñuño Martinez
Para eso puedes utilizar Tepanel y TGroupBox. Si ocultas un panel, todos los componentes que contenga también se ocultan.
Ves más sencillo y más fácil.

Saludos
Responder Con Cita
  #5  
Antiguo 08-06-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Cita:
Empezado por Bicho
Ves más sencillo y más fácil.

Saludos
No, eso no me sirve (cuestión de estética del programa). No debe aparecer nada más que los componentes, sin paneles de por medio ni otros que se vean.

La idea del grupo es para, dentro de un mismo panel, poder tener distintas disposiciones manteniendo componentes sin mover, estando estos entrelazados (si pusiera un panel, los componentes fijos saldrían cortados), de forma que pueda dar una orden a todo ese grupo sin tocar el resto de los componentes que puedan estar "físicamente" entre ellos.

No sé si me doy a entender bien.
Responder Con Cita
  #6  
Antiguo 08-06-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Cita:
Empezado por david.rguez
No, eso no me sirve (cuestión de estética del programa). No debe aparecer nada más que los componentes, sin paneles de por medio ni otros que se vean.

La idea del grupo es para, dentro de un mismo panel, poder tener distintas disposiciones manteniendo componentes sin mover, estando estos entrelazados (si pusiera un panel, los componentes fijos saldrían cortados), de forma que pueda dar una orden a todo ese grupo sin tocar el resto de los componentes que puedan estar "físicamente" entre ellos.

No sé si me doy a entender bien.
Pero los paneles puedes quitar los bordes y son totalmente inapreciables.
Así puedes tener dentre de un panel principal, varios paneles. En los cuales a uno le pones unos componentes que no quieres que se toquen y otros que lo puedes ocultar, deshabilitar, etc en otro panel.
Para ello debes modificar las siguientes propiedades:
- BevelInner = bvNone
- BevelOuter = bvNone
- BorderWidth = 0
Así el panel no se notará nada.

Creo que es lo que buscas (si lo he entendido bien)

Saludos
Responder Con Cita
  #7  
Antiguo 08-06-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Cita:
Empezado por Bicho
Pero los paneles puedes quitar los bordes y son totalmente inapreciables.
Así puedes tener dentre de un panel principal, varios paneles. En los cuales a uno le pones unos componentes que no quieres que se toquen y otros que lo puedes ocultar, deshabilitar, etc en otro panel.
Para ello debes modificar las siguientes propiedades:
- BevelInner = bvNone
- BevelOuter = bvNone
- BorderWidth = 0
Así el panel no se notará nada.

Creo que es lo que buscas (si lo he entendido bien)

Saludos
Pero el panel en sí sigue siendo visible ¿o no? Si es así, me seguiría cortando los componentes.

Código PHP:
---------                    --------- 
|   
1   |       ----------   |   3    
---------       |    
2    |  --------- 
                ---------- 
Para que os hagáis una idea. Esos son 3 componentes (botones, Edit, Grids... puede ser cualquiera). El 2 tiene que mantenerse fijo y siempre visible pero el 1 y el 3 tendrán que aparecer o desaparecer según la situación. Si utilizo un panel, aunque quite los bordes, me cortaría la mitad del componente 2, pues sigue siendo visible.

Lo que busco es poder dar una orden directa a 1 y a 3 para que se oculten (con solo 2 componentes no me importaría dar la orden uno por uno, pero cuando se juntan en mayor número toca un poco más las narices).

Última edición por david.rguez fecha: 08-06-2007 a las 13:55:16.
Responder Con Cita
  #8  
Antiguo 08-06-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
¿Y por qué no creas una clase? Por ejemplo (así, a lo burro):
Código Delphi [-]
TGrupoComponentes = CLASS
PRIVATE
  fComponentes: ARRAY OF TCOMPONENT;
  fNumComp: INTEGER;
PUBLIC
  CONSTRUCTOR Create;
  PROCEDURE AnnadeComponente (Componente: TCOMPONENT);

  PROPERTY Componentes: ARRAY OF TCOMPONENT READ fComponentes;
END;

CONSTRUCTOR TGrupoComponentes.Create;
BEGIN
  fNumComp := 0;
END;

PROCEDURE TGrupoComponentes.AnnadeComponente (Componente: TCOMPONENT);
BEGIN
  INC (fNumComp);
  SETLENGTH (fComponentes, fNumComp);
  fComponentes[fNumComp] := Componente;  
END;
Posiblemente esto no funcione y que haya una estructura mejor que el ARRAY para almacenar referencias a componentes, pero creo que entiende la idea.

[edit] Bicho tiene razón: si quitas los bordes a un panel y le pones el mismo color que el fondo de la aplicación se vuelve invisible.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 08-06-2007 a las 13:47:02.
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
Agrupar archivos... craven Varios 3 01-11-2006 21:58:20
agrupar de a 1 y varios raudelink SQL 3 16-11-2004 00:58:11
Agrupar en QuickReport anitra_cattivo Impresión 6 26-08-2003 02:13:42
Agrupar ? ramiretor Impresión 1 16-05-2003 01:51:32
Agrupar información nfernandez Impresión 1 08-05-2003 20:19:00


La franja horaria es GMT +2. Ahora son las 18:57:10.


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