Array
(
)

Propriedade TForm em Componente !

Mdm
   - 01 mar 2006

Bom dia Pessoal.
Gostaria de uma pequena ajuda de vcs em relação a criação de componentes. Estou criando um componente que possui uma propriedade Tipo TForm e ao tentar apontar um form para esta propriedade me retorna o erro ´Invalid Property Value´, ja encontrei varios posts aki no forum relacionado a esse problema, mas em nenhum encontrei a solução, existe alguma dica para se declarar Propriedades do tipo TFom ?
Obrigado a Todos.


Adriano Santos
   - 01 mar 2006

Como você está declarando, pode postar o trecho de código? Num tem muito segredo.


Mdm
   - 01 mar 2006

Obrigado pela atenção Adriano, como o código não esta aki comigo eu o reescrevi para vc poder analisar, por isso se tiver algum errinho vc me perdoe


#Código

unit component1;

interface

uses
SysUtils, Classes;

type
Tcomponent1 = class(TComponent)
private
{ Private declarations }
FForm : TForm;

procedure SetForm(Value : TForm);
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property Form : TForm read FForm write SetForm;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents(´Samples´, [Tcomponent1]);
end;

{ Tcomponent1 }

procedure Tcomponent1.SetForm(Value: TForm);
begin
if (FForm <> Value) then
FForm := Value;
end;

end.



Obrigado novamente


Mdm
   - 01 mar 2006

sobe


Marco Salles
   - 01 mar 2006

Eu não analisei seu codigo , porque estou encrencado com outros tres topicos aqui no forum.. Mas de cara acho que esta faltando a Unit Forms.
Pode não resolver , mas ja é um começo


Citação:
unit component1;

interface

uses
SysUtils, Classes,Forms;
...............



Mdm
   - 01 mar 2006

embora vc esteja correto sobre a unit o problema não é esse , isso foi erro de digitação ! o problema éna hora de apontar um Form para a Propriedade.
Espero ajuda dos colegas !


Mdm
   - 02 mar 2006

sobe

desculpem a insistencia amigos !


Marco Salles
   - 02 mar 2006

eu acho que esta um pouco ´escuro´ , pelo menos para mim .. Por isso ainda não recebeu noticias...

O que voce quer dizer como


Citação:
e ao tentar apontar um form para esta propriedade me retorna o erro ´Invalid Property Value´,


e como voce faz isto ???


Mdm
   - 02 mar 2006

Ola Marco, deixa eu tentar ser mais claro.
O componente ja esta criado ! e uma das propriedade é do tipo TFom, vamos supor que tenho na minha aplicação Form1 e Form2.... eu coloco meu componente no Form1, e adiciono ao uses do Form1 o Form2.com isso se eu for na propriedade do Tipo Tform e clicar nela sera listado para min o Form2, ao selecionalo ocorre o erro ! melhorou ?
Ja encontrei algusm posts aki mas sem solução !

Obrigado pela sua atenção Marco


Adriano Santos
   - 02 mar 2006

Eu to tentando resolver, ocorre o erro que o MDM falou mesmo.

Invalid property value.

MDM pode me passar o componente pra eu dar uma olhada? ou é embaçado???

artes@doiscliques.com


Mdm
   - 02 mar 2006

Ola Adriano ! Obrigado pela dedicação. é meio embaçado sim é serviço relacionado a empresa que estou, mas creio que qualquer estrutura de componente onde vc coloca esse tipo de propriedade ira dar esse erro !
estou desde ontem tentando resolver isso ! rs
Obrigado pela atenção de vcs !


Adriano Santos
   - 02 mar 2006


Citação:
Ola Adriano ! Obrigado pela dedicação. é meio embaçado sim é serviço relacionado a empresa que estou, mas creio que qualquer estrutura de componente onde vc coloca esse tipo de propriedade ira dar esse erro !
estou desde ontem tentando resolver isso ! rs
Obrigado pela atenção de vcs !


Blz, tranquilo. Como vc tah fazendo para listar os forms e atualizar a variáveç FForm???? Só não fiz isso, o resto eu fiz e como disse deu o mesmo erro.

Olhei na unit Forms, e lá tem a declaração de uma propriedade do tipo que deseja, mas é uma Interface e não consigo acessar o esquema para criação.


Mdm
   - 02 mar 2006

blz Adriano, para lista eu não faço nada, apenas coloco o form no uses do form onde esta o componente e para atualizar a variavel estou fazendo assim

#Código

procedure setForm(Value : Tform);
begin
if (FForm <> Value) then
FForm <> Value
end;


é isso que vc perguntou ? :oops:


Os1000r
   - 12 jun 2006

Olá....

voce deve colocar no Create do componente uma atribuição para o form no qual ele esta sendo colocado:
#Código


// Declaração da variavel...
fForm : TForm;

//------------------------------------------------------------------------------
constructor TComponente.Create(AOwner:TComponent);
var
posCnt, c: integer;
begin

inherited Create(AOwner);
// run mode
if not (csDesigning in ComponentState) then
begin
if (AOwner is TForm) then
begin
fForm := (AOwner as TForm);
fOnShow:= fForm.OnShow; // Salva Eventos originais
fOnClose:=fForm.OnClose;
fForm.OnShow:=FormShow; // Seta eventos do componente
fForm.OnClose:=FormClose;
end
end
else
begin // We´re in design mode.
if AOwner is TForm then
begin
fForm := TForm(AOwner);
end
end;
end;


// e para a atribuição...
//------------------------------------------------------------------------------
procedure TCOmponente.SetForm(value: TForm);
begin //
if value <> nil then
begin
if fForm <> value then fForm:=value;
end;
end;


Espero ter ajudado,

Abraço