Propriedade TForm em Componente !
01/03/2006
0
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
Posts
01/03/2006
Adriano Santos
01/03/2006
Mdm
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
01/03/2006
Marco Salles
Pode não resolver , mas ja é um começo
01/03/2006
Mdm
Espero ajuda dos colegas !
02/03/2006
Marco Salles
O que voce quer dizer como
e como voce faz isto ???
02/03/2006
Mdm
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
02/03/2006
Adriano Santos
Invalid property value.
MDM pode me passar o componente pra eu dar uma olhada? ou é embaçado???
artes@doiscliques.com
02/03/2006
Mdm
estou desde ontem tentando resolver isso ! rs
Obrigado pela atenção de vcs !
02/03/2006
Adriano Santos
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.
02/03/2006
Mdm
procedure setForm(Value : Tform); begin if (FForm <> Value) then FForm <> Value end;
é isso que vc perguntou ? :oops:
12/06/2006
Os1000r
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
Clique aqui para fazer login e interagir na Comunidade :)