Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) evento em Componente


Daniel Sanches

Pergunta

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 !!!

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

da forma que está abaixo, está executando os 2 (setFocoExit e OnExit), porém, o componente parou de funcionar corretamente e não está jogando mais o valor para o campo .. já testei de tudo, nada até agora ... espero uma luz !!!

abraços !!!

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
        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.

Link para o comentário
Compartilhar em outros sites

  • 0
da forma que está abaixo, está executando os 2 (setFocoExit e OnExit), porém, o componente parou de funcionar corretamente e não está jogando mais o valor para o campo .. já testei de tudo, nada até agora ... espero uma luz !!!

O seu código está funcionando perfeitamente sem problemas .... desistale o seu componente e instale-o novamente recompilando novamente o código

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

unit DBEdit1;

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
        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.

Veja que a unica diferença para o seu código esta no nome da Unit .. mas aqui esta funcionando certinho

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

resolvi o problema colocando assim (vi em outro forum):

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

agora, sinceramente, nunca estudei a respeito do inherited... você teria uma explicação básida da sua função e o porque ele resolveu o meu problema assima ???

abrigado !!!

Link para o comentário
Compartilhar em outros sites

  • 0
agora, sinceramente, nunca estudei a respeito do inherited... você teria uma explicação básida da sua função e o porque ele resolveu o meu problema assima ???

inherited significa Herdar... o inherited faz referencia aos codigos dos componentes herdados.

Use Inherited derivar uma nova classe de um item selecionado no Repositório de Objetos e acrescentar a nova classe ao seu projeto. O opção Inherited cria uma ligação com o item ancestor no repositório. Quando você recompilar seu projeto, é refletida qualquer mudança que foi feita ao item no Repositório de Objeto em sua classe derivada. Estas mudanças se aplicam ( além de qualquer mudança ou adições que você faz ) ao item em seu projeto. As mudanças feitas na sua classe derivada não afeta o item compartilhado no Repositório de Objeto.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...