Fórum Novo Componente - Fonte Aqui !!! #237989

16/06/2004

0

Caros amigos, estou desenvolvendo no Delphi 6 um novo componente Label, chamado ULabel, igual à classe anterior só que nos eventos OnMouseEnter (passar o mouse por cima) e OnMouseLeave(tirar o mouse de cima) a gente muda a cor do texto, dando um ótimo efeito. Compilo e instalo o componente, mas no hora de utilizar ele dá erro de vialoção de acesso. Alguém se habilita a me ajudar ? Segue o Fonte. Obrigado.

[b:620ff3192b]unit QULabel;

interface

uses
Windows, Messages, SysUtils, Classes, QControls, QStdCtrls, Graphics, Dialogs,
Controls, Forms, StdCtrls;

type
TULabel = class(TLabel)
private
{ Private declarations }
FColor1 : TColor;
FColor2 : TColor;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent); override;
procedure MouseEnter (var Msg: TMessage);
message cm_mouseEnter;
procedure MouseLeave (var Msg: TMessage);
message cm_mouseLeave;
published
{ Published declarations }
end;

procedure Register;

implementation

constructor TULabel.Create(AOwner : TComponent);
begin
Fcolor1 := Font.Color;
Fcolor2 := clHighlightText;
end;

procedure TULabel.MouseEnter(var Msg: TMessage);
begin
Font.Color := Fcolor2;
end;

procedure TULabel.MouseLeave(var Msg: TMessage);
begin
Font.Color := Fcolor1;
end;

procedure Register;
begin
RegisterComponents(´Standard´, [TULabel]);
end;

end.[/b:620ff3192b]


Amjorge

Amjorge

Responder

Posts

16/06/2004

Aroldo Zanela

Colega,

O erro está no construtor, mas é tão simples que vou deixá-lo tentar resolver sozinho.


Responder

Gostei + 0

16/06/2004

Amjorge

na declaração ou na implementação ?? he he he


Responder

Gostei + 0

16/06/2004

Aroldo Zanela

Colega,

Vai na implementação do construtor, marque o código que você implementou e copie para o clipboard -> Apague a declaração na seção implementation e pressione Ctrl + Shift + C e adicione novamente o código do Clipboard.


Responder

Gostei + 0

16/06/2004

Dopi

Notei que você está misturando Units da CLX com VCL....

uses
Windows, Messages, SysUtils, Classes, QControls, QStdCtrls, Graphics, Dialogs,
Controls, Forms, StdCtrls;


QStdCtrls -> CLX (Q)
StdCtrls -> VCL

Isso sempre gera erros estranhos... ;-)


Responder

Gostei + 0

16/06/2004

Alexandremarcondes

[b:56bcba9f65]unit QULabel; interface uses Windows, Messages, SysUtils, Classes, QControls, QStdCtrls, Graphics, Dialogs, Controls, Forms, StdCtrls; type TULabel = class(TLabel) private { Private declarations } FColor1 : TColor; FColor2 : TColor; protected { Protected declarations } public { Public declarations } constructor Create(AOwner : TComponent); override; procedure MouseEnter (var Msg: TMessage); message cm_mouseEnter; procedure MouseLeave (var Msg: TMessage); message cm_mouseLeave; published { Published declarations } end; procedure Register; implementation constructor TULabel.Create(AOwner : TComponent); begin Fcolor1 := Font.Color; Fcolor2 := clHighlightText; end; procedure TULabel.MouseEnter(var Msg: TMessage); begin Font.Color := Fcolor2; end; procedure TULabel.MouseLeave(var Msg: TMessage); begin Font.Color := Fcolor1; end; procedure Register; begin RegisterComponents(´Standard´, [TULabel]); end; end.[/b:56bcba9f65]


Você deve, tanto no [u:56bcba9f65]contrutor[/u:56bcba9f65] quanto no [u:56bcba9f65]destrutor[/u:56bcba9f65] de qualquer componente chamar o mesmo método da classe pai com [i:56bcba9f65]inherited[/i:56bcba9f65].

No [u:56bcba9f65]contrutor [/u:56bcba9f65]geralemnte é a [u:56bcba9f65]primeira coisa [/u:56bcba9f65]que fazemos e no [u:56bcba9f65]destrutor [/u:56bcba9f65]a [u:56bcba9f65]última[/u:56bcba9f65].

Ex:

[b:56bcba9f65]constructor [/b:56bcba9f65]TULabel.Create(AOwner : TComponent);
begin
[b:56bcba9f65]inherited [/b:56bcba9f65]Create(AOwner);
Fcolor1 := Font.Color;
Fcolor2 := clHighlightText;
end;


Responder

Gostei + 0

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

Aceitar