Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El tratamiento de mensajes podría hacerse reescribiendo la función virtual WndProc de TNewScrollBox directamente. El resultado es el mismo.

Saludos.
Responder Con Cita
  #2  
Antiguo 26-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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.

Si escafandra, si se va a aplicar eventualmente a un control, esta última opción que mencionas la considero mas práctica por lo sencilla de implementar .

header
Código PHP:
...
class 
TForm1 : public TForm {
...
private:    
   
TWndMethod OldWndProc;
   
void __fastcall NewWndProc(TMessageMessage);
   
void __fastcall vertScroll(TObject *Sender);
   
void __fastcall horzScroll(TObject *Sender);
   ...
}; 
code
Código PHP:
..
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
OldWndProc ScrollBox1->WindowProc;
  
ScrollBox1->WindowProc NewWndProc;
}

void __fastcall TForm1::NewWndProc(TMessageMessage)
{
  if(
Message.Msg == WM_VSCROLL)
    
vertScroll(ScrollBox1);
  else if( 
Message.Msg == WM_HSCROLL)
    
horzScroll(ScrollBox1);
  
OldWndProc(Message);
}

void __fastcall TForm1::vertScroll(TObject *Sender) {
  
Caption "Scroll vertical";
}

void __fastcall TForm1::horzScroll(TObject *Sender) {
  
Caption "Scroll horizontal";
}

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  
ScrollBox1->WindowProc OldWndProc;

En cambio, optaría por la primera si se justificara por la reutilización del código (como en el caso de un componente).

Es decir, si voy a usar algo una vez en una aplicación y muy rara vez nuevamente, escribiría el código mas corto y simple si con él obtengo el mismo resultado (pero es mi humilde opinion).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 26-09-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
ecfisa, no hablo de cambiar la función sino de sobreescribir la función virtual WndProc del control que estamos creando, derivado de un descendente TWinControl. Es mi técnica preferida.

Saludos.
Responder Con Cita
  #4  
Antiguo 26-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
interesante, ¿Como seria eso amigo? ¿Puedes crear un ejemplo básico?
Responder Con Cita
  #5  
Antiguo 26-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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
Cita:
Empezado por escafandra Ver Mensaje
ecfisa, no hablo de cambiar la función sino de sobreescribir la función virtual WndProc del control que estamos creando...
Ha, te entendí mal entonces... Yo hablaba de evitar derivar la clase para un uso casual.

Cita:
Empezado por aguml Ver Mensaje
interesante, ¿Como seria eso amigo? ¿Puedes crear un ejemplo básico?
No veo en línea al amigo escafandra, pero te pongo un ejemplo muy básico de lo que creo a que se refiere (luego me corregirá si me equivoco):

header:
Código PHP:
class TForm1 : public TForm {
__published:
private:
  
void __fastcall FMouseDown(TMessagemsg);
protected:
  
virtual void __fastcall WndProc(TMessagemsg);
public:
  
__fastcall TForm1(TComponentOwner);
}; 
code:
Código PHP:
void __fastcall TForm1::FMouseDown(TMessagemsg) {

    
Caption Format("Click en: (%3d, %3d)",
      
ARRAYOFCONST(((int)msg.LParamLo, (int)msg.LParamHi)));
}

void __fastcall TForm1::WndProc(TMessagemsg) {

  if (
msg.Msg == WM_LBUTTONDOWN)
    
FMouseDown(msg);
  
TForm::WndProc(msg);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 26-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
mmmm es muy similar a la de sustituir la funcion. En el ejemplo que pusiste, al ser un form, ¿Cmo harias para cear un form y que sea el unico form del proyecto? Cuando creas una aplicacion el c++builder ya te añade el form pero si quieres que use el tuyo modificado en vez del estandar ¿Como lo haces? Ya se que no tiene nada que ver y que es un ejemplo pero me dio curiosidad.
Responder Con Cita
  #7  
Antiguo 27-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
bien, lo he vuelto a ver y me di cuenta que no creas ninguna clase sino que modificas la que hay. En ese caso es muy facil porque es la unidad .cpp y .h del form1 pero si fuese por ejemplo de un timage no está el .cpp ni el .h por lo que para hacer eso mismo tendrias que crear una derivada ¿No? Ademas ¿Que ventaja tiene sobreescribir la funcion contra reemplazarla? Supongo que se obtiene exactamente el mismo resultado ¿No?
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
¿Existe algún error en FireMonkey en el evento OnClosePopup de un ComboBox? RedVenom FireMonkey 0 10-02-2014 18:56:43
Frames. ¿Existe un evento similar a onActivate? adebonis Varios 19 21-11-2008 13:26:50
Comprobar en evento OnExit si valor de campo ya existe JMGR Conexión con bases de datos 9 18-05-2008 03:42:31
Llamar evento desde otro evento nachito_tuc OOP 1 23-08-2006 21:37:43
Existe ? Descendents Varios 1 20-10-2003 18:04:25


La franja horaria es GMT +2. Ahora son las 22:02:15.


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