 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Ter Mai 30, 2006 10:37 am Assunto: Criação de componentes, herança |
|
|
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 _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
Sufolk Moderador

Registrado: Terça-Feira, 26 de Agosto de 2003 Mensagens: 1996
|
Enviada: Ter Mai 30, 2006 11:13 am Assunto: Criação de componentes, herança |
|
|
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 |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Ter Mai 30, 2006 11:15 am Assunto: Criação de componentes, herança |
|
|
Putz.. jurava naum receber uma resposta... vou testar e jah retorno....
Grande abraço _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Ter Mai 30, 2006 11:24 am Assunto: Criação de componentes, herança |
|
|
Pow, o problema aki eh q ele naum herdou as caracteristicas da property .... eu tive q reescreve-la..... _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
danielbuona Profissional


Registrado: Quinta-Feira, 30 de Junho de 2005 Mensagens: 576 Localização: São Paulo/SP
|
Enviada: Ter Mai 30, 2006 11:36 am Assunto: Criação de componentes, herança |
|
|
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 |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Ter Mai 30, 2006 11:44 am Assunto: Criação de componentes, herança |
|
|
[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 _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
Sufolk Moderador

Registrado: Terça-Feira, 26 de Agosto de 2003 Mensagens: 1996
|
Enviada: Ter Mai 30, 2006 11:50 am Assunto: Criação de componentes, herança |
|
|
Fungou ali Anderson?
Eu conheço somente dessa forma de fazer um \"overload\" de um método private.
Sufolk. |
|
| Voltar ao Topo |
|
 |
Jeandeson Novato

Registrado: Sexta-Feira, 3 de Fevereiro de 2006 Mensagens: 29
|
Enviada: Qua Mai 31, 2006 11:19 am Assunto: Criação de componentes, herança |
|
|
[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 |
|
 |
ricars01 Colaborador


Registrado: Quarta-Feira, 25 de Agosto de 2004 Mensagens: 1879 Localização: Itu/SP
|
Enviada: Qua Mai 31, 2006 11:52 am Assunto: Criação de componentes, herança |
|
|
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 |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Qua Mai 31, 2006 1:57 pm Assunto: Criação de componentes, herança |
|
|
[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 _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|