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 06-06-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Obtener componente padre

Hola gente del club, en una de mis funciones quiero obtener el componente padre de un dbedit y trabajar con este, mi problema es:

Código Delphi [-]
var
    vComponente: TPageControl;

  if (vForm <> nil) then
  begin
    for i:= 0 to vForm.ComponentCount - 1 do
    begin
      if (vForm.Components[i] is TDbEdit) then
      begin
        vComponente:= TDbEdit(vForm.Components[i]).GetParentComponent; <---- aqui
        if (vComponente is TPageControl) then
        begin
          for a:= 0 to vComponente.Tabs.Count - 1 do
          begin
            .....

Al compilar me da una incompatibilidad entre tipos TPageControl y TComponent. Como puedo o bien pasar TComponent a TPageControl? hay alguna otra propiedad que devuelva el padre con el tipo de clase exacta?

Slds.
Responder Con Cita
  #2  
Antiguo 06-06-2012
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.286
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
Cita:
Empezado por Jere_84 Ver Mensaje
Hola gente del club, en una de mis funciones quiero obtener el componente padre de un dbedit y trabajar con este, mi problema es:
Prueba así:

Código Delphi [-]
var
    vComponente: TComponent;

...

        if (vComponente is TPageControl) then
        begin
          for a:= 0 to TPageControl(vComponente).Tabs.Count - 1 do
          begin
            .....
__________________
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
  #3  
Antiguo 06-06-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por Jere_84 Ver Mensaje
Hola gente del club, en una de mis funciones quiero obtener el componente padre de un dbedit y trabajar con este, mi problema es:
Hola... prueba con este código a ver si te sirve.

Código Delphi [-]
function GetParentOfType(pClassType : TClass;
                       pComponent : TComponent;
                       var vComponent : TComponent) : Boolean;
  var
    lComponent : TComponent;
    lBoFound : Boolean;
begin
  lBoFound := False;
  lComponent := pComponent.GetParentComponent;
  while (not lBoFound) and Assigned(lComponent) do
  begin
    if lComponent.ClassType = pClassType then
    begin
      vComponent := lComponent;
      lBoFound := True;
    end
    else
      lComponent := lComponent.GetParentComponent;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
  var
    lComponent : TComponent;
    i : Integer;
    lTabSheet : TTabSheet;
begin
  for i := 0 to Self.ComponentCount - 1 do
  begin
    if Self.Components[i] is TEdit then
    begin
      if Length(Trim(TEdit(Self.Components[i]).Text)) = 0 then
      begin
        if GetParentOfType(TTabSheet, Self.Components[i], lComponent) then
        begin
          lTabSheet := TTabSheet(lComponent);
          if GetParentOfType(TPageControl, lTabSheet, lComponent) then
          begin
            TPageControl(lComponent).ActivePage := lTabSheet;
            TEdit(Self.Components[i]).SetFocus;
          end;
        end;
      end;
    end;
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #4  
Antiguo 06-06-2012
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
Bueno, yo detecto varias cosillas, primero:
Código Delphi [-]
vComponente:= TDbEdit(vForm.Components[i]).GetParentComponent; <---- aqui

el parent de un dbedit en un pagecontrol es un TTabSheet, y despues el pagecontrol...
otra, la linea de codigo hace un cast inutil, porque da lo mismo si fuera asi:
Código Delphi [-]
vComponente:= vForm.Components[i].GetParentComponent;
//para que nos regrese el pagecontro, podria ser asi:
vComponente:= vForm.Components[i].GetParentComponent.GetParentComponent; //si doble, para que regrese 2 atras...

yo pienso que el error de la incompatibilidad es en esta linea:

Código Delphi [-]
for a:= 0 to vComponente.Tabs.Count - 1 do

porque vComponente es del tipo Component, no TPageControl, aqui si, hay que hacer el Cast...

Última edición por luisgutierrezb fecha: 06-06-2012 a las 16:01:41.
Responder Con Cita
  #5  
Antiguo 06-06-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Cita:
Empezado por Neftali Ver Mensaje
Prueba así:

Código Delphi [-]
var
    vComponente: TComponent;

...

        if (vComponente is TPageControl) then
        begin
          for a:= 0 to TPageControl(vComponente).Tabs.Count - 1 do
          begin
            .....
Gracias Neftali. Funciona.

Slds.
Responder Con Cita
  #6  
Antiguo 06-06-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Cita:
Empezado por luisgutierrezb Ver Mensaje
Bueno, yo detecto varias cosillas, primero:
Código Delphi [-]
vComponente:= TDbEdit(vForm.Components[i]).GetParentComponent; <---- aqui

el parent de un dbedit en un pagecontrol es un TTabSheet, y despues el pagecontrol...
otra, la linea de codigo hace un cast inutil, porque da lo mismo si fuera asi:
Código Delphi [-]
vComponente:= vForm.Components[i].GetParentComponent;
//para que nos regrese el pagecontro, podria ser asi:
vComponente:= vForm.Components[i].GetParentComponent.GetParentComponent; //si doble, para que regrese 2 atras...

yo pienso que el error de la incompatibilidad es en esta linea:

Código Delphi [-]
for a:= 0 to vComponente.Tabs.Count - 1 do

porque vComponente es del tipo Component, no TPageControl, aqui si, hay que hacer el Cast...
Es cierto, vi que el GetParentComponent volvía a tener la misma función dentro y no entendí porque ahora se que es para volver dos atrás muchas gracias.
Encare la función de otra manera la cambie de la siguiente forma:
1º Recorro el Form.
2º Pregunto si el componente es un PageControl.
3º Me paro en en la pagina numero 1, obtengo y recorro los componentes del tabsheet.
Por ultimo recién en ese momento pregunto si el componente es un DbEdit y si esta en null armo un mensaje con su propiedad caption.
Gracias por la respuesta.

Slds.
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
Obtener el directorio padre de una ruta diego11 Varios 4 26-11-2007 19:56:14
Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo jzginez OOP 5 22-06-2007 21:40:51
Obtener Nombre De Componente dany2006 C++ Builder 12 10-11-2006 06:24:45
obtener componente RxDbGrid? Nidia H. Ochoa OOP 3 27-03-2004 21:16:17
Acceso a componente de formulario padre???? mguixot OOP 6 11-06-2003 13:54:19


La franja horaria es GMT +2. Ahora son las 10:32:36.


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