| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Jue 13 May, 2004 10:10 pm Asunto: Modificar la propiedad de un componente |
|
|
Hola a todos.
Necesito consejo. Vamos a ver, necesito acceder a cierto componente (debo de leer de un fichero el componente que es) y cambiarle la propiedad Caption.
Dicho de otra forma, en un fichero de texto tengo por ejemplo:
LabeledEdit1=Directorio
Entonces debo acceder al componente LabeledEdit1 y en la propiedad Caption debo poner "Directorio".
Esto dicho asi es muy simple:
| Código: |
LabeledEdit1->Caption="Directorio";
|
El problema esta en que el compomente solo lo se en tiempo de ejecucion y no en modo diseño.
El componente lo puedo buscar de la siguiente forma:
| Código: |
for (int c=0;c<ComponentCount; c++)
{
if (Components[c]->Name=="LabeledEdit1";
{
// .... aqui debo cambiarlo
}
}
|
Y aqui me surge la duda. Como accedo al componente. ¿Me entendeis?
Bueno haber si me podeis orientar. Un saludito y gracias. |
|
| Volver arriba |
|
 |
NooB Ens

Registrado: 30 Abr 2003Mensajes: 42Ubicación: Valencia
|
Publicado: Vie 14 May, 2004 12:28 am Asunto: |
|
|
lo que quieres es cambiar el "Caption" de un Label a mitad ejecucion?? _________________ Saludetes |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Vie 14 May, 2004 6:51 am Asunto: |
|
|
Correcto.
Pero sin saber a priori que componente es. Pueder un Label, un GroupBox, un MainMenu, etc.
Como digo, el componente a modificar solo lo se mitad de ejecucion. De ahi el problema.
Un saludito. |
|
| Volver arriba |
|
 |
NooB Ens

Registrado: 30 Abr 2003Mensajes: 42Ubicación: Valencia
|
Publicado: Vie 14 May, 2004 1:12 pm Asunto: |
|
|
Uff...
Ni idea... Lo siento... _________________ Saludetes |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 15 May, 2004 5:49 pm Asunto: |
|
|
Pues asi como lo estas busacando es la manera de Acceder a el
| Código: |
if (Components[c]->Name=="LabeledEdit1";
{
TControl * obj;
obj= (TControl *)Components[c]; // creas un acceso a el
obj->Caption = "lo que quieras"; // lo modificas
}
|
Espero te sirva saludos _________________
 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Sab 15 May, 2004 7:07 pm Asunto: |
|
|
Gracias Cesar por tu respuesta, pero ...
[C++ Error] Unit1.cpp(188): E2247 'TControl::Caption' is not accessible
Un saludito. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 15 May, 2004 7:38 pm Asunto: |
|
|
Si estas usando BCB6, una forma de hacerlo:
| Código: | //#include <typinfo.hpp>
for (int i=0; i < ControlCount; i++)
{
TControl* control = Controls[i];
if (control->Name == "LabeledEdit1")
{
if (IsPublishedProp(control, "Caption"))
SetPropValue(control, "Caption", "Esto es una prueba");
}
} |
|
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Sab 15 May, 2004 8:39 pm Asunto: |
|
|
Muchas gracias Leo.
Lo acabo de probar y funciona. Lo que pasa es para aquellas propiedades en las cuales el "Caption" es una propiedad no es problema (caso Label, etc) pero para aquellas en las cuales el "Caption" es una subpropiedad no lo coge (caso del LabeledEdit. El "caption" esta dentro de la propiedad EditLabel).
Label1->Caption"lo que sea";
LabeledEdit1->EditLabel->Caption="lo que sea";
¿Hay alguna forma de recorrer las distintas subpropiedades buscando una propiedad concreta?. Por que asi, si podria modificar en estos casos.
Gracias nuevamente y un saludito |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Sab 15 May, 2004 9:16 pm Asunto: |
|
|
O pasarle:
AnsiString valor;
valor="LabeledEdit1->EditLabel->Caption";
Y que busque entre las propiedades este 'valor'. De esta forma se podria ir directamente a la propiedad a modificar.
De esta forma es mejor. Porque por ejemplo en el caso de un TMainMenu, pueden haber varios Caption, y ahi podrian haber problemas.
Lo mismo ocurriria en el caso de un StatusBar. Pero en este caso no hay caption sino text.
StatusBar1->Panels->Items[0]->Text="lo que sea";
De ahi la necesidad de pasarle este 'valor'. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 15 May, 2004 9:31 pm Asunto: |
|
|
Esto funciona, aunque habría que probarlo mejor:
| Código: | for (int i=0; i < ControlCount; i++)
{
TComponent* comp = Components[i];
if (comp->Name == "LabeledEdit1")
{
if (IsPublishedProp(comp, "Caption"))
SetPropValue(comp, "Caption", "Esto es una prueba");
else
{
// Buscamos entre los subcomponentes, si los tiene,
// el primero que tenga la propiedad "Caption"
for (int j=0; j < comp->ComponentCount; j++)
{
TComponent* subComp = comp->Components[j];
if (IsPublishedProp(subComp, "Caption"))
{
SetPropValue(subComp, "Caption", "Esto es una prueba");
break;
}
}
}
}
} |
|
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 15 May, 2004 9:38 pm Asunto: |
|
|
Me refiero a que funciona para la pregunta anterior, la última la acabo de ver después de responder.
Si necesitas que actúe para propiedades con nombres diferentes según el componente, como una barra de estado, lo que puedes hacer es comprobar que clase es o si quieres hacerlo un poco mas global, de que componente deriva. |
|
| Volver arriba |
|
 |
|