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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-11-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
Cita:
Empezado por Lepe
Se supone, que el evento OnBeforeNavigate2 es del propio TWebBrower, entonces, tu componente ha de quitarlo de la zona published. Simplemente declarandolo en tu componente en la zona Private.
Pues no se puede disminuir los privilegios !!!!

En la mayoria de los casos se debe ir una clase mas arriba, antes que se haga publico la propiedad, pero en este caso no tienes una clase más arriba que te sirva.

La opción que te queda es sobreescribir la propiedad.

Aca te hice un ejemplo de como sería:
Código Delphi [-]
 type
   TDecWebBrowser = class (TWebBrowser)
   private
     // donde almacenamos el puntero al evento del usuario
     FOnBeforeNavigate2: TWebBrowserBeforeNavigate2;
     // Método que responderá al evento
     procedure AntesDeNavegar(parametros: TParams);
   public
     constructor Create(AOwner: TComponent); override;
   published
     // evento que sobreescribimos
     property OnBeforeNavigate2: TWebBrowserBeforeNavigate2 read FOnBeforeNavigate2 write FOnBeforeNavigate2;
   end;

 implementation
 
 constructor TDecWebBrowser.Create(AOwner: TComponent);
 begin
   inherited;
   // Asigno el método al evento
   inherited OnBeforeNavigate2 := AntesDeNavegar;
 end;
 
 procedure TDecWebBrowser.AntesDeNavegar(parametros: TParams);
 begin
   // TODO
   // esto puede ir antes o depues del TODO, de acuerdo al orden de ejecución
   FOnBeforeNavigate2({todos los parametros}); 
 end;

creo que con esto debería funcionar sin problemas

Suerte
__________________
[Crandel]
Responder Con Cita
  #2  
Antiguo 02-11-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A quien le pueda resultar interesante, aquí tienen una posible forma de ocultar propiedades, dictada por Neftali. En todo caso, Crandel, lo que propones funciona exactamente como esperaba. Muchísimas gracias a todos. De verdad.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 02-11-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno, pues, he llamado al engendro TDecBrowser y pueden conseguirlo aquí mismo. Gracias de nuevo a todos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 03-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé, no sé. A mi como que me da más algo del estilo:

Código Delphi [-]
unit DecBrowser;

interface

uses
  OleCtrls, SHDocVw, ActiveX;

type
  TDecBrowser = class(TWebBrowser)
  protected
    procedure InvokeEvent(DispID: TDispID; var Params: TDispParams); override;
  end;

implementation

procedure TDecBrowser.InvokeEvent(DispID: TDispID; var Params: TDispParams);
begin
  inherited;

  if DispId = 250 then // 250 - OnBeforeNavigate2
  begin
    {
      Aquí tu código
    }
  end;
end;

end.

Si inherited se llama antes o después ya dependerá de tus necesidades específicas.

// Saludos
Responder Con Cita
  #5  
Antiguo 03-11-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
Cita:
Empezado por roman
No sé, no sé. A mi como que me da más algo del estilo:
...
Supuse desde un principio que en este tema no podía dejar de faltar la participación de Roman

Lo que comentas lo pense al prpicipio, pero el tema es que el método InvokeEvent es llamado muchas veces al parecer, lo cual se estaria llamando constantemente a nuestro método override, para no hacer nada.

Si la idea es capturar este único evento, lo haria con mi propuesta, si se quiere capturar varios más, lo haria a la forma recdomendada por roman.
__________________
[Crandel]
Responder Con Cita
  #6  
Antiguo 03-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Crandel
pero el tema es que el método InvokeEvent es llamado muchas veces al parecer, lo cual se estaria llamando constantemente a nuestro método override, para no hacer nada.
¿Y?

¿Te imaginas cuántas veces se llama a WndProc? Pero esto no es óbice para no redefinirlo de ser necesario incluso si el comportamiento añadido es muy poco.

Por otra parte, aunque es cuestión de puntos de vista, los métodos y/o propiedades de una clase no debieran esconderse (aun suponiendo que realmente se puede); la herencia de clases se supone que está para añadir funcionalidad no para quitarla.

// Saludos
Responder Con Cita
  #7  
Antiguo 03-11-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
Cita:
Empezado por roman
¿Te imaginas cuántas veces se llama a WndProc? Pero esto no es óbice para no redefinirlo de ser necesario incluso si el comportamiento añadido es muy poco.
Por supuesto, que no va haber diferencia ni de velocidad, ni otra cosa. Sólo me parecio mejor opción para un solo evento, además de parecerse más a la consigna "Cómo codificar en el evento (incluso asignado) de un componente".
Cita:
Empezado por roman
aunque es cuestión de puntos de vista, los métodos y/o propiedades de una clase no debieran esconderse (aun suponiendo que realmente se puede); la herencia de clases se supone que está para añadir funcionalidad no para quitarla.
no hable de esconder ni de quitar nada, todo esta en su lugar.
__________________
[Crandel]

Última edición por Crandel fecha: 03-11-2005 a las 07:48:52.
Responder Con Cita
  #8  
Antiguo 03-11-2005
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: 19.449
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 roman
...los métodos y/o propiedades de una clase no debieran esconderse (aun suponiendo que realmente se puede); la herencia de clases se supone que está para añadir funcionalidad no para quitarla.
Ahí no estoy de acuerdo contigo Román, no creo que sea cuestión de puntos de vista (porque no creo que siempre se pueda hacer A o B), creo que es cuestión de necesidades (a veces necesitarás que esté y otras veces no).
Si necesito heredar de un componente y la propiedad Color (por decir una) no tiene sentido en mi componente heredado, no creo que haya que dejarla visible/accesible.
¿Qué pasa si esa propiedad altera el comportamiento de tu componente de una forma no deseada?
¿Añado código para inutilizarla? Pero estonces estaré añadiendo código para deshabilitar una propiedad que sí veo y tengo accesible, pero que no necesito... ¿raro no?
__________________
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
  #9  
Antiguo 03-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por Crandel
Pues no se puede disminuir los privilegios !!!!

En la mayoria de los casos se debe ir una clase mas arriba, antes que se haga publico la propiedad, pero en este caso no tienes una clase más arriba que te sirva.
Exacto, ese precisamente es el problema, como has visto, en este caso concreto no se puede ir una clase más arriba o toca implementar muchas propiedades.

En cuanto a lo demás que habeís hablado.... simplemente me callo

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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


La franja horaria es GMT +2. Ahora son las 12:56:47.


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