Como colocar as propriedades de no Object Inspector?

Delphi

13/04/2005

Olá pessoal,


Pessoal tenho uma classe herando de TFrom, ela tem várias propriedades.

Como faço para colocar as propriedades desse novo Form no Publicado ? As propriedades Default do TForm aparecem mas as novas não. As propriedades já estão no publicado - published;

COmo posso fazer :?:

Obrigado.


Yallebr

Yallebr

Curtidas 0

Respostas

Massuda

Massuda

13/04/2005

Dê uma olhada [url=http://forum.clubedelphi.net/viewtopic.php?t=57967]neste tópico[/url] do fórum.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Massuda,


Obrigado.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Olá Massuda.

Tive problemas apenas na última linha do código, poderia me dar mais uma ajuda por favor?

interface 
... 
procedure Register; 
  
implementation 
  
uses 
  dsgnIntf;  
  // ou DesignIntf se D6+, inclua designide na seção requires do package 
... 
  
procedure Register; 
begin 
  RegisterCustomModule(TMyCustomForm, TCustomModule); 


RegisterCustomModule(TMyCustomForm, TCustomModule);

Não achei nada No HELP nem no outro forum que deu origem a esse código que tenha uma explicação do que seja TCustomModule.

Vamos supor meu formulário chama ´FrmNovo´. O que colocaria no outro parâmetro?

RegisterCustomModule(TFrmNovo, ?????);

Obrigado.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

So para completar.


Coloquei RegisterCustomModule(TFrmNovo, TCustomModule);

O erro é [Error] uCadastroMestre.pas(612): Undeclared identifier: ´TCustomModule´

Já procurei Todas unidades para TCustomModule


GOSTEI 0
Massuda

Massuda

13/04/2005

Tive problemas apenas na última linha do código, ...
...
RegisterCustomModule(TMyCustomForm, TCustomModule); 
No momento estou usando D5 e tanto TCustomModule como RegisterCustomModule são declarados na unit DsgnIntf.pas, que está no diretório Source\ToolsAPI.

No caso do D6 ou mais recente, esses símbolos deveriam estar na unit DesignIntf, mas não tenho como verificar isso agora.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Massuda,


Essa parte achei q não está bem documentada no Delphi. navegando pelo código, cheguei a conclusão que é DesignEditors.

Tudo funcionou ok! Obrigado.

Agora as propriedades publicadas que são objetos de outras classes não funcioram. Por exemplo:

published

property Pesquisa: TPesquisa read FPesquisa write FPesquisa.

Gostaria que aparecesse o + antes do nome. Tenho que registar a classe TPesquisa?

8)


GOSTEI 0
Massuda

Massuda

13/04/2005

Essa parte achei q não está bem documentada no Delphi...
Na verdade, acho que não existe documentação ´oficial´. Me indicaram a pouco tempo [url=http://www.marcocantu.com/ddh/ddh15.htm]este texto[/url] do Marco Cantú.
Agora as propriedades publicadas que são objetos de outras classes não funcioram.
Peguei este exemplo no NG da Borland, talvez ajude:
TMyObject = class (TPersistent)
private
  fAnInteger : Integer;
  fABoolean : Boolean;
published
  propetry AnInteger : Integer read fAnInteger write fAnInteger;
  property ABoolean : Integer read fABoolean write fABoolean;
end;

TMyComponent = class (TComponent)
private
  FMyObject : TMyObject;
  procedure SetMyObject (value : TMyObject);
public
  constructor Create (AOwner : TComponent); override;
published
  property MyObject : TMyObject read fMyObject write SetMyObject;
end;

procedure TMyComponent.SetMyObject (value : TMyObject);
begin
  FMyObject.Assign (value)
end;

constructor TMyComponent.Create (AOwner : TComponent);
begin
  inherited Create (AOwner);
  fMyObject := TMyObject.Create;
end;



GOSTEI 0
Yallebr

Yallebr

13/04/2005

Olá Massuada,

Tudo funcionou bem. Obrigado. Em relação a documentação, encontrei no Dev Guide da Borland realmente falando que não existe documentação oficial, porém existe uma documentação na unit DsgnIntF (o q tb não é nada boa, mas ajuda)

O que eu não entendi nesse código foi a questão do Assign.

procedure TMyComponent.SetMyObject (value : TMyObject); 
begin 
  FMyObject.Assign (value) 
end; 


Por que preciso colocar o FMyObject.Assign (value) em meu método Set ? Ao meu ver teria que coloca no método create. Pois eu devo atribuir um objeto apenas na sua criação não? Nesse caso ele fica no método Set.

Alguem saberia explicar?

8)

Obrigado.


GOSTEI 0
Massuda

Massuda

13/04/2005

Por que preciso colocar o FMyObject.Assign (value) em meu método Set ?
No código exemplo que postei, o objeto FMyObject é criado no construtor Create e (ficou faltando no exemplo) ser destruído no destrutor Destroy. Do modo como está escrito, cada vez que executar
var
  MyComponent: TMyComponent;
  OutroObject: TMyObject;
...
  MyComponent.MyObject := OutroObject;
O objeto mantido internamente por MyComponent irá copiar os dados de OutroObject; note que MyComponent.MyObject existe de forma independente do OutroObject.

Vamos supor que o método TMyComponent.SetMyObject fosse
procedure TMyComponent.SetMyObject (value : TMyObject); 
begin 
  FMyObject := value;
end; 
Da forma como está codificado TMyComponent, o objeto MyComponent.MyObject criado no construtor seria perdido (não destruído) e substituído por OutroObject quando executasse
MyComponent.MyObject := OutroObject;
note que MyComponent.MyObject e OutroObject passam a ser o mesmo objeto.

Ao meu ver teria que coloca no método create. Pois eu devo atribuir um objeto apenas na sua criação não?
Não sei se eu entendi direito o que você quis dizer com isso.

A prática usual é construir completamente um objeto no seu construtor. Em casos onde os objetos internos são ´caros´ (por exemplo, podem demorar para ser construídos) ou são usados apenas eventualmente, pode-se optar por construir esses objetos internos ´por demanda´.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Massuda,


Sim, Ficou clara sua resposta. Minha dúvida era apenas a questão de usar Assign ao inves de := (atribuição).

Mas como vc falou é pelo fato de eu ter outro objeto para não ser destruido.

Obrigado.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Massuda vc conhece isso:

Tudo estava funcionando perfeitamente.

Mas agora todo formulário que eu herdo ele vem com as propriedades no objector inspector legal, mas os componentes visuais do form agora não estão sendo herdados!

Já repeti o processo com outro form, mas nada.. Já aconteceu isso com vc?

Obrigado.


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Ah,

So mais umas informações.


Eu não vejo os componentes visuais em tempo de designer. Mas em tempo de execução eu vejo todos.

O pacote está designertime.


GOSTEI 0
Massuda

Massuda

13/04/2005

...todo formulário que eu herdo ele vem com as propriedades no objector inspector legal, mas os componentes visuais do form agora não estão sendo herdados!
Colega, nunca passei por isso.

Os componentes visuais que você está se referindo seriam apenas os dos seus componentes ou qualquer um?

Eu não vejo os componentes visuais em tempo de designer. Mas em tempo de execução eu vejo todos.
Pode ser um problema relacionado com condições do tipo
if csDesigning in ComponentState then...
no construtor.


GOSTEI 0
Alessio

Alessio

13/04/2005

Eu usei desta dica e tinha tudo funcionando no Delphi 7 mas agora não consigo migrar para o delphi 2006. ELe não aceita.
Alguem sabe me dizer como fazer isto no Delphi 2006.
Já tentei de tudo..
O Delphi reclama q não existe os arquivos.pas...


GOSTEI 0
Yallebr

Yallebr

13/04/2005

Testei em Delphi 2005 e funcinou ok.


GOSTEI 0
POSTAR