QUAL OU QUAIS FORM S ESTAO ATIVOS

MARCELO.VB.PIRA 28/03/2005 22:17:43
#75478
Eu de novo, desta vez com uma dúvida bem cruelzinha, visse???

Como saber qual(ou quais) form(s) do projeto estão ativos e sendo mostrados (nos quais foram aplicados o metodo SHOW )

Tipo:

01. No meu projeto, atualmente tenho 185 forms;

02. Dificilmente tenho mais de 03 (tres) forms abertos;

03. Mas existe um form que é carregado no inicio da execução e fica o tempo todo ativo, mas sem aparecer (apenas o load , sem o show). neste form existe um objeto "TIMER" que a cada 10 segundos checa se existem mensagens trocadas entre os usuarios e avisa (MsgBox) que chegou uma nova mensagem. Mas ele apenas avisa que existem novas mensagens e algums usuario tapados se esquecem e não vão na caixa de entrada ver as mensagens;

04. Preciso saber qual o form que esta ativo no momento, para fazer aparecer um label avisando que ainda existem mensagens que não lidas ainda.

05. Resumindo: preciso saber quais os forms ativos (SHOW) para fazer algo assim:

if AmpliarFoto.visible = True then AmpliarFoto!LbAvisoDeChamada.visible = true
if MenuPrincipal.visible = True then MenuPrincipal!LbAvisoDeChamada.visible = true
if Usuarios.visible = True then Usuarios!LbAvisoDeChamada.visible = true
if Fornecedores.visible = True then Fornecedores!LbAvisoDeChamada.visible = true
if Utilitarios.visible = True then Utilitarios!LbAvisoDeChamada.visible = true
etc...etc...etc...

para fazer desta maneira acima, até que funciona, mas eu teria fazer a checagem dos 185 forms a cada 10 segundos, isso sem contar que a cada form novo que eu implementar no projeto, vou ter que alterar esta rotina tambem.

não teria como pegar todos os forms abertos, colocar seus nomes em umas variaveis indexadas e depois alterar o label apenas nas necessarias???

algo como:

for forms=1 to FormsAbertos
FormAberto(forms)=NomeDoFormularioAberto
FormAberto(forms)!LbAvisoDeChamada.visible = true
next forms

ou algo parecido... sei lá...

Obrigado...
USUARIO.EXCLUIDOS 29/03/2005 08:36:30
#75501
crie a seguinte funcao em um módulo

Public Function IsFormOpen(byval FormName as string) as boolean
dim frm as form

for each frm in forms
if ucase$(formName) = frm.name then
IsFormOpen = true
Exit For
endif
set frm = nothing
end Function

para chamar basta usar

if IsFormName("FrmCadastro") then
'esta aberto
else
'nao esta aberto
endif

Sacou..?
MARCELO.VB.PIRA 29/03/2005 20:26:51
#75666
saquei, mas...

eu terei que usar

Citação:

if IsFormName("FrmCadastro") then
'esta aberto
else
'nao esta aberto
end if



185 vezes, não é??? mudando o "FrmCadastro" para TODOS os forms que tenho no projeto e quero saber se estão ativos, correto???

:((((

ok...

num tem jeito de obter uma lista dos formÂÂÂ's abertos no momento??? sem ter que checar um a um para ver se esta aberto ou não???

USUARIO.EXCLUIDOS 29/03/2005 20:38:04
#75668
Resposta escolhida

Dim Nome_Form As Form
For Each a In Forms
MsgBox Nome_Form.Name
Next



assim ele mostra todos os forms abertos
MARCELO.VB.PIRA 30/03/2005 11:56:43
#75737
170 For Each a In Forms
180 MsgBox Nome_Form.Name
190 Next

tentei da forma que vc indicou mas deu o seguinte erro...

OBJECT VARIABLE OR WITH BLOCK VARIABLE NOT SET NA LINHA 180

gostaria que funcionasse para eu poder fazer algo assim:
(DataHora é um botão presente em TODOS os formulario do projeto, e esta ideia ficara dentro de um timer que a cada 3 segundos, quando perceber que tem mensagem nova, ele manda um msgbox aviasndo que tem uma nova mensagem, e esta ideia é para que este botão fique piscando e mudando de cor e de caption tambem.)

170 For Each a In Forms

180 If Nome_Form.DataHora.Caption = "Data, Hora e outras opções" Then Nome_Form.DataHora.Caption = "Mensagens Novas": Nome_Form.DataHora.BackColor = &HFF& Else Nome_Form.DataHora.Caption = "Data, Hora e outras opções": Nome_Form.DataHora.BackColor = &H8000000F

190 Next


Obrigado...
USUARIO.EXCLUIDOS 30/03/2005 12:29:35
#75752
Dim Nome_Form As Form
For Each Nome_Form In Forms
MsgBox Nome_Form.Name
Next


eu esqueci de altarar a variavel a ali onde ela tava é o altere para NOme_Form
MARCELO.VB.PIRA 30/03/2005 16:55:59
#75843
SHOW DE BOLA!!!!!!!

VALEU AMIGÃO!!!
Tópico encerrado , respostas não são mais permitidas