Posts
30/05/2005
Bruno Belchior
Pela variável global [b:c0d0dbf4f1]Screen[/b:c0d0dbf4f1] eu acesso a propriedade [b:c0d0dbf4f1]CustomForms[/b:c0d0dbf4f1] varrendo isso usando [b:c0d0dbf4f1]CustomFormsCount[/b:c0d0dbf4f1] o delphi varerrá apenas os Formulários ou todos os componentes contidos nele também?
Bruno, Application tem uma propriedade que é um array dos forms da aplicação. Você poderia criar uma classe com o mesmo array como propriedade só que indexado pelo nome como você quer (o Application não tem isso), no entanto não sei como fazer, é como acessar campos em TTable assim: tblCustomer[´CustName´] := ´Obi-Wan Kenobi´.
Ou poderia criar uma função que percorresse o array e comparasse com o nome desejado, tendo um desempenho inferior do que a propriedade indexada. Pesquise a respeito, qualquer coisa poste.
Pela variável global [b:afa56172b3]Screen[/b:afa56172b3] eu acesso a propriedade [b:afa56172b3]CustomForms[/b:afa56172b3] varrendo isso usando [b:afa56172b3]CustomFormsCount[/b:afa56172b3] o delphi varerrá apenas os Formulários ou todos os componentes contidos nele também?
Apenas os forms. A lista é uma lista de forms, não componentes... para cada item (form) na lista, você pode utilizar a lista Controls ou Components para acessar os componentes contidos no form.
...tipo algo que passo o seu nome e ele me retorna uma classe ou algo similar...
Isso só vai funcionar para forms que já tenham sido criados e estejam em uso. Não funcionará para forms que ainda não foram criados.
30/05/2005
Bruno Belchior
Application tem uma propriedade que é um array dos forms da aplicação
mas que propriedade é essa?
30/05/2005
Bruno Belchior
na verdade eu precizo acessar todos os formulários e saber se eles derivam de uma determinada classe...
na verdade eu precizo acessar todos os formulários e saber se eles derivam de uma determinada classe...
Acho que isso funcionaria...
for I := 0 to Screen.FormCount-1 do begin
if Screen.Forms[I] is TMinhaClasseEspecial then begin
// deriva da minha classe especial
end;
end;
30/05/2005
Bruno Belchior
é exatamente isso que estou fazendo só que precizo de todos os forms (inclusive os que não foram criados)...
é exatamente isso que estou fazendo só que precizo de todos os forms (inclusive os que não foram criados)...
A arquitetura do seu programa precisa realmente disso? Isso só funciona baseado no conhecimento de como o Delphi gera os aplicativos.
Basicamente, você precisa analisar o arquivo do seu executável e parsear os resources RCDATA embutidos nele (note que nem todos os resources RCDATA são necessariamente forms). Se seu programa utilizar forms em DLLs/BPLs, estas também terão de ser analisadas. Se eu encontrar um exemplo simples disso posto aqui.
30/05/2005
Bruno Belchior
na verdade estou trabalhando em um componente que precizo de algo que verifique todos os formulários da aplicação...
Ih cara confundi. A propriedade é Application.MainForm.MDIChildren mas é só para aplicações MDI. Mas tem uma parada maneira que pode ser o que você quer:
procedure TForm1.Button1Click(Sender: TObject);
var
Component: TCOmponent;
begin
Component := Application.FindComponent(´Formd1´);
if Component = nil then
ShowMessage(´Oh God! Not found!´)
else if Component is TForm then
Showmessage(´Oh found a form´);
end;
na verdade estou trabalhando em um componente que precizo de algo que verifique todos os formulários da aplicação...
Fiquei sem entender se você precisa fazer isso em runtime ou design time... Em runtime, a única forma é a que postei antes.
Em design time, acho que daria para analisar o uses do DPR do projeto, mas não faço idéia de como você poderia analisar se um determinado form é derivada de uma determinada classe. Note que você pode ter linkado no seu programa forms em units que não estão no uses do DPR, mas estão no uses de alguma unit do projeto.
como você poderia analisar se um determinado form é derivada de uma determinada classe.
if Variable is TFormSubClass then...
30/05/2005
Bruno Belchior
é um componente que usa a idéia do usercontrol ele adiciona vários itens em um coleção em design time... porém gostaria que no loaded do componente ele verificasse todos os formulários descendentes de um formulário de cadastro meu e então sem ter que inserir manualmente ele já inseriria esses itens altomático...
30/05/2005
Bruno Belchior
[b:cc54649578]renato3110[/b:cc54649578], não gostaria de usar [b:cc54649578]FindComponent[/b:cc54649578] pq imagine só qts componentes vou ter em um grande projeto então gostaria de varrer por formulários mesmo...
30/05/2005
Bruno Belchior
e outra coisa o método [b:824a6d9910]FindComponent[/b:824a6d9910] só procura por componentes que são criados passando como seu proprietário o Application...