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 24-11-2015
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 de nuevo,

Más sorpresas... me encuentro en la unidad "SHDocVw_EWB" del componente "EmbeddedWB" con lo siguiente:

Código Delphi [-]
uses
  EwbAcc, Windows, ActiveX, Classes 
  {$IFDEF USE_OleCtrlsFix}, OleCtrlsFix{$ENDIF}, OleCtrls, 
   OleServer, StdVCL{$IFDEF DELPHI6_UP}, Variants{$ENDIF};

Y aquí la unidad en cuestión:

Código Delphi [-]
unit OleCtrlsFix;

interface

uses
  OleCtrls, Windows, Messages;

type
  TOleControlFix = class(TOleControl)
  protected
  //  procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    function GetIDispatchProp(Index: Integer): IDispatch;
    function GetIUnknownProp(Index: Integer): IUnknown;
  end;

implementation

{ TOleControlFix }

{procedure TOleControlFix.WMPaint(var Message: TWMPaint);
var
  PS: TPaintStruct;
begin
  if Message.DC = 0 then
  begin
    BeginPaint(Handle, PS);
    EndPaint(Handle, PS);
  end;
end; }

function TOleControlFix.GetIDispatchProp(Index: Integer): IDispatch;
var
  Temp: TVarData;
begin
  GetProperty(Index, Temp);
// Result := IDispatch(Temp.VDispatch); ***** Change to:
  Pointer(Result) := Temp.VDispatch; //this avoids the extra AddRef
end;

function TOleControlFix.GetIUnknownProp(Index: Integer): IUnknown;
var
  Temp: TVarData;
begin
  GetProperty(Index, Temp);
// Result := IDispatch(Temp.VUnknown); ***** Change to:
  Pointer(Result) := Temp.VUnknown; //this avoids the extra AddRef
end;
end.

Voy a ver qué pasa con "USE_OleCtrlsFix"... pero, ¿no es esto algo parecido a lo que pretendemos hacer? Ay madre...

Actualizo: No; definitivamente no es lo que se pretende hacer, empero, tal vez sea suficiente y una forma de no tocar la VCL... desde luego acabo de encontrar dicha opción desactivada en el archivo "EWB.inc": voy a probar a activarla a ver qué ocurre...
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 24-11-2015 a las 19:45:30.
Responder Con Cita
  #2  
Antiguo 24-11-2015
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,

Aquí el resultado de algunas pruebas. La opción "USE_OleCtrlsFix" que viene con el componente "EmbeddedWB" está desactivada por defecto y marcada como "experimental". Si la activamos, he comprobado en mi programa que no se soluciona el problema. Resulta que aunque el método "GetIDispatchProp" de la clase interpuesta se ejecuta, también lo hace el de la unidad "Vcl.OleCtrls.pas" (?) de modo que el problema persiste.

Lo único que parece solucionar el problema es el parche en la unidad "Vcl.OleCtrls.pas", quiero decir, que, si pensábamos usar una clase interpuesta, tal vez esto no funcione. Pero creo que tú, Al, ibas un poco más allá...

Me gustaría saber porqué el ejemplo que he preparado incrementa el consumo de memoria (mucha o poca) incluso con el parche en "Vcl.OleCtrls.pas", pero, al menos, si es que el problema se sigue produciendo (por algún otro lado) lo cierto es que parece menor que sin el parche, al menos por las pruebas realizadas en mi programa.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 24-11-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Harás que me desvele de nuevo, David!

Aun cuando un buen samaritano tenga disponibles estas horas de normal vigilia para aclararnos esas dudas, yo en la noche (del 24 de noviembre de este año ) estaré leyendo con mucho interés lo que has encontrado y lo que derive de ello.

Off topic: Espero encontrar pronto un programador que me ayude con varias cosas que tengo acá.
Responder Con Cita
  #4  
Antiguo 24-11-2015
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,

Tranquilo majo... en realidad no corre prisa alguna, puesto que, de momento el problema se ha mitigado mucho o puede decirse que ha desaparecido, quiero decir, en mi programa. Estaría bien aclararse un poco más, pero, como digo, no corre ninguna prisa, ¡así que nada de desvelos!
__________________
David Esperalta
www.decsoftutils.com
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
Actualizar a Delphi XE desde cualquier versión de Delphi (hasta fin de mes) rrf Varios 0 11-03-2011 17:12:05
que tan cierto es que el 25 salio delphi 2009 gloriamab30 Noticias 1 05-09-2008 23:55:31
(Corregido) Introduccion a InstantObjects Ezecool OOP 0 05-07-2007 22:37:16
Problema con Versión 10 de Indys AGAG4 Internet 4 01-02-2006 16:50:27
Ejecutar aplicacion delphi cada cierto tiempo mgaray API de Windows 9 28-01-2005 19:16:20


La franja horaria es GMT +2. Ahora son las 22:18: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