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 12-02-2013
felipe_jfx felipe_jfx is offline
Registrado
NULL
 
Registrado: feb 2013
Posts: 4
Poder: 0
felipe_jfx Va por buen camino
Objetos clonados

Saludos.
En una forma tengo 12 objetos Shape a los que les debo asignar una altura (height) dependiendo de un resultado obtenido en un ciclo For. Mi inexperiencia me hizo programarlo de la siguiente forma:

FIBConsultaMes.First;
for ciclo:=1 to 12 do
begin
if ciclo=1 then Shape1.height:=FIBConsultaMes.fields[0].value;
if ciclo=2 then Shape2.height:=FIBConsultaMes.fields[0].value;
if ciclo=3 then Shape3.height:=FIBConsultaMes.fields[0].value;
if ciclo=4 then Shape4.height:=FIBConsultaMes.fields[0].value;
if ciclo=5 then Shape5.height:=FIBConsultaMes.fields[0].value;
if ciclo=6 then Shape6.height:=FIBConsultaMes.fields[0].value;
if ciclo=7 then Shape7.height:=FIBConsultaMes.fields[0].value;
if ciclo=8 then Shape8.height:=FIBConsultaMes.fields[0].value;
if ciclo=9 then Shape9.height:=FIBConsultaMes.fields[0].value;
if ciclo=10 then Shape10.height:=FIBConsultaMes.fields[0].value;
if ciclo=11 then Shape11.height:=FIBConsultaMes.fields[0].value;
if ciclo=12 then Shape12.height:=FIBConsultaMes.fields[0].value;
FIBConsultaMes.Next;
end;

Sin embargo sé que puedo hacer algo para reducir el código para no tener 12 IF, algo así como un apuntador al objeto shape 1..12. De antemano agradezco las aportaciones a mi duda.
Responder Con Cita
  #2  
Antiguo 12-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 12-02-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola felipe_jfx.

Con respecto a tu pregunta; Aparentemente no reduje las líneas de código, pero puedes echarle un vistazo al siguiente código:
Código Delphi [-]
procedure TForm1.SetWidthsClick(Sender: TObject);
  var
    i : Integer;
    lStName : string;
    lComponent : TComponent;
begin
  lComponent := nil;
  for i := 1 to 12 do
  begin
    try
      lStName := Format('Shape%d', [i]);
      lComponent := FindComponent(lStName);
      if Assigned(lComponent)
         and (lComponent is TShape)
      then
      begin
        TShape(lComponent).Width := SpinEdit1.Value;
      end;
    finally
      lComponent := nil;
      lStName := '';
    end;
  end;
end;

Esto te permitirá buscar todos los objetos de la clase TShape que se llamen Shape[1..12] y modificarles el tamaño.

Un Saludo y Bienvenido al Club!
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #4  
Antiguo 12-02-2013
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
Supongo que habrán distintas formas de hacerlo pero yo utilizaría la función FindComponent('NombreDelComponente'), algo así.

Código Delphi [-]
Procedure CambiarHeight;
var
  Shap : Tshape;
  N : Integer;
begin
  For N := 1 to 5 do
  begin
    (FindComponent('Shape'+IntTosTr(N)) as Tshape).Height := 100;
  end;
End;
Responder Con Cita
  #5  
Antiguo 12-02-2013
felipe_jfx felipe_jfx is offline
Registrado
NULL
 
Registrado: feb 2013
Posts: 4
Poder: 0
felipe_jfx Va por buen camino
Talking Gracias a todos!!

Casimiro, acertada y útil tu sugerencia de los Tags.

Champy, gracias en efecto la función FindComponent() fue parte de la solucuión.

Movorack, tu aportación resolvió de forma excelente lo que quería lograr, mi código era más abultado de lo que mostré en el ejemplo así que creeme que si reduje muchísimo el código final. Cuando esté terminado publicaré como quedó.

El tiempo de respuesta me sorprendió, estoy agradecido.
Responder Con Cita
  #6  
Antiguo 12-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias por visitarnos
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
Duda sobre destrucción de objetos compuestos por otros objetos noob OOP 11 16-02-2009 00:28:33
creacion objetos MOCOSO07 Varios 4 04-04-2008 22:35:04
Objetos C# Cheswar .NET 1 10-03-2008 16:13:27
almacenamiento de objetos seduerey OOP 2 25-09-2004 21:44:07
Objetos jfontane Varios 1 04-07-2003 15:39:04


La franja horaria es GMT +2. Ahora son las 22:53: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