Fórum Que comando usar pra nao sobrepor o codigo do componente?? #394726

29/01/2011

0

Ola pessoal. vou explicar da maneira mais simples. Criei um componente descendente do TEdit e no seu codigo coloquei pra ele mudar de cor no evento On Enter pra amarelo e pra branco no OnExit. Ele funciona beleza, só pq quando vou usar o componente, escrever algum codigo em um desses eventos, ele ignora o codigo do meu componente( ou seja, ele nao muda a cor) o que devo fazer, pra ele executar o codigo escrito no evento do componente, na sua criaçao e executar o codigo que eu escrevo no mesmo evento no sistema?
Marcos Silva

Marcos Silva

Responder

Posts

29/01/2011

Vander

Marcos,   Pelo que entendi, como disse sobrepor, acredito que falte após a assinatura a palavra OVERRIDE para fazer o que você quer...   Caso não funcione poste o trecho do código e a assinatura...   At.
Responder

Gostei + 0

30/01/2011

Marcos Silva

abaixo segue o codigo do componente. o problema é que quando insiro qualquer codigo no evento onexit ou onenter, ele simplesmente nao executa os comandos abaixo, que fazem ele mudar de cor e verifica a data deu pra entender???   unit SDSDateEdit; interface uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Mask, Variants,  ComCtrls; type
  TSDSDateEdit = class(TMaskEdit )
  private
    FColorEnter : TColor;
    FColorExit : TColor;
    procedure CorEntrada(Sender : TObject);
    procedure CorSaida(Sender : TObject);
    procedure SetColorEnter(NewColor : TColor);
    procedure SetColorExit(NewColor : TColor);
  protected
    FOnEnter : TNotifyEvent;
    FOnExit : TNotifyEvent;
  public
    constructor Create(AOwner :TComponent);override;
  published
    property ColorEnter : TColor read FColorEnter write SetColorEnter;
    property ColorExit : TColor read FColorExit write SetColorExit;
    property OnEnter;
    property OnExit;
  end; procedure Register; implementation procedure Register;
begin
  RegisterComponents('SDS', [TSDSDateEdit]);
end; constructor TSDSDateEdit.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
font.Name:='Arial';
FColorEnter:=$0015CBF9;
Text:=Datetostr(Date);
FColorExit:=clwhite;
FOnEnter:=OnEnter;
OnEnter:=CorEntrada;
FOnExit:=OnExit;
OnExit:=CorSaida;
EditMask:='!99/99/9999;1;_';
end; procedure TSDSDateEdit.SetColorEnter(NewColor : TColor);
begin
FColorEnter:=NewColor;
Invalidate;
end; procedure TSDSDateEdit.SetColorExit(NewColor : TColor);
begin
FColorExit:=NewColor;
Invalidate;
end; procedure TSDSDateEdit.CorEntrada(Sender : TObject);
begin
Color:=FColorEnter;
end; procedure TSDSDateEdit.CorSaida(Sender : TObject);
begin
try
  StrToDate(Text);
  //ShowMessage(Text + ' CERTO.');
  except
   begin
    ShowMessage(Text + ' NÃO é data válida.');
    Setfocus;
   end;
  end; Color:=FColorExit;
end; end.
Responder

Gostei + 0

30/01/2011

Marco Salles

hummmm ,mas este codigo não esta condizente com o proposito     vc tem que sobrepor os métodos originais e passar o inherited  nocaso os método são esses  procedure Doenter;override;
 procedure DoExit;override;     tb vc tem que pintar o controle para que algumas definiçoes aparecem como por exemplo o Text e o Color que são propriedades do ancestral  .. Todo componente visual deve mapear a mensagem WMNPaint  , exitem classes ja possuem esta implementação , como  é o caso da TGraphicControl e TCustomControl . Porém o TmaskEdit não descente de nenhuma dessas clases .   O Invalidade que vc esta usando é para o caso de repintar o controle , algo que vc não faz . Vc não esta repitando-o então é desnecessário esta chamada  
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar