Fórum onShow maluco... Estranho! #293092

25/08/2005

0

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:

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

Rodrigorpb

Responder

Posts

25/08/2005

Rodrigorpb

pessoal esquici de dizer, uso IBX e F.B 1.5.

Rodrigo.


Responder

Gostei + 0

25/08/2005

Massuda

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?

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;
Imagino que a query DM.qPastoral seja fechada em algum outro ponto do código e não apenas quando algo dá errado.


Responder

Gostei + 0

25/08/2005

Rodrigorpb

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


Responder

Gostei + 0

25/08/2005

Massuda

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)?


Responder

Gostei + 0

26/08/2005

Rodrigorpb

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.


Responder

Gostei + 0

26/08/2005

Emerson Nascimento

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;



Responder

Gostei + 0

26/08/2005

Massuda

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


Responder

Gostei + 0

26/08/2005

Rodrigorpb

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.


Responder

Gostei + 0

26/08/2005

Massuda

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]


Responder

Gostei + 0

26/08/2005

Rodrigorpb

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

   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;




Obrigado.


Responder

Gostei + 0

26/08/2005

Massuda

Colega,

Explique claramente qual é o problema.


Responder

Gostei + 0

26/08/2005

Rodrigorpb

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


Responder

Gostei + 0

26/08/2005

Rjun

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; 



Responder

Gostei + 0

26/08/2005

Rjun

Você quer que ele fique desmarcado ou marcado com cor cinza?


Responder

Gostei + 0

26/08/2005

Rodrigorpb

Gostaria tb que alguém me ajudasse a deixar este código certo.

Obrigado.
Rodrigo.


Responder

Gostei + 0

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

Aceitar