Novo Componente - Fonte Aqui !!!
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]
[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
Curtidas 0
Respostas
Aroldo Zanela
16/06/2004
Colega,
O erro está no construtor, mas é tão simples que vou deixá-lo tentar resolver sozinho.
O erro está no construtor, mas é tão simples que vou deixá-lo tentar resolver sozinho.
GOSTEI 0
Amjorge
16/06/2004
na declaração ou na implementação ?? he he he
GOSTEI 0
Aroldo Zanela
16/06/2004
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.
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.
GOSTEI 0
Dopi
16/06/2004
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... ;-)
uses
Windows, Messages, SysUtils, Classes, QControls, QStdCtrls, Graphics, Dialogs,
Controls, Forms, StdCtrls;
QStdCtrls -> CLX (Q)
StdCtrls -> VCL
Isso sempre gera erros estranhos... ;-)
GOSTEI 0
Alexandremarcondes
16/06/2004
[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;
GOSTEI 0