Criar form por uma Var
03/03/2006
0
em em um form tenho as seguintes var:
var frm: TForm; tfrm: TcomponentClass;
no oncreate do form faço o seguinte:
frm:= frmBrownseProduto; Tfrm:= TfrmBrownseProduto; Application.createForm(Tfrm,frm);
com ele criado, tento acessa-lo de outro form e não consigo.
por ex.:
showmessage(frmBrownseProduto.caption)
da o seguinte erro:
[list:94b5570a5b]First chance exception at @($5,$600052C,$11). Exception class System.NullReferenceException with message ´Object reference not set to an instance of an object.´. Process Marmore.exe (3016)[/list:u:94b5570a5b]
pelo que entendi o frmBrownseProduto não foi instanciado e sim o ´frm´ como posso resolver este problema?
ja tentei colocar
var frm: TForm; tfrm: TcomponentClass;
Sistemald
Posts
03/03/2006
Thiago Vidal
procedure TForm1.Button1Click(Sender: TObject); var Frm: ^TForm; FrmClass: TComponentClass; begin Frm := @Form2; FrmClass := TForm2; Application.CreateForm(FrmClass, Frm^); Form2.ShowModal; end;
na verdade, foi utilizada uma variavel Frm, que é um Ponteiro para um Form, e a ela foi associado o endereço de memória da variável Form2. (Frm := @Form2;)
no Application.CreateForm, voce passa a variavel que o ponteiro aponta, e nao o ponteiro em si, para isso, o ^ após o Frm.
03/03/2006
Marco Salles
var
frm: TfrmBrownseProduto;
tfrm: TcomponentClass;
e no oncrete do form
Tfrm:=TfrmBrownseProduto;
Frm:=frmBrownseProduto;
Application.CreateForm(TFrm,Frm);
Frm.ShowModal;
etc...
que ira funcionar e não dara erro quando voce fizer:
showmessage(frmBrownseProduto.caption)
So que pouco talvez , va lhe ajudar , isto é , trocar seis por meia duzia..
Então se o amigo passar o que te fato ele gostaria ( Se é criar um método geral de criação de forms , se é criar forms Apenas passando o nome sem ter que ao menos declarar na unit do formulario o Nome do formulario, etc...)
Eu confesso fiquei meio sem entender o que o colega deseja e numa coisa eu concordo com voce:
É vero.. Pode ate testar assingned (frmBrownseProduto) Mo ´novo frm´
que dara nill....
04/03/2006
Sistemald
eu crei um form frmpesquisa de onde é herdado todos os outros de pesquisa. e um frmdados de onde é herdados todos os outros para inclusão e edição.
no form de pesquisa precisa chamar o de edição.
então no form pai de pesquisa, coloquei as seguintes var:
frm: TForm; tfrm: TcomponentClass;
e no oncreate do forms derivados
dou valor a elas
frm:= frmBrownseProduto; Tfrm:= TfrmBrownseProduto;
e no botão incluir e alterar eu crio o form
Application.createForm(Tfrm,frm);
porém fui acessar um compenente do form deu o problema.
acredito os ponteiros que nosos colega falou deva resolver, mas estou usando vcl.net, a unica form que consegui usar pointer foi colocando
procedure qualquer; unsafe;
sendo que para usar o UNSAFE é necessário colocar uma diretiva de compilação.
04/03/2006
Marco Salles
procedure CriarFomr(FrmClass:TComponentClass; var Frm); begin Application.CreateForm(FrmClass,Frm); TForm(Frm).ShowModal; TForm(Frm).Release; end;
e para chama-la simplesmenmte assim
procedure TForm1.Button2Click(Sender: TObject); begin CriarFomr(Tform2,form2); end;
04/03/2006
Sistemald
não vejo como posso adptar a procedure ao meu caso, lembre-se que o poderá ser criado por 3 ou mais botões (procedimentos),
como posso fazer algo assim, eu estou instaciado na verdade é a var ´frm´ ( ex.: form1.frm) , ou seja posso usar form1.frm.caption, que funciona, como passo o endereço deste frm para o que eu quero form2.
algo assim form2:= frm;
04/03/2006
Marco Salles
:?: :?: :?: não lhe entendi :cry: :cry: :cry:
Da maneira que lhe passei , assim com a maneira que o thiago_vidal , lhe passou , voce esta instanciado de fato o formulario frmBrownseProduto;..
[b:3e27ce94e1]Claro que este mesmo frmBrownseProduto; ja deve ter sido previamente criado e estando em avalaible forms.. Isto é uma condição , e acredito que voce deva estar fazendo previamente assim[/b:3e27ce94e1]
:arrow:
Apos ter feito isso:
CriarFomr(TfrmBrownseProduto,frmBrownseProduto);
o form criado sera de[b:3e27ce94e1] fato o frmBrownseProduto[/b:3e27ce94e1]..
Bata testar apos aparecer o formulario que if Assigned(frmBrownseProduto) é <> nil
Em diversos botoes voce poderia fazer :
CriarForm(TMeuForm, MeuForm) que o form criado serao MeuForm
[b:3e27ce94e1]Não é isso que voce quer ???? Senão , não entendi [/b:3e27ce94e1]nada :cry: :cry: :cry:
Veja , da maneira que eu te sugeri como o parâmetro Frm é[color=darkred:3e27ce94e1][b:3e27ce94e1] passado por valor, [/b:3e27ce94e1][/color:3e27ce94e1]o form criado dentro da procedure é de fato o formulario [b:3e27ce94e1]frmBrownseProduto..[/b:3e27ce94e1]
Não é isso que voce quer :?: :?: :?:
Clique aqui para fazer login e interagir na Comunidade :)