Propriedade TForm em Componente !

01/03/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 [b:cdb22f1167]´Invalid Property Value´[/b:cdb22f1167], 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.


Mdm

Respostas

01/03/2006

Adriano Santos

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


Responder Citar

01/03/2006

Mdm

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


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&93;);
end;

{ Tcomponent1 }

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

end.



Obrigado novamente


Responder Citar

01/03/2006

Mdm

sobe


Responder Citar

01/03/2006

Marco Salles

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

unit component1; interface uses SysUtils, Classes,Forms; ...............



Responder Citar

01/03/2006

Mdm

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 !


Responder Citar

02/03/2006

Mdm

sobe

desculpem a insistencia amigos !


Responder Citar

02/03/2006

Marco Salles

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

O que voce quer dizer como

e ao tentar [b:f3eb67e5a1]apontar um form para esta propriedade [/b:f3eb67e5a1]me retorna o erro ´Invalid Property Value´,


e como voce faz isto ???


Responder Citar

02/03/2006

Mdm

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


Responder Citar

02/03/2006

Adriano Santos

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


Responder Citar

02/03/2006

Mdm

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 !


Responder Citar

02/03/2006

Adriano Santos

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.


Responder Citar

02/03/2006

Mdm

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

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


é isso que vc perguntou ? :oops:


Responder Citar

12/06/2006

Os1000r

Olá....

voce deve colocar no Create do componente uma atribuição para o form no qual ele esta sendo colocado:
// 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



Responder Citar