pra vc usar essa função, no seu form tem que ter as seguintes linhas... initialization RegisterClass(NomeDaClasseDoForm) finalization UnRegisterClass(NomeDaClasseDoForm)
Eduardo Silva dos Santos escreveu: > Interessante a sua rotina, eu tentei testar aqui mas > na linha Pc := GetClass('T' + AForm); > mesmo com um Nome de Form Certinho PC sempre fica como Nil.. dai não > executa o resto. > > > eu fiz uma rotina generica so que bem mais simples que pra min > provisoriamente ta resolvendo, mas to tentando chamar o form so pelo nome > tb.. > > > ShowForm( TFrmCliente, FrmClientes ); > > ************** > > procedure ShowForm( TFrm:TFormClass; Frm:TForm ); > begin > try > if not Assigned( Frm ) then > Frm := TFrm.Create( Application ); > Frm.ShowModal; > finally > FreeAndNil( Frm ); > end; > > end; > > > > Em 14/03/07, Adriano Santos - Direção de Arte <[EMAIL PROTECTED]> > escreveu: >> Pessoal, alguém pode ver se consegue dar um help pra gente? >> Estamos tentando terminar a função para abrir form pelo nome. >> Já está funcionando em partes. >> >> Quando chamamos o form assim: >> AbrirForm('frmMatCol06', frmMatCol06); >> >> O form abre, porém se este mesmo form faz alguma referência a algum >> componente visual em tela tipo um: >> btnCancelar.Enabled := True; >> >> Dá AccessViolation, se alteramos para >> Self.btnCancelar.Enabled := True; >> >> Funciona. Tem alguma coisa a ver com o Dono do objeto. Não consigo >> descobrir. >> Já tentamos de tudo que é jeito: >> >> 1º AbrirForm('frmMatCol06', Self); >> 2º AbrirForm('frmMatCol06', Application); >> 3º AbrirForm('frmMatCol06', frmMatOpe01); //frmMatOpe01 é o form chamador. >> >> ou ainda: >> >> procedure TfrmMatOpe01.N110Click(Sender: TObject); >> var >> frmMatCol06 : TfrmMatCol06; >> begin >> frmMatCol06 := TfrmMatCol06(AbrirForm('frmMatCol06', Self)); >> ..... >> end; >> >> A função completa AbrirForm é esta. Vlw. >> >> function AbrirForm(AForm: string; ADono: TComponent; AEstilo: >> TFormBorderStyle = bsSingle; >> AShow: Boolean = True): TForm; >> var >> Pc : TPersistentClass; >> Nome : TForm; >> I : Integer; >> begin >> try >> Pc := GetClass('T' + AForm); >> if (Pc <> nil) then >> begin >> Nome := nil; >> I := 0; >> while I < Screen.FormCount do >> begin >> if Screen.Forms[I] is Pc then >> Nome := Screen.Forms[I]; >> Inc(I); >> end; >> if Nome = nil then >> begin >> try >> Nome := TFormClass(Pc).Create(ADono); >> Nome.KeyPreview := True; >> Nome.OnKeyDown := frmAmerica.AdicionarAtalho; >> Result := Nome; >> >> if AShow then >> Nome.Show >> else >> Nome.ShowModal; >> >> except on E: Exception do >> begin >> MessageDlg('Ocorreu um erro ao carregar esta função.' + #13 + >> 'Erro original: ' + #13#13 + >> E.Message, mtWarning, [mbOk], 0); >> Result := nil; >> Exit; >> end; >> end; >> end >> else >> begin >> if AShow then >> Nome.Show >> else >> Nome.ShowModal; >> Result := Nome; >> end; >> end >> else >> begin >> MessageDlg('Ocorreu um erro ao carregar esta função.' + #13 + >> 'Janela: ' + AForm, mtWarning, [mbOk], 0); >> Result := nil; >> end; >> except >> Result := nil; >> end; >> end; >> -- >> >> ---------------------------------------------------------- >> *Adriano Santos* >> >> > > >