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-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Parent, ParentWindow, objetos y el error Control has no parent Window

Hola,

Houston, we have a problem. O sea, vente con la caja-herramientas Pepe que la hemos liado. Rápido. Venga. Vamos. Dale. Ya tenías que estar aquí, Pepe. Pero, creo que me estoy yendo por las ramas... pido disculpas y sigo adelante a ver si soy capaz de centrar el asunto que me preocupa y me está causando problemas y alguna cana tal vez. La madre que lo parió.

La verdad es que no sé cómo explicarlo bien. Por eso he tratado de montar "algo" para reproducir el problema, de modo que vosotros mismos podáis ver dicho problema con vuestros propios ojos. El problema se da con otros componentes, y en otra situación, pero, al cabo creo que he conseguido el mismo error, es decir, reproducir este.

En el archivo adjunto (proyecto de pruebas) lo veréis más claro, pero, básicamente se trata de lo siguiente:

Es menester crear un objeto dentro de una determinada ventana cuyo "Handle" conocemos

No puede usarse su propiedad "Parent", sino que hay que recurrir a "ParentWindow"

El objeto que hay que crear contiene a su vez un objeto en su interior

Este segundo objeto (dentro del primero) está al tanto del ratón, y, cuando se hace clic sobre el objeto, se hace una llamada a "SetFocus"

Es esta llamada a "SetFocus" la que "levanta" el error, puesto que dicho objeto "embebido" en el otro "No has parent Window"...

Ayer estuve varias horas intentando dar con una solución. Busqué mucho por Internet, y encontré bastante información, pero, nada clara (para mí) y, todo lo que intenté fue un fracaso, no funcionó.

Hoy he conseguido montar esta especie de "escenario" para poder probar el asunto más claramente, puesto que creo que si se consigue una solución para el problema en este escenario (ver archivo adjunto) la misma será válida también para cualquier otro similar.

No sé. A ver si me podéis echar una mano. No corre prisa alguna, empero, agradecería cualquier comentario acerca de qué puede estar pasando. Seguro que hay gente aquí mucho más experimentada que yo en estos menesteres. En todo caso muchas gracias a todos por la atención. De verdad. De la buena. Muchas gracias de antemano.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 23-07-2008 a las 20:15:40.
Responder Con Cita
  #2  
Antiguo 06-08-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Amigo no se si a los demas tambien, pero a mi no me deja descargar el adjunto
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 06-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Y por que en vez de usar Create no usas CreateParented.

Es decir:
Código Delphi [-]
FEmbeddedPanel := TEmbeddedPanel.CreateParented(Self.Handle);

FObjectPanel := TObjectPanel.CreateParented(Self.Handle);
Responder Con Cita
  #4  
Antiguo 06-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vaya. Es cosa de los permisos de usuario. Sé que no es lo mismo, porque tendrás que hacer un esfuerzo más, pero, aquí está el código fuente del asunto. Tienes que incluirlo en el formulario principal de un proyecto nuevo de Delphi, creo que me entiendes.

Código Delphi [-]
unit UMainFrm;

interface

uses
  Forms, StdCtrls, ExtCtrls, Classes, Controls;

type
  TEmbeddedPanel = class(TPanel)
  protected
    procedure MouseDown(Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer); override;
  end;

type
  TObjectPanel = class(TPanel)
  private
    FEmbeddedPanel: TEmbeddedPanel;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;
  end;

type
  TmainFrm = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FObjectPanel: TObjectPanel;
  end;

var
  mainFrm: TmainFrm;

implementation

{$R *.dfm}

{ TEmbeddedPanel }

procedure TEmbeddedPanel.MouseDown(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  SetFocus();
end;

{ TObjectPanel }

constructor TObjectPanel.Create(AOwner: TComponent);
begin
  inherited;
  FEmbeddedPanel := TEmbeddedPanel.Create(self);
  InsertControl(FEmbeddedPanel);
  Self.Top := 10;
  Self.Left := 10;
  Self.Width := 100;
  Self.Height := 100;
  with FEmbeddedPanel do
  begin
    Top := 10;
    Left := 10;
    Width := 50;
    Height := 50;
  end;
end;

destructor TObjectPanel.Destroy();
begin
  FEmbeddedPanel.Free();
  inherited;
end;

{ TmainFrm }

procedure TmainFrm.FormCreate(Sender: TObject);
begin
  FObjectPanel := TObjectPanel.Create(nil);
  FObjectPanel.ParentWindow := self.Handle;
end;

procedure TmainFrm.FormDestroy(Sender: TObject);
begin
  FObjectPanel.Free();
end;

end.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 06-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias por tu respuesta Domingo. Juraría que he probado con "CreateParented", pero, como no estoy seguro de haberlo hecho con todos los componentes implicados, voy a hacerlo ahora mismo sobre el "escenario de pruebas" y, si funciona, lo haré en la aplicación real en que tiene que ir bien.

Ahora mismo cuento lo que sea. Gracias de nuevo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 06-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vale. No funciona del todo bien Domingo. De hecho creo que ya probé con ello, lo que pasa es que he probado ya tantas cosas que ni me acuerdo... lo digo en serio.

Ahora bien, en el ejemplo, efectivamente, puedes usar el "CreateParented" y el error no aparece. Sin embargo, si el panel de ejemplo "usara" tuviera que responder al teclado me temo que no lo haría.

¿Me temo? Bueno. No he podido hacer la prueba, pero, sí la he hecho en la aplicación real en que estoy teniendo el problema. Efectivamente, con el "CreateParent" no se da el error, pero, tampoco pueden manejarse el componente con el teclado.

Además, usando el CreateParented se produce una violación de acceso al cerrar la aplicación en una de cuyas ventanas "incrusto" el componente de marras. Bien. Tal vez esto pueda evitarse (tal vez no se prevén las consecuencias del CreateParented).

Pero, como digo, lo que más me "preocupa" de la solución es que aunque no aparece el error que menciono al principio, tampoco el componente es capaz de reaccionar al teclado, con lo que pierde parte de su funcionalidad.

De hecho, y como el problema se produce con sendas llamadas a "SetFocus", yo puedo no hacer estas, es decir, evitarlas, y de este modo todo va perfecto... salvo que el componente no actúa con el teclado... o sea que estaría en las mismas.

En fin. Gracias de todas formas Domingo. A lo mejor el ejemplo que he preparado no sirve muy bien, o habría que hacer algún cambio para comprobar que efectivamente el panel embebido puede actuar con el teclado.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 06-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Soy yo otra vez... qué pesado... Pues nada. Que probando si el panel embebido puede responder al teclado creándose mediante el "CreateParent"... así es. Es decir, que el asunto funciona Domingo, pero, funciona en el ejemplo, no en la aplicación real en que tengo los problemas.

Sigo liado haciendo pruebas. Me **** en la ****.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 06-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Caramba !!! que costumbre mas fea tienen los usuarios novatos de preguntar una cosa, cuando en realidad quieren saber otra

De que se trata en realidad, si hace falta podemos recurrir a la api
Responder Con Cita
  #9  
Antiguo 06-08-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Dec, acabo de modificar tu codigo

Código Delphi [-]
TEmbeddedPanel = class(TEdit)

los create segun dijo seoane y si me funciona con el teclado, o sea pude escribir en el, no se que otra funcionalidad esperas con el teclado, al menos eso fue lo que te entendi


PD. Creo que respondimos los tres a la vez
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
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
Control has not parent Window peripla Varios 7 06-07-2007 04:26:27
In Design: Control no has parent window Negegoca Varios 1 26-01-2007 17:26:36
Array de controles - Control has no parent window SyncReuter OOP 8 24-01-2007 02:21:14
error con el parent window antonio peña Varios 1 04-10-2006 10:18:50
Ayuda: Control Has No Parent Window pelaorb68 Varios 10 20-12-2005 20:36:26


La franja horaria es GMT +2. Ahora son las 17:45:29.


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