Que comando usar pra nao sobrepor o codigo do componente??
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
Curtidas 0
Respostas
Vander
29/01/2011
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.
GOSTEI 0
Marcos Silva
29/01/2011
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.
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.
GOSTEI 0
Marco Salles
29/01/2011
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
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
GOSTEI 0