ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Criação de componentes, herança

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
an.der.son
Colaborador
Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004
Mensagens: 2275
Localização: Itaocara - RJ

MensagemEnviada: Ter Mai 30, 2006 10:37 am    Assunto: Criação de componentes, herança Responder com Citação

Bom dia a todos....

Pessoal, estou precisando criar um novo componente, e para este componente eu preciso criar uma property (TNotifyEvent) para monitorar uma outra property...

Vou exemplificar, estou criando uma classe a partir de TCustomEdit, dai eu quero ter um evento para que, sempre que a propriedade ReadOnly for modificada, eu possa executar alguma coisa...

Em TCustomEdit existe a procedura abaixo:

[code]
private
....
procedure SetReadOnly(Value: Boolean);
....
[/code]

Mas a procedure citada está com o escopo de visibilidade Private, daí eu naum consigo reescreve-la...

Tenho que fazer isto com herança, naum posso utilizar componentes de terceiros, nem outra tecnica de programação!

Alguem tem uma solucao para este problema?

Abraços Wink
_________________
Estou de volta!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Ter Mai 30, 2006 11:13 am    Assunto: Criação de componentes, herança Responder com Citação

Olá Anderson,

experimente isso:

[code]
unit AnCustomEdit;

interface

uses
SysUtils, Classes, Controls, StdCtrls, Dialogs, Windows, Messages;

type
TAnCustomEdit = class(TCustomEdit)
private
{ Private declarations }
fReadOnly : boolean;
protected
{ Protected declarations }
procedure SetReadOnly(const Value: Boolean);
public
{ Public declarations }
published
{ Published declarations }
property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents(\'Lixo\', [TAnCustomEdit]);
end;

{ TAnCustomEdit }

procedure TAnCustomEdit.SetReadOnly(const Value: Boolean);
begin
if FReadOnly <> Value then
begin
FReadOnly := Value;
if HandleAllocated then
SendMessage(Handle, EM_SETREADONLY, Ord(Value), 0);
end;
end;

end.
[/code]

Aguardo retorno!!
Sufolk.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
an.der.son
Colaborador
Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004
Mensagens: 2275
Localização: Itaocara - RJ

MensagemEnviada: Ter Mai 30, 2006 11:15 am    Assunto: Criação de componentes, herança Responder com Citação

Putz.. jurava naum receber uma resposta... vou testar e jah retorno....

Grande abraço Wink
_________________
Estou de volta!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
an.der.son
Colaborador
Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004
Mensagens: 2275
Localização: Itaocara - RJ

MensagemEnviada: Ter Mai 30, 2006 11:24 am    Assunto: Criação de componentes, herança Responder com Citação

Pow, o problema aki eh q ele naum herdou as caracteristicas da property .... eu tive q reescreve-la..... Sad
_________________
Estou de volta!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
danielbuona
Profissional
Profissional


Registrado: Quinta-Feira, 30 de Junho de 2005
Mensagens: 576
Localização: São Paulo/SP

MensagemEnviada: Ter Mai 30, 2006 11:36 am    Assunto: Criação de componentes, herança Responder com Citação

Olá

Não testei, mas e se ao invez de vc reescrever a propriedade, vc não dá um override somente no SetReadOnly???
[code]
protected
{ Protected declarations }
procedure SetReadOnly(const Value: Boolean); override;
public
.
.
.
{ TAnCustomEdit }

procedure TAnCustomEdit.SetReadOnly(const Value: Boolean);
begin
inherited; // para executar o ancestral
end;
[/code]
_________________
Daniel Buona - danielbuona@hotmail.com
www.aflsistemas.com.br/blog
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
an.der.son
Colaborador
Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004
Mensagens: 2275
Localização: Itaocara - RJ

MensagemEnviada: Ter Mai 30, 2006 11:44 am    Assunto: Criação de componentes, herança Responder com Citação

[quote]Olá

Não testei, mas e se ao invez de vc reescrever a propriedade, vc não dá um override somente no SetReadOnly???
[code]
protected
{ Protected declarations }
procedure SetReadOnly(const Value: Boolean); override;
public
.
.
.
{ TAnCustomEdit }

procedure TAnCustomEdit.SetReadOnly(const Value: Boolean);
begin
inherited; // para executar o ancestral
end;
[/code] [/quote]

Naum eh possivel dar um override, pois SetReadOnly estah como private, e naum como protected!
Mas valeu a dica Wink
_________________
Estou de volta!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Ter Mai 30, 2006 11:50 am    Assunto: Criação de componentes, herança Responder com Citação

Fungou ali Anderson?
Eu conheço somente dessa forma de fazer um \"overload\" de um método private.

Sufolk.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Jeandeson
Novato
Novato


Registrado: Sexta-Feira, 3 de Fevereiro de 2006
Mensagens: 29

MensagemEnviada: Qua Mai 31, 2006 11:19 am    Assunto: Criação de componentes, herança Responder com Citação

[code]
{*******************************************************************************
Ola amigo!!
Perdi um tempinho mas fiz este exemplo pra você. Aqui funcionou, estou usando D7
Neste novo componente quando vc mudar a propriedade ReadOnly ele vai notificar
um evento, que será tratado como qualquer outro evento.

como usar:

procedure TForm1.AnEdit1ReadOnly(Sender: TObject);
begin
if AnEdit1 .ReadOnly then
showmessage(\'Somente leitura\')
else
showmessage(\'Pode digitar a vontade!\');
end;

Aguardo um retorno pra saber se funcionou aí!!

Espero ter ajudado
T+
Jeandeson
------------
Colatina -ES
*******************************************************************************}


unit AnEdit;

interface

uses
SysUtils, Classes, Controls, StdCtrls,
messages, Windows; // não esqueça de declarar estas units

type
TAnEdit = class(TCustomEdit)
private
FReadOnly: boolean;
FOnReadOnly : TNotifyEvent;
procedure SetReadOnly(Value: Boolean);


protected
procedure DoReadOnly;

published
property OnReadOnly : TNotifyEvent read FOnReadOnly write FOnReadOnly ;
property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;

property Anchors;
property AutoSelect;
property AutoSize;
property BevelEdges;
property BevelInner;
property BevelKind default bkNone;
property BevelOuter;
property BiDiMode;
property BorderStyle;
property CharCase;
property Color;
property Constraints;
property Ctl3D;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property ImeMode;
property ImeName;
property MaxLength;
property OEMConvert;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PasswordChar;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Text;
property Visible;
property OnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;



procedure Register;

implementation

procedure Register;
begin
RegisterComponents(\'MyComponents\', [TAnEdit]);
end;


{ TAnEdit }

procedure TAnEdit.DoReadOnly;
begin
if Assigned(FOnReadOnly) then FOnReadOnly(Self);
end;

procedure TAnEdit.SetReadOnly(Value: Boolean);
begin
if FReadOnly <> Value then
begin
FReadOnly := Value;
if HandleAllocated then
SendMessage(Handle, EM_SETREADONLY, Ord(Value), 0);
DoReadOnly ;
end;
end;

end.

[/code]

[Editado em 31/5/2006 por Jeandeson]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ricars01
Colaborador
Colaborador


Registrado: Quarta-Feira, 25 de Agosto de 2004
Mensagens: 1879
Localização: Itu/SP

MensagemEnviada: Qua Mai 31, 2006 11:52 am    Assunto: Criação de componentes, herança Responder com Citação

Por que subir este tópico? Alguma dúvida?


___________________________________________________
:yltype: [i] \"Programar também é uma expressão artística.\" [/i]:yltype:
:exclam: [u] Só o up não resolve, as vezes tem que procurar [/u] :exclam:

[b]This user is compatible with: D5 - D2006 / IB&FB
This user is training to: SQL Server 2005 / Oracle 10g / JAVA[/b]

[img]http://www.delphi-jedi.org/img/btn_jedinow.gif[/img]
[url]http://www.delphi-jedi.org/[/url]
_________________
<b>Nova assinatura em elaboração... ainda!! Esta é a versão "alfa"</b>
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
an.der.son
Colaborador
Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004
Mensagens: 2275
Localização: Itaocara - RJ

MensagemEnviada: Qua Mai 31, 2006 1:57 pm    Assunto: Criação de componentes, herança Responder com Citação

[quote] [code]
{*******************************************************************************
Ola amigo!!
Perdi um tempinho mas fiz este exemplo pra você. Aqui funcionou, estou usando D7
Neste novo componente quando vc mudar a propriedade ReadOnly ele vai notificar
um evento, que será tratado como qualquer outro evento.

como usar:
......

[/code]

Ae, valeu pela força, mas o seu codigo ficou muito semelhante ao do Sufolk, e vc teve que reescrever a property ReadOnly, com o edit isto eh possivel, mas eu preciso para um outro componente, dai eu naum achei esta solucao muito \"elegante\"...
Obrigadao pela força Wink
_________________
Estou de volta!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB