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 16-06-2011
Dclase Dclase is offline
Miembro
 
Registrado: ene 2007
Posts: 35
Poder: 0
Dclase Va por buen camino
Question Funcion cambiar propiedades componente(variable)

Saludos,

A ver si alguien me puede dar una mano con una funcion que estoy intentando hacer que consiste en lo siguiente:

Quiero a varios componentes de varios tipos Ej:
Edit1 : TEdit;
Edit2 : TEdit;
Edit...X : TEdit;
Image1 : TImage;
Image2 : T Image;
Image...X : TImage;

cambiar sus propiedades pero sin tener que llamar cada componente uno por uno, sino desde una variable, por ejemplo:

Código Delphi [-]
Function SeletItem(vVal: Integer): Variant;
Var
vEdit : TEdit;
vImage : TImage;
vNomEdit, vNomImg : String;
begin

For I:=1 To 10 Do
Begin

  vNomEdit := 'Edit'+IntToStr(I);
  vNomImg := 'Image'+IntToStr(I);
  xxxx // Aqui no se como pasar la variable al componente TEdit y TImage
  vEdit.Color := clWindow;
  vImage.Visible := False;

End;

  vNomEdit := 'Edit'+IntToStr(vVal);
  vNomImg := 'Image'+IntToStr(vVal);
  xxxx //  .....
  vEdit.Color := clRed;
  vImage.Visible := True;
....

o algo asi.

Nota: Lei por ahi algo parecido con una funcion "FindComponet" para asignar el nombre del componente pero no me funciona dentro de la funcion.

Última edición por Dclase fecha: 16-06-2011 a las 21:56:18. Razón: Correccion
Responder Con Cita
  #2  
Antiguo 16-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
quiza esto te pueda servir como una ayuda
lo utilizo para deshabilitar todos los edits y combobox que tenga en el form

Código Delphi [-]
 
      for i := 0 to (Self.ComponentCount - 1) do  begin
        if (Self.Components[i] is TDBEdit) or (Self.Components[i] is TComboBox) then begin
          TEdit(Self.Components[i]).Enabled := False;
        end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 16-06-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola

Código Delphi [-]
Procedure Cambio;
var
     i : Integer;
  comp : TComponent;
begin
  for i := 1 to 10 do begin
  comp := FindComponent('Edit' + IntToStr(i)); 
  TEdit(comp).Color:= clRed;
end;

Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 16-06-2011
Dclase Dclase is offline
Miembro
 
Registrado: ene 2007
Posts: 35
Poder: 0
Dclase Va por buen camino
umm... las propiedades "Self.ComponentCount" no me funcionan dentro de una funcion..
Responder Con Cita
  #5  
Antiguo 16-06-2011
Dclase Dclase is offline
Miembro
 
Registrado: ene 2007
Posts: 35
Poder: 0
Dclase Va por buen camino
Gracias Caral, con un Procedure ya la habia probado y me funciona la parte de cambiarlo todo, pero necesito que sea con una funcion para pasar el numero del que quiero dejar una propiedad diferente a los demas.
Responder Con Cita
  #6  
Antiguo 16-06-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola

Código Delphi [-]
Procedure Cambio;
var
   dif,  i : Integer;
  comp : TComponent;
begin
  Dif:= 5; // por ejemplo
  for i := 1 to 10 do begin
  comp := FindComponent('Edit' + IntToStr(i));
  If TEdit(comp).text <> IntToStr(Dif) then
  begin 
  TEdit(comp).Color:= clRed;
  end;
end;

Saludos

Edito: Corregido.
__________________
Siempre Novato

Última edición por Caral fecha: 16-06-2011 a las 22:22:59.
Responder Con Cita
  #7  
Antiguo 17-06-2011
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola. Puedes hacer un procedimiento con los parámetros que necesites tener en cuenta y/o cambiar
Código Delphi [-]
procedure CambiarPropiedad(Contenedor: TForm; NumeroElemento: Integer; NuevoColor: TColor, Activar:Boolean);
var i:Integer;
begin
  for i := 0 to (Contenedor.ComponentCount - 1) do  
  begin         
    if (Contenedor.Components[i] is TEdit)
    then begin
      if TEdit(Contenedor.Components[i]).Name = 'Edit+IntToStr(NumeroElemento)
      then begin       
        TEdit(Contenedor.Components[i]).Color := NuevoColor;         
        TEdit(Contenedor.Components[i]).Enabled := Activar;         
      end;
    end;
  end;
end;

Esto está bien para 2 o 3 clases de componentes, pero si son 6 o mas clases de componentes que quieres cambiar sus propiedades,
es mejor aprovecharse de la RTTI (esa gran desconocida)

Código Delphi [-]
procedure CambiarPropiedad(Contenedor: TForm; Clase: String; NuevoColor: TColor; Activar:Boolean);
var i:Integer;
PropInfo: PPropInfo;
begin
  for i := 0 to (Contenedor.ComponentCount - 1) do  
  begin         
      if Contenedor.Components[i].ClassNameIs(Clase)
      then begin
// 2.-Buscamos si el componente tiene la propiedad 'Color'
       PropInfo := TypInfo.GetPropInfo(Contenedor.Components[i].ClassInfo, 'Color') ;
       if Assigned(PropInfo)
       then begin
// 3.-Damos el valor que queremos a la propiedad 'Color'
         TypInfo.SetOrdProp(Contenedor.Components[i], PropInfo, LongInt(NuevoColor));
// 4.-Buscamos si el componente tiene la propiedad 'Enabled'
         PropInfo := TypInfo.GetPropInfo(Contenedor.Components[i].ClassInfo, 'Enabled') ;
         if Assigned(PropInfo) then
// 5.-Damos el valor que queremos a la propiedad 'Enabled'
           TypInfo.SetOrdProp(Contenedor.Components[i], PropInfo, LongInt(Activar));
       end;
    end;
  end;
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 17-06-2011 a las 09:38:29.
Responder Con Cita
  #8  
Antiguo 17-06-2011
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.275
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
Tal vez esta entrada pueda ayudar: "Modificar propiedades de controles en ejecución utilizando RTTI".

La ventaja de hacerlo con RTTI es que podría llamar a esta función:

Código Delphi [-]

// Otros ejemplos 
SetPropAsString(Components[i], 'Left', '10'); 
SetPropAsString(Components[i], 'Color', 'clRed');

Sin preocuparte del Tipo de control (TEdit, TCheckbox,...). Si tiene la propiedad y se llama así la cambiará.
__________________
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
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
Cambiar propiedades de la barra de scroll dmr1974 Varios 2 18-06-2008 20:04:02
Como asiganar IP a PC cambiar propiedades TCP/IP JuanErasmo API de Windows 2 08-09-2007 20:37:06
Cambiar Propiedades de ZConnection Maury Manosalva MySQL 4 12-12-2006 17:11:57
Llamar a una funcion almacenandola en una variable papulo Varios 15 02-02-2006 18:19:25
Llamada a una funcion que incluye en el nombre una variable papulo PHP 11 28-12-2005 16:38:19


La franja horaria es GMT +2. Ahora son las 17:10:53.


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