Fórum Registrar Classes atraves de uma String #384475
24/08/2010
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!!!
Posts
vc pode , talves te atenda em cada unit escrever
initialization
RegisterClass(TSeuForm);
finalization
UnRegisterClass(TSeuForm);
end.
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....
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;
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...
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 ???
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...
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
26/08/2010
Roberto Oliver
Beleza....estou analisando...
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...
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
Beleza...vlw por toda ajuda...aprendi mta coisa...