Propriedade TForm em Componente !
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.
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
Curtidas 0
Respostas
Adriano Santos
01/03/2006
Como você está declarando, pode postar o trecho de código? Num tem muito segredo.
GOSTEI 0
Mdm
01/03/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
Obrigado novamente
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
GOSTEI 0
Mdm
01/03/2006
sobe
GOSTEI 0
Marco Salles
01/03/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
Pode não resolver , mas ja é um começo
unit component1;
interface
uses
SysUtils, Classes,Forms;
...............
GOSTEI 0
Mdm
01/03/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 !
Espero ajuda dos colegas !
GOSTEI 0
Mdm
01/03/2006
sobe
desculpem a insistencia amigos !
desculpem a insistencia amigos !
GOSTEI 0
Marco Salles
01/03/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
e como voce faz isto ???
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 ???
GOSTEI 0
Mdm
01/03/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
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
GOSTEI 0
Adriano Santos
01/03/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
Invalid property value.
MDM pode me passar o componente pra eu dar uma olhada? ou é embaçado???
artes@doiscliques.com
GOSTEI 0
Mdm
01/03/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 !
estou desde ontem tentando resolver isso ! rs
Obrigado pela atenção de vcs !
GOSTEI 0
Adriano Santos
01/03/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 !
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.
GOSTEI 0
Mdm
01/03/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
é isso que vc perguntou ? :oops:
procedure setForm(Value : Tform); begin if (FForm <> Value) then FForm <> Value end;
é isso que vc perguntou ? :oops:
GOSTEI 0
Os1000r
01/03/2006
Olá....
voce deve colocar no Create do componente uma atribuição para o form no qual ele esta sendo colocado:
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
GOSTEI 0