Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 20-03-2012
prietor prietor is offline
Registrado
NULL
 
Registrado: mar 2012
Posts: 2
Poder: 0
prietor Va por buen camino
Thumbs up

Después de mucho buscar, he encontrado un workaround relativamente limpio basado en controlar el destroy y create del handler de la ventana del TOleControl embebido para cambiarlo de Parent a nivel de handler de Windows. Al parecer la VCL no está diseñada para tratar correctamente el ciclo de destroy-create con dockables. Es un error de diseño de la VCL...

La solución más sencilla pasa por tocar el wrapper TLB tras importar el ActiveX. Para mi caso concreto, que utilizo un TSftTree embebido en un TForm dockable:

Código Delphi [-]
...
TSftTree = class(TOleControl)
  private
    ...
    ActualHandle: HWND;
  protected
    ...
    procedure DestroyWnd; override;
    procedure CreateWnd; override;
 public
...
implementation
uses ComObj, Controls, Forms;
...
procedure TSftTree.DestroyWnd;
begin
  if (csDestroying in ComponentState) then
    inherited//TOleControl:estroyWnd();
  else
  begin
    //Parent to the Application window which is 0x0 in size
    windows.SetParent(WindowHandle,Forms.Application.Handle);
    //save the WindowHandle
    ActualHandle := WindowHandle;
    //set it to 0 so Createwnd will be called again...
    WindowHandle := 0;
  end;
end;

procedure TSftTree.CreateWnd;
begin
  if (ActualHandle <> 0) then
  begin
    if (IsWindow(ActualHandle)) then
    begin
      WindowHandle := ActualHandle;
      ActualHandle := 0;
      windows.SetParent( WindowHandle, TWinControl(Self).Parent.Handle );
      //Force a resize on the client window
      MoveWindow( WindowHandle, 0, 0, TWinControl(Self).Parent.Width,TWinControl(Self).Parent.Height,true );
      //quick exit because there is NO need to create the window
      exit;
    end
  end;
  inherited;
end;
...

Un saludo!
Responder Con Cita
 


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
Componente para docking lafirma OOP 8 15-12-2011 17:12:38
email yahoo, no muestra contenido..muestra todo menos contenido. sakuragi Linux 5 29-02-2008 18:11:27
docking Io Varios 4 07-08-2006 14:58:51
borrado logico @-Soft Conexión con bases de datos 0 25-06-2004 14:32:22
Borrado de un .pas? danytorres Varios 5 30-12-2003 17:28:33


La franja horaria es GMT +2. Ahora son las 09:05:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi