Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2015
(MAJ) (MAJ) is offline
Miembro
 
Registrado: abr 2007
Posts: 71
Poder: 17
(MAJ) Va por buen camino
Unhappy Error E2009 en evento de TWebBrowser : Parameter lists differ

buenas muchachos, estoy haciendo una aplicación la cual lleva un webbrowser en tiempo de ejecución, pero al tratar de llamar un evento me da error de incompatibilidad.
Código Delphi [-]
procedure tform1.webbrowser1_completo(ASender: TObject; const pDisp: IDispatch; URL: OleVariant);
begin 
  //codigo 
end;  

procedure tform1.ejemplo1;
begin
   webbrowser1.ondocumentcomplete:=webbrowser1_completo;
 {aca es donde da el error: [DCC Error] eje.pas(x): E2009 Incompatible types: 'Parameter lists differ' }
end;


la verdad es que no tengo idea como pasar los parametros, intente todo lo que se me ocurrio y no logro hacerlo agarrar, si alguien puede darme una mano porque no se que hacer a estas alturas
Responder Con Cita
  #2  
Antiguo 25-07-2015
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 (MAJ).

La verdad es, que de tu mensaje no me queda claro como es la situación ya que no llamas al evento sino que lo asignas. Pero en líneas generales no tendría que darte error.

Por ejemplo este código funciona correctamente:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure WebBroserCompleto(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
  public
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}

uses  SHDocVw;

procedure TForm1.WebBroserCompleto(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  // ... codigo...
  ShowMessage('Documento completo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  WB: TWebBrowser;
begin
  WB := TWebBrowser.Create(Self);
  WB.OnDocumentComplete := WebBroserCompleto;
  WB.ParentWindow := Handle;
  WB.Navigate('www.ClubDelphi.com');
  //...
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 25-07-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Código Delphi [-]
procedure tform1.webbrowser1_completo(ASender: TObject; const pDisp: IDispatch; URL: OleVariant);
begin 
  //codigo 
end;

El parametro debe llamarse Sender no ASender
Responder Con Cita
  #4  
Antiguo 25-07-2015
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 Agustin.
Cita:
Empezado por AgustinOrtu Ver Mensaje
...
El parametro debe llamarse Sender no ASender
Eso es cierto siempre que le haya dado el nombre Sender a dicho parámetro en la declaración del método webbrowser1_completo.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 26-07-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Daniel,

El problema es que la clase TWebBrowser define su evento OnDocumentComplete asi:

Código Delphi [-]
  published
    property OnDocumentComplete: TWebBrowserDocumentComplete read FOnDocumentComplete write FOnDocumentComplete;
   ...

Y revisando el tipo TWebBrowserDocumentComplete tenemos esto:

Código Delphi [-]
  TWebBrowserDocumentComplete = procedure(ASender: TObject; const pDisp: IDispatch; 
                                                            var URL: OleVariant) of object;

Osea que no te queda otra que sea ASender
Responder Con Cita
  #6  
Antiguo 26-07-2015
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 Agustín.

Yo me refería a que dá igual el nombre dado al parametro en la declaración, siempre que se corresponda con el de su definición.

Coincido con vos en que, si genera el evento en tiempo de diseño, el nombre del parámetro en la definición del método deberá ser Sender y no otro. Ya que es el nombre que Delphi le asignará por defecto al parámetro en la declaración.

Sin embargo este código,
Código Delphi [-]
..
type
  TForm1 = class(TForm)
   ...
  private
    procedure webbrowser1_completo(UngaBunga: TObject;
      const Maranga: IDispatch; var Turongo: OleVariant);
  public
    ...
  end;
...
implementation 

uses SHDocVw;

procedure TForm1.webbrowser1_completo(UngaBunga: TObject;
      const Maranga: IDispatch; var Turongo: OleVariant);
begin
  ShowMessage('Documento completo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  WB: TWebBrowser;
begin
  WB := TWebBrowser.Create(Self);
  WB.OnDocumentComplete := webbrowser1_completo;
  WB.ParentWindow := Handle;
  WB.Navigate('www.ClubDelphi.com');
  ...
end;
funciona correctamente por que respeta la igualdad de los nombres.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 26-07-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Mira vos que loco, no se de donde lo habre sacado entonces

Lo acabo de probar y funciona tal y como decis. Siempre que se respete tipo y orden y modificadores (const, var, out o nada) no hay problema

Y pensar que siempre lo respetaba a rajatabla
Responder Con Cita
  #8  
Antiguo 29-07-2015
(MAJ) (MAJ) is offline
Miembro
 
Registrado: abr 2007
Posts: 71
Poder: 17
(MAJ) Va por buen camino
Resuelto

Muchas gracias por la ayuda muchachos, pero la verdad es que nadie se dio cuenta cual era el verdadero problema, ya que nadie leyo el codi¿go a conciecia, porque al declarar los parametros del evento los declare de la siguiente manera:

Código Delphi [-]
(Sender: TObject; const pDisp: IDispatch; URL: OleVariant)

En realidad ninguno se dio cuenta de que el tercer parametro es una variable, pero no esta declarado como tal, sino que al faltarle la sentencia "var" antes del parametro url, el programa lo toma como constante, al igual que el parametro anterior. En realidad los parametros tienen que estar declarados asi:

Código Delphi [-]
(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant)

gracias de nuevo a todos otra vez por su ayuda...
Responder Con Cita
  #9  
Antiguo 29-07-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En la respuesta de ecfisa esta como var, en cualquier caso los que no nos dimos cuenta fuimos nosotros dos

Bien por solucionarlo
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
"ADOQUERY3: Parameter 'p' not found" error (POR FAVOR AYUDA) JuanchoDev Conexión con bases de datos 20 21-04-2010 23:36:19
captions de action lists pvizcay Varios 4 24-11-2008 18:57:00
Dual Lists Pippodelphi OOP 0 12-08-2008 17:28:03
Error "Invalid Parameter" usando Tquery cuando proceso una consulta grande CharlesWar SQL 5 18-06-2008 21:27:56


La franja horaria es GMT +2. Ahora son las 13:59:19.


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