Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2018
emeritos emeritos is offline
Miembro
NULL
 
Registrado: may 2003
Posts: 299
Poder: 16
emeritos Va por buen camino
Funcion para leer compomentes

Buenas dilferos.

¿ Existe alguna funcion, procedimiento... que pueda leer todos los nombres de los compomentes visuales que existan en un From?

Gracias.
Responder Con Cita
  #2  
Antiguo 18-05-2018
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
NULL
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.005
Poder: 15
newtron Va camino a la fama
Hola, mira a ver si esto es lo que necesitas.

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  N: SmallInt;
begin
  for N := 0 to ComponentCount - 1 do begin
    ShowMessage(Components[N].Name);
  end;

end;
Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 18-05-2018
emeritos emeritos is offline
Miembro
NULL
 
Registrado: may 2003
Posts: 299
Poder: 16
emeritos Va por buen camino
Gracias me sirve, pero como puedo leer dentro de ese componente sus propiedades como por ejemplo Height.

Lo que estoy intentando hacer es una funcion donde lo se paso los nombres de los componentes visuales y el me pueda leer y cambiar algunas propiedades. Lo hago para cuando se cambia la resolucion poder adaptar el from a el (No encuentro un procedimiento ya realizado para que al cambiar la resolucion o las dimensiones del from en tiempo de ejecucion pueda adaptarlo automaticamente).


Gracias.
Responder Con Cita
  #4  
Antiguo 18-05-2018
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
NULL
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.005
Poder: 15
newtron Va camino a la fama
Hola de nuevo.

A ver si esto te sirviera:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
 N: SmallInt;
begin
    for N := 0 to ComponentCount -1 do begin
      if Components[N].Name =  'Edit1' then begin
       (Components[N] as TEdit).width := 100;
      end;
    end;
end;
Igual que modificas las propiedades de un edit puedes cambiar las propiedades de cualquier control, incluido el formulario.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 18-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.695
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Hola de nuevo.
A ver si esto te sirviera:
Código:
procedure TForm1.Button1Click(Sender: TObject);
var
 N: SmallInt;
begin
    for N := 0 to ComponentCount -1 do begin
      if Components[N].Name =  'Edit1' then begin
       (Components[N] as TEdit).width := 100;
      end;
    end;
end;
Igual que modificas las propiedades de un edit puedes cambiar las propiedades de cualquier control, incluido el formulario.
Saludos
Por seguridad, en lugar de comparar por el nombre, se debería comparar por el tipo/clase al que pertenece. En lugar de esto:

Código Delphi [-]
if Components[N].Name =  'Edit1' then begin
Mejor de esta forma:
Código Delphi [-]
if Components[N] is TEdit then begin
Si el "Edit1" es una TLabel, por ejemplo, se produciría un error "gordo".
No sé si todo el mundo nombra los componentes según su clase, pero es más seguro la opción que he citado, creo.
Responder Con Cita
  #6  
Antiguo 18-05-2018
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
NULL
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.005
Poder: 15
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Por seguridad, en lugar de comparar por el nombre, se debería comparar por el tipo/clase al que pertenece. En lugar de esto:

Código Delphi [-]if Components[N].Name = 'Edit1' then begin

Mejor de esta forma:
Código Delphi [-]if Components[N] is TEdit then begin

Si el "Edit1" es una TLabel, por ejemplo, se produciría un error "gordo".
No sé si todo el mundo nombra los componentes según su clase, pero es más seguro la opción que he citado, creo.
En eso estamos de acuerdo pero entiendo que si buscas el componente por su nombre sabes a qué clase pertenece, ¿no?

__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 18-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.695
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
En eso estamos de acuerdo pero entiendo que si buscas el componente por su nombre sabes a qué clase pertenece, ¿no?
Ummm... no

¿Cómo sabes que Edit1 es un TEdit?
Y si en lugar de Edit1 lo has nombrado: CodigoDelCliente ¿cómo sabes de qué clase es?
Incluso lo más habitual: edCodigoCliente, lbCodigoCliente, etc. ¿cómo sabes que el primero es un TEdit y el segundo un TLabel?
Y lo mismo para otros prefijos edtCodCli, lblCodCli, etc.

No existe un método fijo para nombrar los componentes, y por su nombre es imposible saber de qué tipo es.


Aunque lo mismo tengo la cabeza en otro sitio (que la tengo) y no me he dado cuenta de lo que dices
Responder Con Cita
  #8  
Antiguo 18-05-2018
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
NULL
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.005
Poder: 15
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Cómo sabes que Edit1 es un TEdit?

Hombre.... si yo que estoy creando un formulario incluyo un Edit al que llamo Edit1 ¿sé que es un edit?
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 18-05-2018
iMia iMia is offline
Miembro
NULL
 
Registrado: jul 2010
Posts: 60
Poder: 9
iMia Va por buen camino
Tal y como lo plantea Casimiro, yo lo veo como mejor opción... Más abstracto, más genérico. más elegante, trasladable, reaprovechable, etc...
Por que si no no hace falta hacer un bucle que se recorra todos los objetos... con hacer n llamadas a FindComponent('Editn').With := x; ya estaría...

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
 N: SmallInt;
begin
    for N := 0 to pred(ComponentCount) do
      if (Components[N] is TEdit) 
        or (Components[N] is TMemo)
        or ....   then 
        (Components[N] as TWinControl).height  :=  (Components[N] as TWinControl).height *2;
end;
Responder Con Cita
  #10  
Antiguo 18-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.695
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Hombre.... si yo que estoy creando un formulario incluyo un Edit al que llamo Edit1 ¿sé que es un edit?
Es que no todos tenemos costumbres de ese tipo, ya digo que he visto personas que nombra los componentes como codigocliente, telefonomovil, tarifamedia, etc. ¿y de qué tipo es cada uno? cualquiera sabe.
Responder Con Cita
  #11  
Antiguo 18-05-2018
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
NULL
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.005
Poder: 15
newtron Va camino a la fama
Cheeeeeeeeeeeeeeeeeeeeeeeee.... pues si que estoy tonto.


Si sabes el nombre del componente lo atacas directamente.
__________________
Be water my friend.
Responder Con Cita
  #12  
Antiguo 18-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.695
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Si sabes el nombre del componente lo atacas directamente.
Pues sí, tú sí que lo sabes, pero no suele ser buen método ese.
Cualquier día le cambias el nombre por cualquier motivo y deja de funcionar.

Pero, bueno, para un caso puntual como este puede servir perfectamente.
Responder Con Cita
  #13  
Antiguo 19-05-2018
orodriguezca orodriguezca is offline
Miembro
NULL
 
Registrado: ene 2009
Posts: 187
Poder: 10
orodriguezca Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Si sabes el nombre del componente lo atacas directamente.
Hay ocasiones en la que no sabes el nombre del componente porque el formulario se crea de forma dinámica, ya sea a partir de un archivo .ini o de una base de datos. En esos casos lo sensato es saber a que clase pertenece el componente para asignar valor a alguna de sus propiedades porque el nombre del componente simplemente no lo conoces.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
ayuda a instalar compomentes X86 o X64 en DX10.1 con windows 10pro 64bits darkbits Varios 0 02-07-2016 18:56:57
problema para leer txt mariaesde Varios 4 02-09-2008 16:06:51
funcion para leer archivo jw4v32 API de Windows 1 26-04-2008 02:13:53
Compomentes TIbo Neeruu Varios 0 06-04-2008 04:01:15
Necesito crear un permiso para escribir pero no para leer federiconqn21 Conexión con bases de datos 5 07-07-2006 20:13:47


La franja horaria es GMT +2. Ahora son las 08:28:30.


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