Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel Sanches

[Resolvido] evento de Componente...

Recommended Posts

Criei um componente herdado de DBEdit, onde muda-se a cor do DBEdit quando entra e volta ao normal quando sai ...

 

tudo funcionou certinho, até que:

 

em 1 DBEdit, coloquei um evento OnExit e o evendo definido no componente deixou de funcionar, ou seja, o OnExit do componente foi sobreposto pelo definido em tempo de design do sistema ...

 

estou definindo assim o evento no Create do componente assim :

 

OnEnter:= setFocoEnter;

OnExit:= setFocoExit;

 

 

será que estou errando em algo ou não tem jeito mesmo, um evendo sobrepõe o outro ???

 

 

abraços !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha so cara, não vou poder ajudar muito pq você não colocou o codigo ai. Se puder colocar o código, fica melhor para ajudar. Você esta utilizando esses eventos dentro do objeto?

 

bom, com base no que você disse, eu fiz um objeto bem simples, espero que ajude

 

unit Unit2;

interface
	Uses
    	Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  		Dialogs, StdCtrls;

    type
    	TMeuEdit = class(TEdit)
        	private
            	procedure entrar(Sender: TObject);
                procedure sair(Sender: TObject);
        	public
            	OriginalColor: TColor;
                onEntrar : TNotifyEvent;
                onSair : TNotifyEvent;

            	constructor Create(AOwner: TComponent); override;
        end;

implementation

{ TMeuEdit }



procedure TMeuEdit.sair(Sender: TObject);
begin
	Self.Font.Color := Self.OriginalColor;
    if (@Self.onSair <> nil) then
    	Self.onSair(Self.Parent);
end;

procedure TMeuEdit.entrar(Sender: TObject);
begin
	Self.OriginalColor := Self.Font.Color;
	Self.Font.Color := clRed;
    if (@Self.onEntrar <> nil) then
    	Self.onEntrar(Self.Parent);
end;

constructor TMeuEdit.Create(AOwner: TComponent);
begin
  inherited;
  	Self.OnEnter := Self.entrar;
    Self.OnExit := Self.sair;
end;

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

meu código tá assim:

 

unit dsDBEdit;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Mask, DBCtrls, Graphics, Dialogs;

type
  TdsDBEdit = class(TDBEdit)
  private
    { Private declarations }
    fAtivaFoco: Boolean;
    fCorFocado: TColor;
    fCorNaoFocado: TColor;
    fFontFocado: TFont;
    fFontNaoFocado: TFont;
    procedure setFocoEnter(Sender: TObject);
    procedure setFontFocado(Valor: TFont);
    procedure setFocoExit(Sender: TObject);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor create(AOwner: tcomponent); override;
    destructor destroy; override;
  published
    { Published declarations }
    property dsAtivaFoco: Boolean read fAtivaFoco write fAtivaFoco default True;
    property dsCorFocado: TColor read fCorFocado write fCorFocado;
    property dsFontFocado: TFont read fFontFocado write setFontFocado;
  end;

procedure Register;

implementation

constructor TdsDBEdit.Create(AOwner : TComponent);
begin
        inherited Create(AOwner);
        fAtivaFoco:= True;
        fCorFocado:= $00FF8080;
        fCorNaoFocado:= Self.Color;
        fFontFocado:= TFont.Create;
        fFontFocado.Assign(Font);
        fFontNaoFocado:= TFont.Create;
        fFontNaoFocado.Assign(Font);

        //eventos...
        OnEnter:= setFocoEnter;
        OnExit:= setFocoExit;
end;

destructor TdsDBEdit.Destroy;
begin
        inherited destroy;
end;

procedure TdsDBEdit.setFocoEnter(Sender: TObject);
begin
        if fAtivaFoco = true then
        begin
                fCorNaoFocado:= Color;
                Color:= fCorFocado;
                fFontNaoFocado.Assign(Font);
                Font.Assign(fFontFocado);
        end;
end;

procedure TdsDBEdit.setFocoExit(Sender: TObject);
begin
        Color:= fCorNaoFocado;
        Font.Assign(fFontNaoFocado);
        if Assigned(OnExit) then
                OnExit(Self);
end;

procedure TdsDBEdit.setFontFocado(Valor: TFont);
begin
        fFontFocado.Assign(Valor);
end;

procedure Register;
begin
  RegisterComponents('Daniel', [TdsDBEdit]);
end;

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvi o problema ... o código ficou assim:

 

unit dsDBEdit;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Mask, DBCtrls, Graphics, Dialogs;

type
  TdsDBEdit = class(TDBEdit)
  private
    { Private declarations }
    fAtivaFoco: Boolean;
    fCorFocado: TColor;
    fCorNaoFocado: TColor;
    fFontFocado: TFont;
    fFontNaoFocado: TFont;
    procedure setFocoEnter(Sender: TObject);
    procedure setFontFocado(Valor: TFont);
    procedure setFocoExit(var Message: TCMExit);   message CM_EXIT;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor create(AOwner: tcomponent); override;
    destructor destroy; override;
  published
    { Published declarations }
    property dsAtivaFoco: Boolean read fAtivaFoco write fAtivaFoco default True;
    property dsCorFocado: TColor read fCorFocado write fCorFocado;
    property dsFontFocado: TFont read fFontFocado write setFontFocado;
  end;

procedure Register;

implementation

constructor TdsDBEdit.Create(AOwner : TComponent);
begin
        inherited Create(AOwner);
        fAtivaFoco:= True;
        fCorFocado:= $00FF8080;
        fCorNaoFocado:= Self.Color;
        fFontFocado:= TFont.Create;
        fFontFocado.Assign(Font);
        fFontNaoFocado:= TFont.Create;
        fFontNaoFocado.Assign(Font);

        //eventos...
        OnEnter:= setFocoEnter;
end;

destructor TdsDBEdit.Destroy;
begin
        fFontFocado.Free;
        fFontNaoFocado.Free;
        inherited destroy;
end;

procedure TdsDBEdit.setFocoEnter(Sender: TObject);
begin
        if fAtivaFoco = true then
        begin
                fCorNaoFocado:= Color;
                Color:= fCorFocado;
                fFontNaoFocado.Assign(Font);
                Font.Assign(fFontFocado);
        end;
end;

procedure TdsDBEdit.setFocoExit(var Message: TCMExit);
begin
        inherited;
        Color:= fCorNaoFocado;
        Font.Assign(fFontNaoFocado);
end;

procedure TdsDBEdit.setFontFocado(Valor: TFont);
begin
        fFontFocado.Assign(Valor);
end;

procedure Register;
begin
  RegisterComponents('Daniel', [TdsDBEdit]);
end;

end.

 

obrigado a todos !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.