Fórum Sobre procurar formulário... #283352

30/05/2005

0

pessoal como procurar por um formulário no projeto...? mas apenas um formulário e não um TComponent... tipo algo que passo o seu nome e ele me retorna uma classe ou algo similar...


Bruno Belchior

Bruno Belchior

Responder

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?


Responder

Gostei + 0

30/05/2005

Renatosilva

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.


Responder

Gostei + 0

30/05/2005

Massuda

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.


Responder

Gostei + 0

30/05/2005

Bruno Belchior

Application tem uma propriedade que é um array dos forms da aplicação
mas que propriedade é essa?


Responder

Gostei + 0

30/05/2005

Bruno Belchior

na verdade eu precizo acessar todos os formulários e saber se eles derivam de uma determinada classe...


Responder

Gostei + 0

30/05/2005

Massuda

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;



Responder

Gostei + 0

30/05/2005

Bruno Belchior

é exatamente isso que estou fazendo só que precizo de todos os forms (inclusive os que não foram criados)...


Responder

Gostei + 0

30/05/2005

Massuda

é 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.


Responder

Gostei + 0

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


Responder

Gostei + 0

30/05/2005

Renatosilva

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;



Responder

Gostei + 0

30/05/2005

Massuda

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.


Responder

Gostei + 0

30/05/2005

Renatosilva

como você poderia analisar se um determinado form é derivada de uma determinada classe.


if Variable is TFormSubClass then...


Responder

Gostei + 0

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


Responder

Gostei + 0

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


Responder

Gostei + 0

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


Responder

Gostei + 0

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

Aceitar