Jump to content
Fórum Script Brasil
  • 0

Ativar procedimento de um form ao fechar outro


Kerouac

Question

Bom dia, galera!

Vejam só minha dúvida:

Tenho um formulário com um botão. Ao clicar neste botão, chamo outro formulário, onde o usuário irá selecionar um valor e fechar este outro formulário. Ao fechar este outro formulário, como faço pra continuar um procedimento do primeiro formulário, utilizando o valor escolhido no formulário que foi fechado?

Por exemplo:

Private Sub Teste()
   comando1
   comando2
   Show Formulario
   'neste formulario que é aberto acima o usuario escolhe um valor e fecha o formulário
   
   daqui em diante quero continuar a função Teste() utilizando o valor escolhido no formulário acima
End Sub

Agradeço a quem puder me dar essa força!

Valeu!

Edited by Kerouac
Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0
Boa tarde!!

Verifique a função UNLOAD do form... ve se ela te ajuda, ela executa a função programada quando o formulario é descarregado...

Abraços

Bom na verdade eu gostaria que o Form fosse aberto e fechado dentro do bloco, com o procedimento continuando dentro do mesmo bloco, utilizando o retorno do Form. De qualquer forma, posso dar um jeito de funcionar dessa forma.

Bom, vou aproveitar e perguntar sobre uma dúvida que segue a mesma linha:

Tenho um estrutura Form que, dependendo da quantidade de dados que ele trata, pode demorar um pouco. Por isso pretendo colocar uma Progress Bar, que está em outro Form. Eu tentei fazer da seguinte forma:

Form_da_ProgressBar.Show

For i = 0 To Final
   Form_da_ProgressBar.Componente_ProgressBar.Value = Abs((i / Final) * 100)
Next i

O problema desse código é que, depois que chama o outro formulário (o que tem a ProgressBar), a execução do código só continua quando o formulário é fechado.

Já que não tem como abrir um formulário e continuar o código original sem que ele seja fechado, como posso fazer isso?

Link to comment
Share on other sites

  • 0

bom vamos la...

Primeiro vou tentar explicar sobre chamar o outro form e ao fechar continuar para o seu..

Você vai ter que criar no form que será chamado uma funcao e nela tera o show.

lembre-se de criar uma variavel onde todo o form possa enchergar ele, e nesta variavel ficara o retorno para o primeiro form.

Exemplo:

'variavel que guardará o retorno do que precisa

dim aux as string

Public function Exibe_dados() as string

me.show modal

Exibe_dados = aux

end function

e no primeiro form você coloca assim:

Private Sub Teste()

dim objTeste as new frmTeste

dim Retorno as string

comando1

comando2

Retorno = objTeste.Exibe_dados

'assim você chama o outro form e quando fechalo, você vai voltar para este ponto já com o seu retorno...

End Sub

Em relação ao Progress Bar, uma vez que você chama um outro form, tudo que esta fazendo no primeiro form fica pausado, dai so vai continuar depois que você fechar o segundo formulario...

sendo assim, mesmo se você quiser mesmo fazer isso, vai ter que toda hora ficar passando informacoes de um form para o outro, assim sua aplicacao ficara lenta... posso até estar falando besteira, mas provavelmente vai ser isso que vai acontecer.

Link to comment
Share on other sites

  • 0

Você já pensou em dividir os procedimentos da Sub Teste ?

outro detalhe é que para poder chamar a Sub Teste de outro Form ela tem de estar "Public" ou simplesmente sem o "Private"...

Minha ideia seria colocar parte do script Teste, chamar o outro Form, e depois complementar o procedimento chamando outra Sub (tipo Teste2()) juntando as informações da sub Teste + as infos coletadas do outro Form + Teste2...

Se sabermos realmente o que você quer fazer, fica mais fácil de darmos idéias mais concretas e simples :rolleyes:

Qualquer coisa posta o código completo ou até o projeto...

Link to comment
Share on other sites

  • 0
bom vamos la...

Primeiro vou tentar explicar sobre chamar o outro form e ao fechar continuar para o seu..

Você vai ter que criar no form que será chamado uma funcao e nela tera o show.

lembre-se de criar uma variavel onde todo o form possa enchergar ele, e nesta variavel ficara o retorno para o primeiro form.

Exemplo:

'variavel que guardará o retorno do que precisa

dim aux as string

Public function Exibe_dados() as string

me.show modal

Exibe_dados = aux

end function

e no primeiro form você coloca assim:

Private Sub Teste()

dim objTeste as new frmTeste

dim Retorno as string

comando1

comando2

Retorno = objTeste.Exibe_dados

'assim você chama o outro form e quando fechalo, você vai voltar para este ponto já com o seu retorno...

End Sub

Em relação ao Progress Bar, uma vez que você chama um outro form, tudo que esta fazendo no primeiro form fica pausado, dai so vai continuar depois que você fechar o segundo formulario...

sendo assim, mesmo se você quiser mesmo fazer isso, vai ter que toda hora ficar passando informacoes de um form para o outro, assim sua aplicacao ficara lenta... posso até estar falando besteira, mas provavelmente vai ser isso que vai acontecer.

Entendi. Assim que eu puder implementar o farei. Em seguida posto aqui se deu certo.

Quanto à questão da ProgressBar, será que não há alguma forma de mostrar uma barra de progresso durante a execução de um processo (no caso um laço 'For')?

Link to comment
Share on other sites

  • 0

cara,

vou mostrar como eu uso aqui no meu programa, dai você vai ter uma idéia de como fazer...

Eu uso o SSPanel como barra de processo:

aqui vai as configurações do SSPanel para te ajudar...

Name = Percentual

BackColor = &H00C0C0C0&

BevelOuter = 1 - Insert

Caption = ""

FloodColor = &H00800000&

FloodType = 1 - Left to Right

Visible = false

font = Tahoma

ele inicia como oculto

Dim cont as long

dim Rs as new adodb.recordset

If (Rs.RecordCount > 0) Then

Percentual.Visible = True

Percentual.FloodPercent = 0

While Not Rs.EOF

Cont = Cont + 1

'Preenche o campo com o recordset.

Percentual.FloodPercent = (cont / Rs.RecordCount) * 100

Rs.MoveNext

wend

Percentual.Visible = False

Percentual.FloodPercent = 0

Percentual.Refresh

end if

Link to comment
Share on other sites

  • 0
cara,

vou mostrar como eu uso aqui no meu programa, dai você vai ter uma idéia de como fazer...

Eu uso o SSPanel como barra de processo:

aqui vai as configurações do SSPanel para te ajudar...

Name = Percentual

BackColor = &H00C0C0C0&

BevelOuter = 1 - Insert

Caption = ""

FloodColor = &H00800000&

FloodType = 1 - Left to Right

Visible = false

font = Tahoma

ele inicia como oculto

Dim cont as long

dim Rs as new adodb.recordset

If (Rs.RecordCount > 0) Then

Percentual.Visible = True

Percentual.FloodPercent = 0

While Not Rs.EOF

Cont = Cont + 1

'Preenche o campo com o recordset.

Percentual.FloodPercent = (cont / Rs.RecordCount) * 100

Rs.MoveNext

wend

Percentual.Visible = False

Percentual.FloodPercent = 0

Percentual.Refresh

end if

Entendi. Mas você apenas oculta um componente no mesmo Form para mostrá-lo depois, correto?

A minha intenção é mostrar a barra de progresso em outro Form e fechá-lo quando 100%.

De qualquer forma, se eu não conseguir fazer com outro Form, a saída será achar uma forma de fazer desse jeito aí mesmo.

Obrigado!

Link to comment
Share on other sites

  • 0

cara, me tira uma dúvida, o que você está querendo é usar duas telas simultaneamente? tipo, você está em uma tela e esta rodando a barra de progresso dai você vai abrir uma outra tela sem que a primeira pare de rodar?

é isso?

Edited by Ferretto
Link to comment
Share on other sites

  • 0
cara, me tira uma dúvida, o que você está querendo é usar duas telas simultaneamente? tipo, você está em uma tela e esta rodando a barra de progresso dai você vai abrir uma outra tela sem que a primeira pare de rodar?

é isso?

Não. Criei um Form única e exclusivamente para a barra de progresso. A única coisa que existe neste Form é a barra de progresso.

96xqxf.jpg

No formulário principal há um processo que é meio demorado, então eu quero que apareça a barra de progresso (no outro Form) enquanto o processo do Form principal é executado. Quando terminar o processo, o Form da barra de progresso é fechado.

O problema está sendo que o procedimento que alimenta a barra de progresso está em outro Form.

14li5l.jpg

*OBS: Quanto à primeira dúvida, sobre continuar um procedimento utilizando o retorno de outro Form, funcionou perfeitamente da forma como tu sugeriu. Obrigado!

Edited by Kerouac
Link to comment
Share on other sites

  • 0

Nossa cara, assim ficou bem mais fácil explicar.. fiz um teste aqui e olha o que deu...

primeiro eu criei um form so com a barra de progresso, igual a você, so configurei o form para aparecer no centro da tela, nada mais. dai na hora de carregar a barra de progresso eu fiz assim:

while not Rs2.EOF

frmProcessoBar.Show ' e o nome do form que tem a barra de progresso

frmProcessoBar.Percentual.FloodPercent = (cont / Rs2.RecordCount) * 100

Loop

Unload frmProcessoBar

funcionou perfeito, lembrando que o form com a barra de progresso NÃO pode ser modal.

faz o teste ai e me fala se deu certo e se era isso que precisava.

Edited by Ferretto
Link to comment
Share on other sites

  • 0

Eu tinha feito quase isso anteriormente. A diferença é que eu coloquei o "show" fora do laço.

Bom, eu fiz conforme sua sugestão, porém, quando marco a opção 'ShowModal' como 'False', a mensagem de erro abaixo é exibida:

1fx1fc.jpg

Quando eu mantenho 'ShowModal' como 'True', funciona parcialmente, pois tem que ir fechando o Form várias vezes, até a barra encher, já que trava o processo por causa do Form modal.

[EDIT]: Deixei os dois Forms como não modais, e aí funcionou. Mas o Form principal eu pretendo que seja modal... :(

Edited by Kerouac
Link to comment
Share on other sites

  • 0
Eu tinha feito quase isso anteriormente. A diferença é que eu coloquei o "show" fora do laço.

Bom, eu fiz conforme sua sugestão, porém, quando marco a opção 'ShowModal' como 'False', a mensagem de erro abaixo é exibida:

1fx1fc.jpg

Quando eu mantenho 'ShowModal' como 'True', funciona parcialmente, pois tem que ir fechando o Form várias vezes, até a barra encher, já que trava o processo por causa do Form modal.

Não cara, você entendeu errado, no form que tem a barra de progresso você vai definir o MDIChild como true. so isso, dai você faz como eu escrevi anteriormente.

entendeu?

Link to comment
Share on other sites

  • 0
Não cara, você entendeu errado, no form que tem a barra de progresso você vai definir o MDIChild como true. so isso, dai você faz como eu escrevi anteriormente.

entendeu?

Putz, como eu faço isso? Estou fazendo o projeto no VBA do Excel 2010 e o Form não tem essa propriedade...

Link to comment
Share on other sites

  • 0

nossa ai pegou pesado, so mechi uma vez no VBA do Excel, e isso já faz anos... não sei como funciona o modal e o não modal desse VBA... foi mal cara, não sei se posso ajudar mais do que isso, vou dar uma olhada, se eu achar alguma coisa eu posto aq. beleza

so uma dúvida, não tem como colocar NomeDoForm.MDIChild = true, não sei se no seu caso vai ajudar...

Link to comment
Share on other sites

  • 0
nossa ai pegou pesado, so mechi uma vez no VBA do Excel, e isso já faz anos... não sei como funciona o modal e o não modal desse VBA... foi mal cara, não sei se posso ajudar mais do que isso, vou dar uma olhada, se eu achar alguma coisa eu posto aq. beleza

so uma dúvida, não tem como colocar NomeDoForm.MDIChild = true, não sei se no seu caso vai ajudar...

Vou tentar. Quanto ao modal ou não modal, a propriedade que existe no Form é a "ShowModal", onde consigo definir como 'True' ou 'False'. Porém, acontecem os erros que mencionei anteriormente.

Além disso, também é possível definir se o Form chamado é modal ou não já no método "Show". Da seguinte forma:

[object.]Show modal

Onde modal pode ser 1 (modal) ou 0 (não modal). Já tentei dessa forma também, porém, o resultado é o mesmo da situação acima.

De qualquer forma, tu já ajudou imensamente e agradeço muito sua atenção. Muito obrigado mesmo!

Edited by Kerouac
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...