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*
>>
>>
> 
> 
> 

Responder a