onShow maluco... Estranho!
Olá pessoal,
Alguém pode me ajudar a desvendar este segredo. É o seguinte vou primiro explicar como é minha aplicação. Estou desenvolvendo um sistema para Paróquias, minha aplicação é em MDI, no menu principal uso para chamar os forms com este código:
ele não carrega os forms no DM.
Quero fazer o seguinte, quando entro no form Pastoral ele carrega no onShow os código que verifica se tem o dado na tabela e se tiver ´SIM´ ele marca o CheckBox como State = cbChecked, se tiver NAO ele marca State = cbUnchecked. Uso este código:
Mas as vezes quando abre funciona e as vezes não, QUANDO PESQUISO UM PESSOA ELE FUNCIONA E AS VEZES NÃO. PQ????
ESTOU COLOCANDO PARA CARREGAR NO LOCAL ERRADO? NÃO É NO onShow? Mas no onCreate dá a mesma coisa.
Obrigado
Rodrigo[/code]
Alguém pode me ajudar a desvendar este segredo. É o seguinte vou primiro explicar como é minha aplicação. Estou desenvolvendo um sistema para Paróquias, minha aplicação é em MDI, no menu principal uso para chamar os forms com este código:
Try Try Screen.CUrsor := crSQLWait; DM.qPastoral.Open; Application.CreateForm(TFPastoral, FPastoral); FPastoral.Top := 15; Finally Screen.CUrsor := crDefault; End; Except DM.qPastoral.Close; End;
ele não carrega os forms no DM.
Quero fazer o seguinte, quando entro no form Pastoral ele carrega no onShow os código que verifica se tem o dado na tabela e se tiver ´SIM´ ele marca o CheckBox como State = cbChecked, se tiver NAO ele marca State = cbUnchecked. Uso este código:
procedure TFPastoral.FormShow(Sender: TObject); begin if DM.qPastoralCATEQUISTA.Value = ´SIM´ Then Begin CheckBox1.State := cbChecked; End; if DM.qPastoralCATEQUISTA.Value = ´NAO´ Then Begin CheckBox1.State := cbGrayed; End;
Mas as vezes quando abre funciona e as vezes não, QUANDO PESQUISO UM PESSOA ELE FUNCIONA E AS VEZES NÃO. PQ????
ESTOU COLOCANDO PARA CARREGAR NO LOCAL ERRADO? NÃO É NO onShow? Mas no onCreate dá a mesma coisa.
Obrigado
Rodrigo[/code]
Rodrigorpb
Curtidas 0
Respostas
Rodrigorpb
25/08/2005
pessoal esquici de dizer, uso IBX e F.B 1.5.
Rodrigo.
Rodrigo.
GOSTEI 0
Massuda
25/08/2005
Eu não entendi direito... você faz uma pesquisa usando DM.qPastoral e mostra o resultando em um form TFPastoral?
Pelo que você escreveu, dá impressão que o form TFPastoral mostra os dados de uma única pessoa. Tem garantia que o resultado da sua pesquisa é único?
Esse form TFPastoral tem algum componente data aware?
Uma outra coisa... eu prefiro o seguinte código ao invés do que você postou...Imagino que a query DM.qPastoral seja fechada em algum outro ponto do código e não apenas quando algo dá errado.
Pelo que você escreveu, dá impressão que o form TFPastoral mostra os dados de uma única pessoa. Tem garantia que o resultado da sua pesquisa é único?
Esse form TFPastoral tem algum componente data aware?
ESTOU COLOCANDO PARA CARREGAR NO LOCAL ERRADO? NÃO É NO onShow? Mas no onCreate dá a mesma coisa.
Pode ser em qualquer dos dois eventos, eu prefiro usar o OnCreate.Uma outra coisa... eu prefiro o seguinte código ao invés do que você postou...
Screen.CUrsor := crSQLWait; Try DM.qPastoral.Open; Try Application.CreateForm(TFPastoral, FPastoral); FPastoral.Top := 15; except DM.qPastoral.Close; End; Finally Screen.CUrsor := crDefault; End;
GOSTEI 0
Rodrigorpb
25/08/2005
Olá,
Eu não uso nenhum componente data aware.
E eu não expliquei direito, tenho o form Pastoral que eu cadastro os dados Nome, Endereço, e um CheckBox que coloco se é ou não CATEQUISTA, e outra somente para fazer pesquisa destas pessoas, quando eu clico no botão pesquisa que está no form Pastoral ele fecha a o o form FPastoral, não sei se pode sei por isso. Ai ele abre o Form pesquisa e dentro do form pesquisa tenho outra query para fazer as pesquisas, quando fecho o Form pesquisa ele fecha a query do form pesquisa e abre novamente com este código:
Botão Visualizar
Repare q coloquei apenas um close de baixo do Pastoral.
E tb gostaria de saber mais qual é a diferença entre meu código e o seu, as vezes o erro pode estar ai.
Obrigado.
Rodrigo.
Eu não uso nenhum componente data aware.
E eu não expliquei direito, tenho o form Pastoral que eu cadastro os dados Nome, Endereço, e um CheckBox que coloco se é ou não CATEQUISTA, e outra somente para fazer pesquisa destas pessoas, quando eu clico no botão pesquisa que está no form Pastoral ele fecha a o o form FPastoral, não sei se pode sei por isso. Ai ele abre o Form pesquisa e dentro do form pesquisa tenho outra query para fazer as pesquisas, quando fecho o Form pesquisa ele fecha a query do form pesquisa e abre novamente com este código:
Botão Visualizar
Try Try Screen.CUrsor := crSQLWait; DM.qPastoral.Open; Application.CreateForm(TFPastoral, FPastoral); FPastoral.Top := 15; Close; Finally Screen.CUrsor := crDefault; End; Except DM.qPastoral.Close; End;
Repare q coloquei apenas um close de baixo do Pastoral.
E tb gostaria de saber mais qual é a diferença entre meu código e o seu, as vezes o erro pode estar ai.
Obrigado.
Rodrigo.
GOSTEI 0
Massuda
25/08/2005
O que você explicou me deixou mais confuso...
Afinal, o form TFPastoral mostra os dados de uma única pessoa?
Tem garantia que o resultado da sua pesquisa é único?
Porque quando a pessoa [b:1313d7a53b]não[/b:1313d7a53b] é catequista você deixa o checkbox desabilitado (grayed) ao invés de deixá-lo desmarcado (unchecked)?
Afinal, o form TFPastoral mostra os dados de uma única pessoa?
Tem garantia que o resultado da sua pesquisa é único?
Porque quando a pessoa [b:1313d7a53b]não[/b:1313d7a53b] é catequista você deixa o checkbox desabilitado (grayed) ao invés de deixá-lo desmarcado (unchecked)?
GOSTEI 0
Rodrigorpb
25/08/2005
Olá Massuda,
O Form mostra dados apenas de uma única pessoa.
Sobre o CheckBox foi engano meu, eu já arrumei isto.
Copiei as imagens da tela para vc dar uma olhada mas naum tenho como postar no forum, se vc puder passar seu e-mail, eu te envio.
Obrigado.
Rodrigo.
O Form mostra dados apenas de uma única pessoa.
Sobre o CheckBox foi engano meu, eu já arrumei isto.
Copiei as imagens da tela para vc dar uma olhada mas naum tenho como postar no forum, se vc puder passar seu e-mail, eu te envio.
Obrigado.
Rodrigo.
GOSTEI 0
Emerson Nascimento
25/08/2005
esse é um problema característico dos forms MDIChild. como sua visualização é automática (ao criar) ele não passa pelo OnShow. para contornar esse problema chame a procedure Show explicitamente:
Try Try Screen.CUrsor := crSQLWait; DM.qPastoral.Open; Application.CreateForm(TFPastoral, FPastoral); FPastoral.Top := 15; FPastoral.FormShow(FPastoral); Finally Screen.CUrsor := crDefault; End; Except DM.qPastoral.Close; End;
GOSTEI 0
Massuda
25/08/2005
...como sua visualização é automática (ao criar) ele não passa pelo OnShow.
Provavelmente você tem razão... uma outra alternativa é preencher o checkbox no OnCreate do form.GOSTEI 0
Rodrigorpb
25/08/2005
Massuda,
Como faço para monstrar as telas para vc, está no formato JPEG.
Outra, as vezes o CheckBox funciona e as vezes não, é muito entranho.
Rodrigo.
Como faço para monstrar as telas para vc, está no formato JPEG.
Outra, as vezes o CheckBox funciona e as vezes não, é muito entranho.
Rodrigo.
GOSTEI 0
Massuda
25/08/2005
Neste [url=http://forum.clubedelphi.net/viewtopic.php?t=67135]tópico[/url] tem um post meu sobre como por imagens no fórum.
[color=red:cf0ded7a26]Por favor, tenha dó de quem está numa conexão discada... [b:cf0ded7a26]não coloque imagens grandes[/b:cf0ded7a26].[/color:cf0ded7a26]
[color=red:cf0ded7a26]Por favor, tenha dó de quem está numa conexão discada... [b:cf0ded7a26]não coloque imagens grandes[/b:cf0ded7a26].[/color:cf0ded7a26]
GOSTEI 0
Rodrigorpb
25/08/2005
Estas são as telas, troquei o nome do form para Pessoas.
Vou colocar o código em baixo a imagem dos seguintes botões, Pesquisa no Form Pessoas, Visualizar do Form Pesquisa, e tb onshow e oncreate dos dois.
O checkbox marcado no Dizimista é que eu esquci de colocar no botão inserir, para ficar como os outros.
[img]http://img386.imageshack.us/my.php?image=tala17dn.jpg[/img]
[img]http://img397.imageshack.us/my.php?image=telapesq6yl.jpg[/img]
FORM PESSOA BOTÃO PESQUISA
FORM PESQUISA BOTÃO VISUALIZAR
ONSHOW FORM PESSOA
Só
Obrigado.
Vou colocar o código em baixo a imagem dos seguintes botões, Pesquisa no Form Pessoas, Visualizar do Form Pesquisa, e tb onshow e oncreate dos dois.
O checkbox marcado no Dizimista é que eu esquci de colocar no botão inserir, para ficar como os outros.
[img]http://img386.imageshack.us/my.php?image=tala17dn.jpg[/img]
[img]http://img397.imageshack.us/my.php?image=telapesq6yl.jpg[/img]
FORM PESSOA BOTÃO PESQUISA
Try Screen.CUrsor := crSQLWait; Application.CreateForm(TFConsFieis, FConsFieis); FConsFieis.Top := 10; FPessoas.Close; Finally Screen.CUrsor := crDefault; End
FORM PESQUISA BOTÃO VISUALIZAR
Try Try Screen.CUrsor := crSQLWait; DM.qPessoas.Open; DM.qEstcivil.Open; DM.qEstcivil.FetchAll; DM.qProfissao.Open; DM.qProfissao.FetchAll; DM.qCidades.Open; DM.qCidades.FetchAll; DM.qComunidades.Open; DM.qComunidades.FetchAll; DM.qGruporeflexao.Open; DM.qGruporeflexao.FetchAll; DM.qMinisterio.Open; DM.qMinisterio.FetchAll; DM.qMovimento.Open; DM.qMovimento.FetchAll; DM.qPastoral.Open; DM.qPastoral.FetchAll; DM.qSexo.Open; DM.qSexo.FetchAll; Application.CreateForm(TFPessoas, FPessoas); FPessoas.Top := 5; //Catequista if FPessoas.edCatequista.Text = ´CATEQUISTA´ Then Begin FPessoas.cbCatequista.State := cbChecked; End; if FPessoas.edCatequista.Text = ´´ Then Begin FPessoas.cbCatequista.State := cbGrayed; End; //Dizimista if FPessoas.edDizimista.Text = ´SIM´ Then Begin FPessoas.cbDizimista.State := cbChecked; End; if FPessoas.edDizimista.Text = ´NAO´ Then Begin FPessoas.cbDizimista.State := cbUnchecked; End; if FPessoas.edDizimista.Text = ´´ Then Begin FPessoas.cbDizimista.State := cbGrayed; End; //Eucaristia if FPessoas.edEucaristia.Text = ´SIM´ Then Begin FPessoas.cbEucaristia.State := cbChecked; End; if FPessoas.edEucaristia.Text = ´NAO´ Then Begin FPessoas.cbEucaristia.State := cbUnchecked; End; if FPessoas.edEucaristia.Text = ´´ Then Begin FPessoas.cbEucaristia.State := cbGrayed; End; //Batismo if FPessoas.edBatismo.Text = ´SIM´ Then Begin FPessoas.cbBatismo.State := cbChecked; End; if FPessoas.edBatismo.Text = ´NAO´ Then Begin FPessoas.cbBatismo.State := cbUnchecked; End; if FPessoas.edBatismo.Text = ´´ Then Begin FPessoas.cbBatismo.State := cbGrayed; End; //Crisma if FPessoas.edCrisma.Text = ´SIM´ Then Begin FPessoas.cbCrisma.State := cbChecked; End; if FPessoas.edCrisma.Text = ´NAO´ Then Begin FPessoas.cbCrisma.State := cbUnchecked; End; if FPessoas.edCrisma.Text = ´´ Then Begin FPessoas.cbCrisma.State := cbGrayed; End; FConsFieis.Close; Finally Screen.CUrsor := crDefault; End; Except DM.qPessoas.Close; DM.qEstcivil.Close; DM.qProfissao.Close; DM.qCidades.Close; DM.qComunidades.Close; DM.qGruporeflexao.Close; DM.qMinisterio.Close; DM.qMovimento.Close; DM.qPastoral.Close; DM.qSexo.Close; End;
ONSHOW FORM PESSOA
//Catequista if DM.qPessoasCATEQUISTA.Value = ´CATEQUISTA´ Then Begin cbCatequista.State := cbChecked; End; if DM.qPessoasCATEQUISTA.Value = ´´ Then Begin cbCatequista.State := cbGrayed; End; //Dizimista if DM.qPessoasDIZIMISTA.Value = ´SIM´ Then Begin cbDizimista.State := cbChecked; End; if DM.qPessoasDIZIMISTA.Value = ´NAO´ Then Begin cbDizimista.State := cbUnchecked; End; if DM.qPessoasDIZIMISTA.Value = ´´ Then Begin cbDizimista.State := cbGrayed; End; //Eucaristia if DM.qPessoasEUCARISTIA.Value = ´SIM´ Then Begin cbEucaristia.State := cbChecked; End; if DM.qPessoasEUCARISTIA.Value = ´NAO´ Then Begin cbEucaristia.State := cbUnchecked; End; if DM.qPessoasEUCARISTIA.Value = ´´ Then Begin cbEucaristia.State := cbGrayed; End; //Batismo if DM.qPessoasBATIZADO.Value = ´SIM´ Then Begin cbBatismo.State := cbChecked; End; if DM.qPessoasBATIZADO.Value = ´NAO´ Then Begin cbBatismo.State := cbUnchecked; End; if DM.qPessoasBATIZADO.Value = ´´ Then Begin cbBatismo.State := cbGrayed; End; //Crisma if DM.qPessoasCRISMADO.Value = ´SIM´ Then Begin cbCrisma.State := cbChecked; End; if DM.qPessoasCRISMADO.Value = ´NAO´ Then Begin cbCrisma.State := cbUnchecked; End; if DM.qPessoasCRISMADO.Value = ´´ Then Begin cbCrisma.State := cbGrayed; End;
Só
Obrigado.
GOSTEI 0
Massuda
25/08/2005
Colega,
Explique claramente qual é o problema.
Explique claramente qual é o problema.
GOSTEI 0
Rodrigorpb
25/08/2005
Massuda,
Quero que quando eu fazer a pesquisa ele marque os checkbox, como eu havia cadastrado. Para a pessoa saber se é Dizimista, 1ª Eucaristia...
Ex: Pesquisei Rodrigo, eu sou Dizimista ele vem marcado o checkbox. Agora pesquisei Camila, ela naum é dizimista, então fica Desmarcado.
Isso é que naum consigo. Por isso coloquei o codigo no onshow, mas as vezes da certinho e as vezes naum funciona.
Obrigado
Rodrigo
Quero que quando eu fazer a pesquisa ele marque os checkbox, como eu havia cadastrado. Para a pessoa saber se é Dizimista, 1ª Eucaristia...
Ex: Pesquisei Rodrigo, eu sou Dizimista ele vem marcado o checkbox. Agora pesquisei Camila, ela naum é dizimista, então fica Desmarcado.
Isso é que naum consigo. Por isso coloquei o codigo no onshow, mas as vezes da certinho e as vezes naum funciona.
Obrigado
Rodrigo
GOSTEI 0
Rjun
25/08/2005
Desculpe amigo rodrigorpb, eu já vi identações estranhas por aqui, mas a sua é uma das mais diferentes que já vi. Quem não tá acostumado sofre para analisar esses códigos.
if FPessoas.edDizimista.Text = ´SIM´ Then Begin FPessoas.cbDizimista.State := cbChecked; End; if FPessoas.edDizimista.Text = ´NAO´ Then Begin FPessoas.cbDizimista.State := cbUnchecked; End; if FPessoas.edDizimista.Text = ´´ Then Begin FPessoas.cbDizimista.State := cbGrayed; End;
GOSTEI 0
Rjun
25/08/2005
Você quer que ele fique desmarcado ou marcado com cor cinza?
GOSTEI 0
Rodrigorpb
25/08/2005
Gostaria tb que alguém me ajudasse a deixar este código certo.
Obrigado.
Rodrigo.
Obrigado.
Rodrigo.
GOSTEI 0
Rjun
25/08/2005
Não sei se vc leu meu último post, por isso estou repetindo.
[b:22c85895e7]Você quer que ele fique desmarcado ou marcado com cor cinza?[/b:22c85895e7]
[b:22c85895e7]Você quer que ele fique desmarcado ou marcado com cor cinza?[/b:22c85895e7]
GOSTEI 0
Rodrigorpb
25/08/2005
Desculpe tb eu naum havia falado,
No form Pessoas tem DBEdits ocultos que recebem os valores dos cheks
edDizimista = DBEdit1
No form Pessoas tem DBEdits ocultos que recebem os valores dos cheks
edDizimista = DBEdit1
procedure TFPessoas.cbDizimistaClick(Sender: TObject); begin if cbDizimista.Checked = True then Begin edDizimista.Text := ´SIM´ end Else Begin edDizimista.Text := ´NAO´; End; end;
GOSTEI 0
Massuda
25/08/2005
Quero que quando eu fazer a pesquisa ele marque os checkbox, como eu havia cadastrado. Para a pessoa saber se é Dizimista, 1ª Eucaristia...
Seu teste está errado. Por exemplo, no caso do dizimista, deveria ser algo assim:if FPessoas.edDizimista.Text = ´SIM´ then FPessoas.cbDizimista.State := cbChecked else if FPessoas.edDizimista.Text = ´NAO´ then FPessoas.cbDizimista.State := cbUnchecked else FPessoas.cbDizimista.State := cbGrayed;
GOSTEI 0
Rodrigorpb
25/08/2005
Rjun ele fica conforme estiver nos DBEdits = edDizimista (oculto no form Pessoa).
edDizimista pode estar: SIM NAO e NULO.
Ai quando abrir o onshow ele verifica e marca como deve.
edDizimista pode estar: SIM NAO e NULO.
Ai quando abrir o onshow ele verifica e marca como deve.
if DM.qPessoasDIZIMISTA.Value = ´SIM´ Then Begin cbDizimista.State := cbChecked; End; if DM.qPessoasDIZIMISTA.Value = ´NAO´ Then Begin cbDizimista.State := cbUnchecked; End; if DM.qPessoasDIZIMISTA.Value = ´´ Then Begin cbDizimista.State := cbGrayed; End;
GOSTEI 0
Rjun
25/08/2005
Não entendi o pq desse dbedit oculto. Vc chamou o form como o emerson.en falou?
if DM.qPessoasDIZIMISTA.Value = ´SIM´ Then cbDizimista.State := cbChecked else if DM.qPessoasDIZIMISTA.Value = ´NAO´ Then cbDizimista.State := cbUnchecked; else if DM.qPessoasDIZIMISTA.Value = ´´ Then cbDizimista.State := cbGrayed;
GOSTEI 0
Rodrigorpb
25/08/2005
Então Rjun, funciona tb do jeito que vc falou dois dois jeitos, mas o problema maior é que as vezes quando eu faço a pesquisa funciona e as vezes não, até parece que es vezes ele lê o OnShow, e as vezes não.
Agora vem a grande questão pq isso??
uso MDI não fiz ainda como o emerson.en falou.
O que pede ser?
Rodrigo.
Agora vem a grande questão pq isso??
uso MDI não fiz ainda como o emerson.en falou.
O que pede ser?
Rodrigo.
GOSTEI 0
Rjun
25/08/2005
Então faça como o emerson disse. Veja que com form MDI no momento que você cria o form e já o exibe acho que sem passar pelo evento OnShow.
GOSTEI 0
Rodrigorpb
25/08/2005
Fiz como nosso coléga disse, continua mesma coisa.
É duro, muito difícil isso.
Vou colocar no OnCreate para ver.
Rodrigo
É duro, muito difícil isso.
Vou colocar no OnCreate para ver.
Rodrigo
GOSTEI 0
Rjun
25/08/2005
Você ja debugou para saber onde está o erro?
GOSTEI 0
Rodrigorpb
25/08/2005
Rjun sou ainda ´marinheiro de primeira viajem´ em delphi, não sei como debugar o sistema, se vc pudesse me dar um dica para encontrar erros. Mas Obrigado pelas dicar, Rjun, Massuda e emerson.en.
Vou tentar encontrar esta falha, muito estanha por sinal, parece que ele lê o OnShow e o OnCreate as vezes pois funciona quando quer.
valeu a todos.
Rodrigo.
Vou tentar encontrar esta falha, muito estanha por sinal, parece que ele lê o OnShow e o OnCreate as vezes pois funciona quando quer.
valeu a todos.
Rodrigo.
GOSTEI 0
Rjun
25/08/2005
Faça assim...posicione o cursor na primeira linha do seu código onde vc começa a fazer a verificação dos campos...pressione F4...seu código será executado e quando chegar nessa linha ele ira para...depois pressione F7 para ir executando linha a linha...veja se assim vc consegue achar o erro.
GOSTEI 0
Rodrigorpb
25/08/2005
Rjun obrigado.
GOSTEI 0