• Sábado 4 de Mayo de 2024, 21:35

Autor Tema:  Previnstance  (Leído 5195 veces)

Especimen

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Previnstance
« en: Viernes 23 de Julio de 2004, 01:32 »
0
Hola

En el form de inicio de mi aplicación tengo el siguiente código:

Private Sub Form_Load()
If App.PrevInstance = True Then
....MsgBox "El programa ya se está ejecutando.", "El programa"
....End
End If

Dim x As Integer
ReDim Cambio(7)
On Error GoTo ErrorLoad

....
....
....
exit sub

Cuando ejecuto el programa por 2ª vez, sin cerrar la primera instancia no funciona el código y se me abren dos ejemplares de la aplicación.

Alguna sugerencia??

Gracias

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Previnstance
« Respuesta #1 en: Viernes 23 de Julio de 2004, 02:04 »
0
Hola especimen.
No sé si es lo correcto pero prueba colocando dentro de tu bloque if-end if y después del msgbox un Unload Me. Eso te descargaría la nueva instancia del formulario luego del mensaje.
Suerte.

Especimen

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Previnstance
« Respuesta #2 en: Viernes 23 de Julio de 2004, 02:10 »
0
Gracias DiabloRojo, tampoco funciona asi.

La verdad es que realmente no se me llega a abrir la 2º instancia porque da un error.

Saludos

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Previnstance
« Respuesta #3 en: Viernes 23 de Julio de 2004, 02:45 »
0
Hola.
A mi me funciona así como te indiqué. Prueba esto: en el menú seleciona Proyecto|Propiedades de proyecto|Generar y selecciona la opción Incremento automático en el Número de versión y vuelve a generar tu proyecto. Tal vez tenga algo que ver con esto.
Estuve revisando por ahí y encontré esto (a mí me parece un poco complicado pero ahí te va):

http://www.elguille.info/vb/VB_TIP3.HTM#vb3_09

Bueno espero que te sirva.
Mucha suerte.

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Previnstance
« Respuesta #4 en: Viernes 23 de Julio de 2004, 02:47 »
0
Private Sub Form_Load()
If App.PrevInstance = True Then
    MsgBox "Solo puede ejecutar una instancia"
    End
Else
  Dim x As Integer
  ReDim Cambio(7)
  On Error GoTo ErrorLoad
  ...
  ....
  ....
End If

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Previnstance
« Respuesta #5 en: Viernes 23 de Julio de 2004, 02:48 »
0

Especimen

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Previnstance
« Respuesta #6 en: Viernes 23 de Julio de 2004, 03:17 »
0
Gracias por las respuestas.

Ya habia probado lo que decia Jose Arraigada y no funciona.

Y sobre lo que dice en la web de "el guille" (DiabloRojo) si no cambio el caption del form no deberia tener problemas y no lo cambio en ningun momento.

Por ahora lo he solucionado iniciando con un Sub Main desde donde cargo el formulario de inicio y me funciona asi, pero me jode.

Sub Main()
If App.PrevInstance = True Then
    MsgBox "Ya hay una instacia abierta.", vbInformation
    End
End If
Principal.Show
End Sub


Si alguien encuentra alguna explicación que me la diga.

Saludos

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Previnstance
« Respuesta #7 en: Viernes 23 de Julio de 2004, 03:37 »
0
Yo uso este código

Código: Text
  1.  
  2. Private Sub Form_Activate()
  3.     Dim strText  As String
  4.     Dim strSaveTitle As String
  5.     If App.PrevInstance = True Then
  6.         strSaveTitle = App.Title
  7.         App.Title = "... programa duplicado."
  8.         frmMain.Caption = "... programa duplicado."
  9.         strText = "Actualmente está abierta -Título-."
  10.         strText = strText + vbCrLf + "Sólo es necesario abrir una a la vez."
  11.         MsgBox strText, vbExclamation, "Advertencia..."
  12.         AppActivate strSaveTitle
  13.         SendKeys "% R", True
  14.         End
  15.     End If
  16. End Sub
  17.  
  18.  
:whistling:

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Previnstance
« Respuesta #8 en: Sábado 24 de Julio de 2004, 00:22 »
0
********   O J O *************

Me extraña que mi codigo no te halla funcionado. A mi me funciona OK.

RECUERDA:

Prueba mi codigo.
Generar el ejecutable.
Y Prueba la ejecucion dos veces.
Y Funciona.

NO FUNCIONA SI USAS DOS VECES VB, y lo EJECUTAS DESDE AHI.

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Previnstance
« Respuesta #9 en: Sábado 24 de Julio de 2004, 03:04 »
0
Yo lo hago igual que Jose Arriagada, para mi screensaver y no tengo problemas.  :comp:

Saludos,

Blag  :devil:

Especimen

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Previnstance
« Respuesta #10 en: Sábado 24 de Julio de 2004, 03:19 »
0
Hola

Ya se que ese código debería funcionar, el que yo uso también debería lo he usado muchas veces, practicamente es igual, si lo probais funcionara.

Y el que he metido en el sub main desde donde arranco ahora es el mismo y asi no me da fallos. Así:

Sub Main ()
If App.PrevInstance = True Then
....MsgBox "El programa ya se está ejecutando.", "El programa"
....End
End If
End Sub

Sin embargo poniendolo al principio del form load y arrancando desde el form si me da un fallo "error 13, no coinciden los tipos".

He probado a meter un msgbox antes del código del PrevInstance y sale el msgbox pero después da el fallo.

sería así:

Private Sub Form_Load()
MsgBox "Hola"
.........................."DESPUES DE ESTO DA EL FALLO"
If App.PrevInstance = True Then
....MsgBox "El programa ya se está ejecutando.", "El programa"
....End
End If
....

End Sub

Saludos

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Previnstance
« Respuesta #11 en: Sábado 24 de Julio de 2004, 14:08 »
0
Qué tal Especimen?
Copie y pegue el código que colocas y efectivamente da el error que comentas. Me parece muy extraño y no se ve forma aparente de solucionar, pero mas extraño me parece que reemplacé tu código por el mío (copiado y pegado desde otra aplicación) y sí funciona; pero es el mismo código!. Copia y pega desde aquí para ver qué tal:

   If App.PrevInstance = True Then
      MsgBox "Esta aplicacion ya está en uso"
      Unload Me
   End If

Espero que funcione...
Mucha suerte

P.D: Si alguien sabe el origen y solución de este error por favor coméntelo.

Especimen

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Previnstance
« Respuesta #12 en: Lunes 26 de Julio de 2004, 17:27 »
0
Hola DiabloRojo.

Parece que ya he dao con el error

así se produce el error:
MsgBox "El programa ya se está ejecutando.", "El programa"

y asi no se produce
MsgBox "El programa ya se está ejecutando."

También he probado con esto y el erro se produce
MsgBox "El programa ya se está ejecutando.", Me.Captión

Saludos

Especimen

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Previnstance
« Respuesta #13 en: Lunes 26 de Julio de 2004, 17:32 »
0
Bueno es que a veces somos CIEGOS y BURROS, al menos yo

El título del programa no estaba en su lugar, la forma corecta es

MsgBox "El programa ya se está ejecutando.", VbOkOnly, "El programa"
o
MsgBox "El programa ya se está ejecutando.",  , "El programa"

Mas saludos

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Previnstance
« Respuesta #14 en: Lunes 26 de Julio de 2004, 19:26 »
0
Por supuesto!!!
Benditas comas...
Me alegra saber que era un detalle menor.
Mucha suerte.