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

 
 
Herramientas Buscar en Tema Desplegado
  #16  
Antiguo 27-09-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
ecfisa, a eso me refería.

Pongo un ejemplo sobre el control de aguml:

Código:
//---------------------------------------------------------------------------

#ifndef NewScrollBoxH
#define NewScrollBoxH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class PACKAGE TNewScrollBox : public TScrollBox
{
   public:
        __fastcall TNewScrollBox(TComponent* Owner);

   private:
        TNotifyEvent FOnVerticalScroll;
        TNotifyEvent FOnHorizontalScroll;

   protected:
        virtual void __fastcall WndProc(TMessage& msg);

   __published:
        __property TNotifyEvent OnVerticalScroll =
        {read=FOnVerticalScroll,
        write=FOnVerticalScroll};
        __property TNotifyEvent OnHorizontalScroll =
        {read=FOnHorizontalScroll,
        write=FOnHorizontalScroll};
};
//---------------------------------------------------------------------------
#endif
Código:
//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "NewScrollBox.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TNewScrollBox *)
{
        new TNewScrollBox(NULL);
}

//---------------------------------------------------------------------------
__fastcall TNewScrollBox::TNewScrollBox(TComponent* Owner)
        : TScrollBox(Owner)
{
  FOnHorizontalScroll = 0;
  FOnVerticalScroll = 0;
}

void __fastcall TNewScrollBox::WndProc(TMessage& msg)
{
  if(msg.Msg == WM_HSCROLL && FOnHorizontalScroll) FOnHorizontalScroll(this);
  if(msg.Msg == WM_VSCROLL && FOnVerticalScroll) FOnVerticalScroll(this);
  TScrollBox::WndProc(msg);
}

//---------------------------------------------------------------------------
namespace Newscrollbox
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[1] = {__classid(TNewScrollBox)};
                 RegisterComponents("Samples", classes, 0);
        }
}
//---------------------------------------------------------------------------
aguml, ecfisa si crea una nueva clase puesto que TForm1 ya es derivada de TForm, lo que pasa es que la crea Builder.
Una explicación sencilla de una función virtual: una función virtual tiene la característica que se hereda, como todas, pero si la sobreescribes funciona la de la clase hija, incluso si la llamas desde un puntero a la clase hija pero del tipo clase madre. El compilador averigua a quién te refieres y aplica la función correcta. En este caso la función WinProc es virtual desde TWinControl y es la encargada del tratamiento de mensajes de Windows. En este caso, la sobreescritura debe terminar llamando a la función de la clase madre para que trate el resto de mensajes.

Fíjate en esto:
Código:
TNewScrollBox *SC = new TNewScrollBox(this);
TWinControl *WC = SC;
SC->WndProc(msg);  // LLama a la función WinProc de TNewScrollBox porque SC lo es.
Saludos.
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
¿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 08:14:51.


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