Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
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 03-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cuantos elementos hay en un objeto

A ver como me explico. En un evento OnExit de un TLabeledEdit tengo, en parte, este código:
Código PHP:
void __fastcall TfTablas::EntidadExit(TObject *Sender)
{
     
TCustomEdit *Edit dynamic_cast<TCustomEdit *>(Sender);

     try
     {
          [
Verificaciones]
     }
     catch(
Exception &Exc)
     {
          
Application->ShowException(&Exc);
          
Edit->SetFocus();
          return;
     }

Una vez que he hecho las comporbaciones necesarias necesito "ver" el resto de elementos de ese objeto (en todos los casos es un TPanel) y estoy haciendo esto:
Código PHP:
TComponent *Source Edit->Parent;
TPanel *pParent static_cast<TPanel*>(Source);
int nItem pParent->ComponentCount
Todos los TPanel del formulario tienen al menos un TLabeledEdit pero entre por donde entre, al llegar a esa última línea siempre me da un valor cero. He comprobado que ese Edit->Parent coincide con el que debiera ser, pero ya no sé como coger el toro por los cuernos.
Responder Con Cita
  #2  
Antiguo 03-05-2018
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que lo que buscas es la propiedad ControlCount en lugar de ComponentCount.

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 03-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La propiedad Components de un componente enumera todos los elementos que comparten el mismo Owner (el componente responsable de transmitir y liberar el primero).

Es muy probable que en tu caso el Owner de los componentes que residen en el TPanel sea el formulario y no el panel, puedes verificalo con:
Código PHP:
  ShowMessage(LabeledEdit1->Owner->Name); 
A diferencia de la propiedad Components, la propiedad Controls contiene todos los componentes que comparten el mismo Parent, entonces esa es la que deberías usar.

Un ejemplo:
Código PHP:
void __fastcall TForm1::LabeledEdit1Exit(TObject *Sender)
{
  
TWinControlWC = (static_cast<TLabeledEdit*>(Sender))->Parent;

  
ShowMessage(Format("Parent: %s%sItems: %d",
    
ARRAYOFCONST(((String)WC->Name, (String)"\n", (int)WC->ControlCount))));
  
// WC->Name  = LabeledEdit1->Parent->Name

Saludos

Edito: Lo dicho por roman. (tuve que atender un llamado durante la edición )
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-05-2018 a las 16:50:46.
Responder Con Cita
  #4  
Antiguo 03-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias por las respuestas. He estado probando.

Este es el panel concreto en el que estoy haciendo las pruebas. Tiene dos TLabelEdit, dos TLabel y dos TComboBox, además del propio TPanel. Sin embargo, poniendo el código que ma ha sugerido ecfisa, la propiedad ControlCount me dice que tiene ocho elementos y eos me tiene muy despistado. ¿Cuál o cuáles son los que sobran?
Responder Con Cita
  #5  
Antiguo 03-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Vale. Ya he encontrado la solución. A la hora de "ver" los controles hago esto:
Código PHP:
TWinControl *wEdit Edit->Parent;
TControl *Control;

for (
nItem 0nItem wEdit->ControlCountnItem ++)
{
     
Control wEdit->Controls[nItem];
     if (
Control->ClassNameIs("TLabeledEdit"))
     {
          [
Codigo para el TLabeled]
     }
     if (
Control->ClassNameIs("TComboBox"))
     {
          [
Código para el TComboBox]
     }

No sé si será el mejor método, pero me funciona a la perfección. Muchas gracias a los dos por la ayuda.
Responder Con Cita
  #6  
Antiguo 03-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Angel.Matilla Ver Mensaje
...
Este es el panel concreto en el que estoy haciendo las pruebas. Tiene dos TLabelEdit, dos TLabel y dos TComboBox, además del propio TPanel. Sin embargo, poniendo el código que ma ha sugerido ecfisa, la propiedad ControlCount me dice que tiene ocho elementos y eos me tiene muy despistado. ¿Cuál o cuáles son los que sobran?
Acabo de comprobar que el problema lo ocasiona el TLabeledEdit y reconozco que al no haber usado ese componente, nunca había notado el detalle.

Basta con que haya una aparición del control para que la propiedad ControlCount del contenedor se incremente en uno y la propiedad ControlCount se incrementa en uno por cada TLabeledEdit añadido (es decir que un TPanel que incluya tres LabelEdits, tiene en la propiedad ControlCount el valor seis).

Tal vez el incremento se deba a que el TLabeledEdit es un control de edición que tiene asociado un TLabel...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 03-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Busqué en pero no pude encontrar referencia a ese comportamiento .

Se me ocurren dos soluciones, la primera mediante una función miembro:
Código PHP:
...
class 
THWinControl : public TWinControl {
public:
  
int CtrlCount() {
    
int n ControlCount;

    for(
int i 0ControlCounti++)
      if(
Controls[i]->ClassNameIs("TLabeledEdit")) n--;
    return 
n;
  }
};
...

/* Ej. de uso */
void __fastcall TForm1::Panel1Exit(TObject *Sender)
{
  
THWinControlHWC static_cast<THWinControl*>(LabeledEdit1->Parent);
  
Label2->Caption HWC->CtrlCount();

o mas simple, mediante una función:
Código PHP:
...
int CtrlCount(TWinControlWC)
{
  
int n WC->ControlCount;

  for(
int i 0WC->ControlCounti++)
    if(
WC->Controls[i]->ClassNameIs("TLabeledEdit")) n--;

  return 
n;
}

/* Ej. de uso */
void __fastcall TForm1::Panel1Exit(TObject *Sender)
{
   
Label2->Caption =  CtrlCount(LabeledEdit1->Parent);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-05-2018 a las 03:10:56.
Responder Con Cita
  #8  
Antiguo 04-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Basta con que haya una aparición del control para que la propiedad ControlCount del contenedor se incremente en uno y la propiedad ControlCount se incrementa en uno por cada TLabeledEdit añadido (es decir que un TPanel que incluya tres LabelEdits, tiene en la propiedad ControlCount el valor seis).

Tal vez el incremento se deba a que el TLabeledEdit es un control de edición que tiene asociado un TLabel...

Saludos
Efectivamente. Me he dado cuenta al hacer las pruebas; aparecen para cada TLabeledEdit dos elementos: un Edit y un SubLabel. De todas formas con el código que puse ayer me vale porque lo que necesito es comprobar que todos los TLabeledEdit y TComboBox tienen contenido.
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
referencia a un objeto no establecida como instancia de un objeto Beare MySQL 4 30-12-2015 16:49:54
Analizar elementos web Furyxe Internet 4 28-07-2011 13:16:05
XML y sus elementos papulo Varios 5 01-03-2007 11:13:30
Dos elementos en un ComboBox BuenaOnda Varios 7 16-01-2007 18:21:26
Elementos no imprimibles Igna Impresión 4 12-01-2004 18:53:28


La franja horaria es GMT +2. Ahora son las 23:34:32.


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