Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar caption componentes (https://www.clubdelphi.com/foros/showthread.php?t=58479)

capo979 22-07-2008 01:19:28

Cambiar caption componentes
 
Hola Gente:

Necesito cambiar el caption de los componentes que hay en un form.
Por ejemplo tengo un formulario con Groupbox, labels, paneles, etc. Lo que quiero hacer es cambiar el caption de los componentes que esten en el formulario que tengan caption según lo que indique el caption.
Sin importar que componente tengo en el form

lo que había hecho era un for como el siguiente

for ind := 0 to ComponentCount -1 do
if (Components[ind] is Tlabel) then
TLabel(Components[ind]).Caption:= 'algo';

de esa forma puedo pero en realidad yo no se que componentes tengo, en este ejemplo que mostre pregunto si son labels pero en realidad puedo tener cualquier componente y quiero cambiar los que tengan caption

Alguno me puede dar una mano con esto

muchas gracias y saludos a todos

Al González 22-07-2008 02:13:51

En ese caso, en lugar de Components y ComponentCount, utiliza las propiedades Controls y ControlCount, respectivamente, con las cuales no necesitarás hacer ningún molde de tipo.

El único problema de esta solución es que no cambiará el título de los controles que estén dentro de otros controles, a menos que realices llamadas recursivas sobre el arreglo Controls de cada componente TWinControl del formulario.

Espero te sirva de orientación.

Saludos.

Al González. :)

P.D. EDITO: Aún puedes usar Components y ComponentCount preguntando en el If si el componente es un TControl (en lugar de TLabel). Pero para cualquiera de las dos soluciones deberás tener en cuenta que Caption es una propiedad protegida a nivel de TControl, por lo que puede resultarte necesario hacer lo que se conoce como "molde de acceso" declarando una clase hija de TControl y usarla en el "type cast" que haces.

Neftali [Germán.Estévez] 22-07-2008 09:04:23

Cita:

Empezado por capo979 (Mensaje 302097)
de esa forma puedo pero en realidad yo no se que componentes tengo, en este ejemplo que mostre pregunto si son labels pero en realidad puedo tener cualquier componente y quiero cambiar los que tengan caption

Supongo que lo que no quieres es tener un montón de IF seguidos preguntando por los diferentes tipos de componentes.
Para evitar eso puedes utilizar RTTI.

En mi página Web, en la sección de tips hay uno titulado "Modificar propiedades de controles en ejecución utilizando RTTI", que explica cómo utilizar RTTI para evitar tener que hacer justo cosas como estas...

Código Delphi [-]
// recorrer los controles
 for i := 0 to (Self.ComponentCount - 1) do begin
 
 // Es un Edit
 if (Components[i] is TEdit) then
 TEdit(Components[i]).Enabled := False; 
 // Es un LAbel
 if (Components[i] is TLabel) then
 TLabel(Components[i]).Enabled := False;
 // Es un ListBox
 if (Components[i] is TListBox) then
 TListBox(Components[i]).Enabled := False;

... 


La franja horaria es GMT +2. Ahora son las 04:29:00.

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