Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 08/06/2007
david.rguez david.rguez is offline
Miembro
 
Join Date: Jun 2006
Location: Zamora, la bien cercada
Posts: 104
Poder: 21
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.
Reply With Quote
  #2  
Old 08/06/2007
Ñuño Martínez's Avatar
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Join Date: Jul 2006
Location: Ciudad Catedral, Españistán
Posts: 6,025
Poder: 28
Ñ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.
Reply With Quote
  #3  
Old 08/06/2007
Bicho's Avatar
[Bicho] Bicho is offline
Miembro Premium
 
Join Date: Jul 2003
Location: Inca - Mallorca
Posts: 1,776
Poder: 25
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
Reply With Quote
  #4  
Old 08/06/2007
Bicho's Avatar
[Bicho] Bicho is offline
Miembro Premium
 
Join Date: Jul 2003
Location: Inca - Mallorca
Posts: 1,776
Poder: 25
Bicho Va por buen camino
Quote:
Originally Posted by Ñ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
Reply With Quote
  #5  
Old 08/06/2007
david.rguez david.rguez is offline
Miembro
 
Join Date: Jun 2006
Location: Zamora, la bien cercada
Posts: 104
Poder: 21
david.rguez Va por buen camino
Quote:
Originally Posted by 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.
Reply With Quote
  #6  
Old 08/06/2007
Bicho's Avatar
[Bicho] Bicho is offline
Miembro Premium
 
Join Date: Jul 2003
Location: Inca - Mallorca
Posts: 1,776
Poder: 25
Bicho Va por buen camino
Quote:
Originally Posted by 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
Reply With Quote
  #7  
Old 08/06/2007
david.rguez david.rguez is offline
Miembro
 
Join Date: Jun 2006
Location: Zamora, la bien cercada
Posts: 104
Poder: 21
david.rguez Va por buen camino
Quote:
Originally Posted by 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.

PHP Code:
---------                    --------- 
|   
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).

Last edited by david.rguez : 08/06/2007 at 13:55.
Reply With Quote
  #8  
Old 08/06/2007
Ñuño Martínez's Avatar
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Join Date: Jul 2006
Location: Ciudad Catedral, Españistán
Posts: 6,025
Poder: 28
Ñ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.

Last edited by Ñuño Martínez : 08/06/2007 at 13:47.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Agrupar archivos... craven Varios 3 01/11/2006 21:58
agrupar de a 1 y varios raudelink SQL 3 16/11/2004 00:58
Agrupar en QuickReport anitra_cattivo Impresión 6 26/08/2003 02:13
Agrupar ? ramiretor Impresión 1 16/05/2003 01:51
Agrupar información nfernandez Impresión 1 08/05/2003 20:19


All times are GMT +2. The time now is 00:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi