ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

cannot focus a disabled or invisible window [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Mark1
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 7 de Mai de 2008
Mensagens: 365

MensagemEnviada: Sex Abr 14, 2017 2:07 pm    Assunto: cannot focus a disabled or invisible window [RESOLVIDO] Responder com Citação

Boa tarde pessoal.

Vejam que loucura. Pelo menos pra mim.

No meu form de produtos, ao digitar parte do nome de um produto ocorre um erro, porém somente em uma determinada situação. Exemplo:

Supondo que eu queira produtos como CAMISA.

Se eu digitar CAMIS ou CAMISETA, sem problemas, o grid é carregado. Mas se eu digitar CAMISA então ocorre o erro: cannot focus a disabled or invisible window

Meu select (montado após dar enter no campo):
Código:

     1: // Nome Completo
     begin
         if cmbTIPO.ItemIndex = 0 then // Inicia com...
         begin
              Add('Select * From Produtos Where Nome Like ' + QuotedStr(edtPESQ.Text+'%'));
         end else // Contém...
              Add('Select * From Produtos Where Nome Like ' + QuotedStr('%'+edtPESQ.Text+'%'));
     end;



Nunca tinha visto isso.

Se alguém tiver alguma ideia e puder ajudar, desde já agradeço.


Editado pela última vez por Mark1 em Sáb Abr 15, 2017 12:41 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Sex Abr 14, 2017 2:23 pm    Assunto: Responder com Citação

cannot focus a disabled or invisible window
o próprio erro já diz oque está acontecendo.
Não pode dar o foco em uma janela desabilitada ou invisível.
controla seu código pra ver se vc esta dando um SetFocus em algum lugar que não deveria.
se não encontrar posta toda a unit que dou uma olhadinha.
att.
Anderson.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Sex Abr 14, 2017 3:13 pm    Assunto: Responder com Citação

Brother, pelo que li no seu código faltou você dar um Open no Sql, mas esse erro é como o Anderson falou, é sobre algum elemento que está recebendo foco, mesmo estando desabilitado ou enable:= true, tenta ver se não é em um botão ou um edit, também tava quebrando a cabeça com esse erro, no meu caso era no edit.

Falou
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mark1
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 7 de Mai de 2008
Mensagens: 365

MensagemEnviada: Sex Abr 14, 2017 3:14 pm    Assunto: Responder com Citação

anderbelluno escreveu:
cannot focus a disabled or invisible window
o próprio erro já diz oque está acontecendo.
Não pode dar o foco em uma janela desabilitada ou invisível.
controla seu código pra ver se vc esta dando um SetFocus em algum lugar que não deveria.
se não encontrar posta toda a unit que dou uma olhadinha.
att.
Anderson.


Não tem setfocus em nenhum lugar. Já depurei e o erro só ocorre quando passa por essa condição e se digitar parte do nome como informei anteriormente. De qualquer forma segue o código do evento:

Código:
procedure TfrmCad_Produtos.edtPESQKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if key = #13 then
  begin
    dmBaseDados.qrPRODUTOS.Close;
    with dmBaseDados.qrPRODUTOS.SQL do
    begin
      Clear;
      case cmbPESQ.ItemIndex of
          0: // Código
          begin
            Add('Select * From Produtos Where Pro_Id = ' + QuotedStr(edtPESQ.Text));
          end;
          1: // Nome Completo
          begin
            if cmbTIPO.ItemIndex = 0 then // Inicia com...
            begin
              Add('Select * From Produtos Where Upper(Nome) Like ' + QuotedStr(edtPESQ.Text+'%'));
            end else // Contém...
              Add('Select * From Produtos Where Upper(Nome) Like ' + QuotedStr('%'+edtPESQ.Text+'%'));
          end;
          2: // Nome Reduzido
          begin
             if cmbTIPO.ItemIndex = 0 then // Inicia com...
             begin
                Add('Select * From Produtos Where Nome_Reduzido Like ' + QuotedStr(edtPESQ.Text+'%'));
             end else // Contém...
                Add('Select * From Produtos Where Nome_Reduzido Like ' + QuotedStr('%'+edtPESQ.Text+'%'));
          end;
          3: // GTIN
          begin
             if cmbTIPO.ItemIndex = 0 then // Inicia com...
             begin
                Add('Select * From Produtos Where CodBarra Like ' + QuotedStr(edtPESQ.Text+'%'));
             end else // Contém...
                Add('Select * From Produtos Where CodBarra Like %' + QuotedStr(edtPESQ.Text+'%'));
          end;
        end;
    end;

    ShowMessage(dmBaseDados.qrPRODUTOS.SQL.Text);

    dmBaseDados.qrPRODUTOS.Open;
  end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Sex Abr 14, 2017 3:17 pm    Assunto: Responder com Citação

Citação:

Não tem setfocus em nenhum lugar. Já depurei e o erro só ocorre quando passa por essa condição e se digitar parte do nome como informei anteriormente. De qualquer forma segue o código do evento:

Código:
procedure TfrmCad_Produtos.edtPESQKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if key = #13 then
  begin
    dmBaseDados.qrPRODUTOS.Close;
    with dmBaseDados.qrPRODUTOS.SQL do
    begin
      Clear;
      case cmbPESQ.ItemIndex of
          0: // Código
          begin
            Add('Select * From Produtos Where Pro_Id = ' + QuotedStr(edtPESQ.Text));
          end;
          1: // Nome Completo
          begin
            if cmbTIPO.ItemIndex = 0 then // Inicia com...
            begin
              Add('Select * From Produtos Where Upper(Nome) Like ' + QuotedStr(edtPESQ.Text+'%'));
            end else // Contém...
              Add('Select * From Produtos Where Upper(Nome) Like ' + QuotedStr('%'+edtPESQ.Text+'%'));
          end;
          2: // Nome Reduzido
          begin
             if cmbTIPO.ItemIndex = 0 then // Inicia com...
             begin
                Add('Select * From Produtos Where Nome_Reduzido Like ' + QuotedStr(edtPESQ.Text+'%'));
             end else // Contém...
                Add('Select * From Produtos Where Nome_Reduzido Like ' + QuotedStr('%'+edtPESQ.Text+'%'));
          end;
          3: // GTIN
          begin
             if cmbTIPO.ItemIndex = 0 then // Inicia com...
             begin
                Add('Select * From Produtos Where CodBarra Like ' + QuotedStr(edtPESQ.Text+'%'));
             end else // Contém...
                Add('Select * From Produtos Where CodBarra Like %' + QuotedStr(edtPESQ.Text+'%'));
          end;
        end;
    end;

    ShowMessage(dmBaseDados.qrPRODUTOS.SQL.Text);

    dmBaseDados.qrPRODUTOS.Open;
  end;
end;


Brother, realmente você não ta colocando 'Open;' nas condições[/quote]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Sex Abr 14, 2017 3:39 pm    Assunto: Responder com Citação

Em qual linha exatamente ocorre o erro?
Pois vi que que tem um erro aqui
Código:

3: // GTIN
          begin
             if cmbTIPO.ItemIndex = 0 then // Inicia com...
             begin
                Add('Select * From Produtos Where CodBarra Like ' + QuotedStr(edtPESQ.Text+'%'));
             end else // Contém...
                Add('Select * From Produtos Where CodBarra Like %' + QuotedStr(edtPESQ.Text+'%')); //nessa linha olha onde vc colocou o sinal do percentual...
          end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mark1
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 7 de Mai de 2008
Mensagens: 365

MensagemEnviada: Sex Abr 14, 2017 5:14 pm    Assunto: Responder com Citação

anderbelluno escreveu:
Em qual linha exatamente ocorre o erro?
Pois vi que que tem um erro aqui
Código:

3: // GTIN
          begin
             if cmbTIPO.ItemIndex = 0 then // Inicia com...
             begin
                Add('Select * From Produtos Where CodBarra Like ' + QuotedStr(edtPESQ.Text+'%'));
             end else // Contém...
                Add('Select * From Produtos Where CodBarra Like %' + QuotedStr(edtPESQ.Text+'%')); //nessa linha olha onde vc colocou o sinal do percentual...
          end;


O erro está na condição do primeiro post. Lá o select está correto. (Up)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mark1
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 7 de Mai de 2008
Mensagens: 365

MensagemEnviada: Sex Abr 14, 2017 10:43 pm    Assunto: Responder com Citação

Boa noite pessoal.

Depois de muitos neurônios queimados resolvi fazer o seguinte: colocar um breakpoint em todos os componentes com Setfocus. E não é que estava mesmo tentando dar foco em um controle que estava em outra aba. Tudo bem podem me chamar de teimoso. Mas gostaria que me explicassem o seguinte:

O controle que vai receber o foco está dentro do EVENTO CLICK de outro controle. Pergunta: Como esse evento click foi disparado se apenas dei enter no edit de pesquisa?

Pra contornar a situação coloquei uma condição para verificar se o dataset está em modo de inclusão ou alteração. Ficou assim:

Código:
procedure TfrmCad_Produtos.chkPROMOClick(Sender: TObject);
begin
  inherited;
  if dsPadrao.DataSet.State in [dsInsert,dsEdit] then
  begin
    if chkPROMO.Checked then
    begin
      edtPINI.Enabled := true;
      edtPFIM.Enabled := true;
      edtPPRO.Enabled := true;

      edtPINI.SetFocus;
    end else
      begin
        edtPINI.Enabled := false;
        edtPFIM.Enabled := false;
        edtPPRO.Enabled := false;

      end;
  end;
end;


Agradeço pela ajuda de todos.

Abraço
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Abr 15, 2017 11:10 am    Assunto: Responder com Citação

Bom dia,

Pode ser que essa procedure tenha sido atribuída a outro evento do mesmo ou outro componente de forma involuntária. Para verificar essa possibilidade clique com o botão direito do mouse sobre o Form, depois sobre a opção "View as text" e utilize o Ctrl+F para procurar pelo nome da procedure para ver se a mesma está sendo utilizada em outro evento.
Pode ser também que a procedure esteja sendo chamada via código.

Espero que ajude


Editado pela última vez por imex em Seg Dez 04, 2023 11:48 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mark1
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 7 de Mai de 2008
Mensagens: 365

MensagemEnviada: Sáb Abr 15, 2017 12:08 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Pode ser que essa procedure tenha sido atribuída a outro evento do mesmo ou outro componente de forma involuntária. Para verificar essa possibilidade clique com o botão direito do mouse sobre o Form, depois sobre a opção "View as text" e utilize o Ctrl+F para procurar pelo nome da procedure para ver se a mesma está sendo utilizada em outro evento.
Pode ser também que a procedure esteja sendo chamada via código.

Espero que ajude



Bom dia.

Imex, segui sua dica, mas não encontrei nada do que você citou. Mesmo assim, como de certa forma já resolvi vou dar este post por encerrado. Tenho certeza que na hora que menos esperar vou encontrar o problema. Por hora deixa como está, preciso dar andamento.

Abraço a todos e muito obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Abr 17, 2017 8:43 am    Assunto: Responder com Citação

Apenas uma dica, quando vou utilizar o comando SetFocus em algum controle, eu tenho por costume fazer uma verificação se esse controle está apto a receber o foco, ex:

Código:
if Edit1.CanFocus then
  Edit1.SetFocus
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mark1
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 7 de Mai de 2008
Mensagens: 365

MensagemEnviada: Seg Abr 17, 2017 8:49 am    Assunto: Responder com Citação

leo_cj escreveu:
Apenas uma dica, quando vou utilizar o comando SetFocus em algum controle, eu tenho por costume fazer uma verificação se esse controle está apto a receber o foco, ex:

Código:
if Edit1.CanFocus then
  Edit1.SetFocus


Ótima dica meu amigo.

Valeu Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB