Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Sobreescribir evento en componente (https://www.clubdelphi.com/foros/showthread.php?t=60519)

coso 04-10-2008 14:42:06

Sobreescribir evento en componente
 
Hola, leyendo los ultimos mensajes sobre componentes he intentado hacer uno sobreescribiendo los eventos onenter y onexit. Se trata tansolo de un edit el cual coje un color si esta focused y vuelve al original si no.

Código Delphi [-]
unit ColorEdit;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
type
  TColorEdit = class(TEdit)
  private
    { Private declarations }
    original_color : TColor;
    FFocusColor : TColor;
    Assigned_exit : TNotifyEvent;
    Assigned_enter : TNotifyEvent;
    procedure SetFocusColor(cl : TColor);
    procedure SetOnEnter(n : TNotifyEvent);
    procedure SetOnExit (n : TNotifyEvent);
    procedure Execute_Enter(sender : TObject);
    procedure Execute_Exit(sender : TObject);
  protected
  public
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property FocusColor : TColor read FFocusColor write SetFocusColor default clWhite;
    property OnEnter : TNotifyEvent read Assigned_enter write SetOnEnter;
    property OnExit  : TNotifyEvent read Assigned_exit write SetOnExit;
  end;
procedure Register;
implementation
constructor TColorEdit.Create(AOwner: TComponent);
begin
  inherited;
  color := clSilver;
  parentctl3d := false;
  Ctl3D := false;
  OnEnter := Execute_enter;
  OnExit  := Execute_exit;
end;
procedure TColorEdit.SetOnEnter(n : TNotifyEvent);
begin
        Assigned_enter := n;
end;
procedure TColorEdit.SetOnExit(n : TNotifyEvent);
begin
        Assigned_exit := n;
end;
procedure TColorEdit.Execute_enter(sender : TObject);
begin
        original_color := color;
        color := FFocusColor;
        repaint;
        Assigned_enter(sender);
end;
procedure TColorEdit.Execute_exit(sender : TObject);
begin
        color := original_color;
        repaint;
        Assigned_exit(sender);
end;
procedure TColorEdit.SetFocusColor(cl : TColor);
begin
        FFocusColor := cl;
end;
procedure Register;
begin
  RegisterComponents('Samples', [TColorEdit]);
end;
end.

Lo que hace es asignar a OnExit y OnEnter un procedure que ejecuta el codigo de cambio de color y un supuesto procedure (assigned_enter, assigned_exit) que se le haya asignado, lo que ocurre es que no salta en el momento de salir o entrar de dicho componente :confused: supongo que se tiene que programar a nivel de mensajes, cosa que no he hecho nunca. Si alguien me echa un mano...Por otra parte, tambien pense en sobreescribir el metodo repaint, y escoger el color alla, pero tampoco me funcionaba ¿hay alguna manera de detectar cuando se esta pintando un TEdit? Gracias por adelantado.

coso 04-10-2008 15:15:56

...me voy a solucionar yo mismo :D dejo aqui el link. saludos


La franja horaria es GMT +2. Ahora son las 09:53:42.

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