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

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 26-07-2003
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 24
marto Va por buen camino
Hola,

No estoy seguro, pero se me ocurre que si creas el componente en diseño, el puntero al evento deje de apuntar a tu función, ya que normalmente todos aparecen apuntando a Nil.
De todas maneras, en todos los componentes que he creado a partir de otros de la VCL, donde he tenido que hacer cosas parecidas a la que tú haces he usado otra técnica que me parece mejor.
Te cuento, normalmente, para cada evento de un componente existe un procedimiento protected y virtual que es el que se encarga de llamar al evento si este esta asignado. Borland decidió hacer esto así pensando en que si alguien quería heredar de un componente pudiese modificar el comportamiento ante cierto evento sin tener que usar directamente el propio puntero. Además, esto es peligroso, ya que si se instancia el nuevo componente y se quiere programar dicho evento, perderás la funcionalidad que habías añadido al heredar. No sé si me he explicado, pero me permito modificar tu código como ejemplo.
De todas formas, ten en cuenta que no tengo el Delphi a mano y no estoy seguro que el procedimiento que voy a sobreescribir exista o se llame así, pero como ejemplo creo que servirá.

Código:
unit DBGridPlus;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, DB;

type
TDBGridPlus = class(TDBGrid)
private
  procedure MiDrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);
protected
  procedure DoDrawDataCell(const Rect: TRect;Field: TField; State: TGridDrawState);override;
//este es el procedimiento que llama al evento, comprueba que es así

public
{ Public declarations }
property InplaceEditor;
//me he cargado el constructor y destructor porque no hacian falta
end;

implementation

procedure TDBGridPlus.DoDrawDataCell(const Rect: TRect;Field: TField; State: TGridDrawState);
begin
  MiDrawDataCell(Self, Rect, Field, State);
  inherited DoDrawDataCell(Rect, Field, State);
{

llamar antes o despues al inherited depende si quieres que se ejecute antes tu código o el de el evento.
Piensa que el codigo de este procedure será algo asi:
  procedure TDBGrid.DoDrawDataCell(const Rect: TRect;Field: TField; State: TGridDrawState);
  begin
    if Assigned(FOnDrawDataCell) then
       FOnDrawDataCell(Rect, Field, State);
  end;

}
end;

procedure TDBGridPlus.MiDrawDataCell(Sender: TObject; const ect: TRect; Field: TField; State: TGridDrawState);
var
  Grid : TStringGrid;
  Texto : String;
  Rectangulo : TRect;
begin
  Rectangulo:=Rect;
  Grid := TStringGrid(Sender);
  if Field.IsBlob
  then begin
    Grid.Canvas.FillRect(Rect);
    Texto := Field.AsString;
    DrawText( Grid.Canvas.Handle,
    PChar(Texto),
   StrLen(PChar(Texto)), Rectangulo, DT_WORDBREAK);
end;
end;



end.
__________________
E pur si muove
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


La franja horaria es GMT +2. Ahora son las 00:06:08.


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