Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal!


Estou desenvolvendo um sistema que precisa ser aberto um formulário fsMDIChild assim que chegar algum registro no banco de dados.

1- Fiz uma verificação se a quantidade de registros na tabela é diferente de zero
2- Fiz um laço FOR varrer todo a tabela.
3- Verifico se a quantidade de Forms MDIChild criados é menor que a quantidade de registros localizado na tabela
4- Verifico se a quantidade de forms criado é maior que 1, se for eu crio o formulário, dou um next na query da tabela e crio o formulário passando os parâmetros para o mesmo, se não crio o formulário passando os parâmetros (primeiro registro 1 formulário).

Funciona lindamente, desde que todos sejam criados de uma única vez, se os formulários estiverem abertos e chegar um novo registro, o formulário é criado, mas é passado os dados do primeiro registro na tabela.

Tentei colocar o ID de cada registro no caption do formulário e usar um laço for para percorrer as janelas MDIs e comparar com os IDs do banco e só fazer os que não estiverem abertos, mas não rolou.
Tentei criando um array também, onde cada ID da tabela era armazenado no array e feito uma pesquisa e se não tiver no array cria o formulário, mas não deu.

Alguém já precisou fazer ago assim ou tem alguma dica que possa me ajudar?

O codigo abaixo está dentro de um Timer, se alguém conhecer outra forma seria interessante.

 

 

if( QueryEventos.RecordCount <> 0) then
 begin

    for i := 0 to QueryEventos.RecordCount - 1 do
    begin
      if (MDIChildCount <QueryEventos> 0)then
        begin
          Application.CreateForm(TFormEventos,FormEventos);
          FormEventos.Caption := IntToStr(QueryEventos.FieldValues['id']);
          FormEventos.Show;
          QueryEventos.Next;
        end//if(MDIChildCount > 1)then
        else
        begin
          Application.CreateForm(TFormEventos,FormEventos);
          FormEventos.Caption := IntToStr(QueryEventos.FieldValues['id']);
          FormEventos.Show;
          QueryEventos.Next;
        end;//FIM ELSE - if(MDIChildCount > 1)then

      end;//FIM if (MDIChildCount < QueryEventos.RecordCount) then
    end;// FIM for i := 0 to QueryEventos.RecordCount - 1 do

 end;// FIM if( QueryEventos.RecordCount <> 0) then 

 

Error.png

Postado

@Cristiano Zim  os formulários são MDIChild e o caption dos mesmos vão possuir o mesmo nome exemplo: Eventos.

Não entendi bem o que você quis dizer.

Dei uma pesquisada e usando o FindWindow(), pelo menos pelo o que pesquisei ele pega o nome da aplicação e não das janelas filhas.

e o ComponentCount contaria os componentes do formulario.

 

Preciso abrir um form para cada registro da tabela, e para cada form passar o valor do ID do cadastro. Sendo que se chegar um novo cadastro (evento) precisa ser aberto outro formulario e passado o ID do evento que chegou.

Em PHP fiz e tudo funciona lindamente, em Delphi que estou tendo dificuldades em montar a estrutura, consegui fazer funcionar com 3 (cadastros) eventos, mais que isso começa a abrir janelas com dados duplicados, o que não deveria, uma vez que coloquei dinamicamente para mostrar o ID no caption de cada form criado dinamicamente e coloquei para percorrer os forms filhos abertos e consultar o caption... bem louco ..

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!