Fórum Registrar Classes atraves de uma String #384475

24/08/2010

0

Olá Pessoal....   é o seguinte, estou criando um acesso e permissão customizado para meus sistemas... Onde eu posso permitir nao somente o acesso do usuário aos forms como posso tambem rastrear qualquer componente presente no form.... Todo mundo sabe que temos o seguinte metodo...   Var   Cont: Integer; begin    For Cont:=0 to Form.ComponentsCount -  do begin       ListBox1.Items.Add(Form.Components[Cont].name);    end; end;   Assim terei o nome de todos os componentes do form.... Qual minha ideia??? Ter uma lista do nome dos formulários.... tipo...ListaFormularios.items.add('Form1,Form2,Form3') Bom sei que está errado, mas é somente para exemplificar o que quero...   Tendo esta lista dos nomes dos formulários...Eu poderia saber o nome de todos os componentes dos forms atraves do nome....isso eu já consigo...porem eu tenho um problema... eu preciso registrar a classe dos formulários...   RegisterClass(TPersistentClass);   O que eu estou precisando é registrar a classe do formulário atraves do Nome do Formulário...???   Será que alguem tem a solução??   Já tentei RegisTerClassAlias(TPersistentClass,AString); mas tbm nao funcionou...     VlW!!!  
Leandro Costa

Leandro Costa

Responder

Posts

24/08/2010

Marco Salles

vc pode , talves te atenda em cada unit escrever   initialization
RegisterClass(TSeuForm); finalization
UnRegisterClass(TSeuForm); end.    
 
Responder

Gostei + 0

25/08/2010

Leandro Costa

Aham...isso ai ajuda sim ...mas a ideia era criar um componente que registrasse as classses para mim atraves do nome(String) da classe...mas nao acho nada na internet...bom vou continuar tentando se nao achar...vai ter que ser deste jeito mesmo....
Responder

Gostei + 0

25/08/2010

Marco Salles

So uma detalhe...
Tendo esta lista dos nomes dos formulários...Eu poderia saber o nome de todos os componentes dos forms atraves do nome....isso eu já consigo...porem eu tenho um problema... eu preciso registrar a classe dos formulários...  
vc não precisa ter este trabalho todo   o Screen ja faz isto para Vc...Para Forms Intanciados ****  
var
  i,j: Integer;
begin
with  Screen do
  begin
    for i := 0 to FormCount - 1 do
        if Forms[i].Name = 'NomeDoFormInstanciado' then
          begin
             with Screen.Forms[i] do
               begin
                  for j := 0 to  ComponentCount - 1 do
                     showmessage(Components[j].Name)
               end;
         end;
  end;

end;    
Responder

Gostei + 0

25/08/2010

Leandro Costa

Isso mesmo...!!   Mas como vc disse....isso somente serve para forms instanciados...no meu caso...eu preciso instanciar os forms de acordo com um  nome(String)...registrrar a classe desse form...    
Responder

Gostei + 0

25/08/2010

Marco Salles

Isso mesmo...!! Mas como vc disse....isso somente serve para forms instanciados...no meu caso...eu preciso instanciar os forms de acordo com um  nome(String)...registrrar a classe desse form...  
  então vc precisa do Padrçao Factory ... Seria isto ???
Responder

Gostei + 0

26/08/2010

Leandro Costa

Nossa véio, vc mencionou isso e eu já fui procurar no google...e parece que é isto mesmo...atraves de uma string eu coverter para uma classe, instanciar estar classe, para depois eu registralá... Se você puder me ajudar com isso seria ótimo....mas eu to procurando já no google para ver se acho alguma coisa...vlw cara...
Responder

Gostei + 0

26/08/2010

Marco Salles

então , veja se este tópico postado te ajuda   mas leia com atenção   http://forum.devmedia.com.br/viewtopic.php?t=74823&highlight=factory
Responder

Gostei + 0

26/08/2010

Roberto Oliver

Beleza....estou analisando...
Responder

Gostei + 0

27/08/2010

Leandro Costa

procedure TFormFactory.RegisterForm(const aFormName: string;
  aFormClass: TComponentClass);
var
  i: integer;
begin
  i := FList.IndexOf(aFormName);
  if i = -1 then
    FList.AddObject(aFormName, TObject(aFormClass));
end; FormFactory.RegisterForm('Form2', TForm2);  --> Isto é exatamente o que eu quero... Porem agora vem a minha segunda questão...que seria passar este Segundo parametro atraves de uma String... Pois Nesta procedure, eu passo o nome do formulário e a classe dele....porem eu queria saber se tem algum jeito de passar a classe do formulário atraves de string também....Se tiver como fechou minhas duvidas sobre este tópico....   Vlw pela ajuda cara...
Responder

Gostei + 0

27/08/2010

Marco Salles

Aqui entra a historia do Ovo ou do galinha. Quem nasceu primeiro ??? Resposta correta descoberta pelos cientista foi o Dinossauro   enfim , para se usar o GetClass ou o FindClass > que retorna um TPersistenClass a partir de um Nome é necessário que a classe esteja Registrada ..A principio não posso passar o TPersistentClasse ( o proprio nome ja diz , persiste no Arquivo DFM) sem Registra-lo . É claro que nada é impossivel , desde de um bom conhecimento e alguem disposto a faze-lo . Particularmente não conheço meios e tb não vejo necessidade   Nao estamos na contramão da POO , estamos na mesma Unidade , não vejo dificuldade e nen razoes de ordem tecnica para escrever   RegisterClass('SeuForm')  do que escrever RegisterClass(TSeuForm)    ate pelo contrário com o Nome da ate mais trabalho do que com a Classe  
Responder

Gostei + 0

27/08/2010

Leandro Costa

Beleza...vlw por toda ajuda...aprendi mta coisa...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar