PROBLEMA SOBREPOSICAO OBJETOS

LUIS.HERRERA 18/07/2005 23:40:43
#94828
Alguém sabe porque ao abrir um form (Não MDI Child) como MODAL sobre um outro form, (porém este sendo MDI child) e com um componente MSFlexGrid, ao se fechar o form Modal (unload me) o FlexGrid some ou tem parte dele ocultado, como se o form Modal o tivesse apagado?

Se for um bug e não tiver como evitar isso, será que existe alguma opção para a situação abaixo:

No form MDI ao chamar esse form Modal, eu preciso esperar que o Modal seja fechado para só depois continuar executando o código de onde ocorreu a chamada, isso porque preciso das informações passadas pelo Modal para continuar. Porém não encontrei alternativa para isso se não com um form Modal.

Nota: Tentei usar DoEvents, mas não funcionou.

DoEvents
frmModal.Show
DoEvents

....mais código, porém ele não para até o frmModal ser fechado e continua rodando o código.
JEAN.JEDSON 19/07/2005 07:41:09
#94836
tente dar um refresh no flexgrid... e retire os DoEvents...
LUIS.HERRERA 19/07/2005 08:08:07
#94843
Bom dia Jean.

Estou ficando louco com isso.

Já tentei:
Refresh no form e no FlexGrid
form.Hide e form.Show
form.Enabled = false e true
grid.Visible = false e true
grid.Setfocus

O estranho é que isso está ocorrendo em 2 forms com estrutura diferente e situações diferentes também.

No primeiro, abro o 2º form MODAL (não MDI) e só ocorre o problema se clicar no botão Fechar (unload me), então o Grid é parcialmente apagado. Agora se clicar no botão consultar desse form, ele é fechado o código do primeiro continua normalmente e é carregado um recordsete e atualizado o grid.

No segundo problema, outro form que usa também esse mesmo form MODAL (só para pegar informações do usuário), tenho no form que chama várias tabs (SSTab) quando chamo estou em uma aba com 2 FlexGrid que acontecia a mesma coisa, então fiz assim:

Ao fechar o form modal a primeira instrução a seguir no form chamador era posicionar na tab seguinte e voltar em seguida para tab atual. Isso resolver o problema nos grids, agora quando clico no grid para selecionar uma linha, automaticamente os dados são passados para a próxima Aba e o foco também, só que mais de 50% dos controles dessa segunda aba também estão sendo apagados.

Não entendo o porquê?

Nota: Tenho 512 Megas de Ram, Pentium 4, Placa de vídeo GForce 4 (64Megas) e isso não pode acontecer por causa do Hardware.

A única saída que encontrei é deixar o segundo form como MDIChild e não modal, mas isso causa problema na lógica do meu programa, pois o código que chama esse 2º form não para até ele ser fechado, mesmo usando o DoEvents além desse form ir para trás do primeiro se este for clicado pelo usuário, aparentando que fechou mas só ficou por trás.

Alguma ajuda amigo?
LUIS.HERRERA 19/07/2005 08:19:42
#94851
Mais ninguém?

Help....
JEAN.JEDSON 19/07/2005 08:25:28
#94854
bem... já escondeu o flex ao mandar mostrar o outro form, fazendo-o aparecer novamente? se não resolver assim... infelizmente... acho que pode ser necessário uma reinstalação do windows e do vb - com todas as atualizações necessárias para ambos. ou então, faça assim: envie para alguém de confiança seu exe e o banco... e peça para testar para ver se ocorre isso. se ocorrer, aí complica... se não ocorrer: formate e reinstale...
LUIS.HERRERA 19/07/2005 09:33:40
#94897
Jean sim, até o form tentei ocultar hide e voltar Show, mas continua.

Uso o XP e fiz o teste também no Win98 e o problema ocorre também, então não é caso de formatação.

Ou existe algum bug no FlexGrid ou no MODAL do VB ou então a atualização do Grid deve ser feita da alguma outra forma que não pelo Refresh.

Nota: Se eu clicar em uma das linhas, boa parte do componente é reexibido, só ficando a borda dele e as vezes a barra de rolagem oculta até que clique nela ou passe o mouse sobre essas área.
JEAN.JEDSON 19/07/2005 09:37:27
#94901
poderia me mandar o exe e o banco para que eu teste aqui e ver o erro?
LUIS.HERRERA 19/07/2005 15:31:09
#95039
Jean não será possível, pois o projeto tem aproximadamente 10 megas zipado.
Agradeço, mas acabei de conseguir resolver o problema, não como eu queria, mas ficou legal. Tive de usar uma OCX para deixar meu form sempre visível, assim substituindo o MODAL e colocando o form como MDIChild.

Usei uma dica de outro colega para fazer um loop enquanto esse form estive aberto, assim aguardo o fechamento para continuar executando o código. Incluí ainda form.enabled=false na abertura e true ao fechar, assim evito que se clique no form que está em baixo.

Nota: Essa ocx está qui no site mesmo, foi postada se não me engano pelo WCosta. Eu tentei usar um código postado aqui também, no lugar dessa OCX, mas ele não funciona no meu XP. Esse código encontrei pesquisando aqui por "sempre visível"

Obrigado novamente.
Tópico encerrado , respostas não são mais permitidas