Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Mark1 Membro Junior
Registrado: Quarta-Feira, 7 de Mai de 2008 Mensagens: 365
|
Enviada: Sex Abr 14, 2017 2:07 pm Assunto: cannot focus a disabled or invisible window [RESOLVIDO] |
|
|
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 |
|
|
anderbelluno Colaborador
Registrado: Quarta-Feira, 23 de Novembro de 2011 Mensagens: 1029 Localização: Cianorte-PR
|
Enviada: Sex Abr 14, 2017 2:23 pm Assunto: |
|
|
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 |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Sex Abr 14, 2017 3:13 pm Assunto: |
|
|
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 |
|
|
Mark1 Membro Junior
Registrado: Quarta-Feira, 7 de Mai de 2008 Mensagens: 365
|
Enviada: Sex Abr 14, 2017 3:14 pm Assunto: |
|
|
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 |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Sex Abr 14, 2017 3:17 pm Assunto: |
|
|
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 |
|
|
anderbelluno Colaborador
Registrado: Quarta-Feira, 23 de Novembro de 2011 Mensagens: 1029 Localização: Cianorte-PR
|
Enviada: Sex Abr 14, 2017 3:39 pm Assunto: |
|
|
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 |
|
|
Mark1 Membro Junior
Registrado: Quarta-Feira, 7 de Mai de 2008 Mensagens: 365
|
Enviada: Sex Abr 14, 2017 5:14 pm Assunto: |
|
|
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 |
|
|
Mark1 Membro Junior
Registrado: Quarta-Feira, 7 de Mai de 2008 Mensagens: 365
|
Enviada: Sex Abr 14, 2017 10:43 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sáb Abr 15, 2017 11:10 am Assunto: |
|
|
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 |
|
|
Mark1 Membro Junior
Registrado: Quarta-Feira, 7 de Mai de 2008 Mensagens: 365
|
Enviada: Sáb Abr 15, 2017 12:08 pm Assunto: |
|
|
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 |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Abr 17, 2017 8:43 am Assunto: |
|
|
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 |
|
|
Mark1 Membro Junior
Registrado: Quarta-Feira, 7 de Mai de 2008 Mensagens: 365
|
Enviada: Seg Abr 17, 2017 8:49 am Assunto: |
|
|
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 |
|
Voltar ao Topo |
|
|
|