Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: fraktal en 13 Octubre 2006, 09:47 am



Título: ayundeme con este simple codigo
Publicado por: fraktal en 13 Octubre 2006, 09:47 am
Hola, es es un codigo que trata de hacer lo siguiente:
Cada tres segundos cambia la imagen de fondo del formulario aleatoriamente entre 6 imagenes. Si pasas el raton por encima del formulario, el formulario se mueve por la pantalla para que no puedas cogerlo. Si le pulsas a la X para cerrarlo, abre un nuevo formulario igual. Y todo va bien hasta aqui. Cuando pulso la X si abre un nuevo formulario, pero yo quiero que el nuevo formulario siga con las propiedades del inicial, y en el primero se ven las fotos cambiando, y al pinchar en la X y en las sucesivas vece que se pinchen se abren nuevos formularios, pero en estos formularios no se cargan las fotos. Osea solo el primero funciona bien y aunque luego se abre el formuliario en este no aparecen fotos ni nada.
Este es el codigo, gracias:
Código:
Dim ancho As Integer
Dim alto As Integer
Dim altornd As Integer
Dim anchornd As Integer
Dim ventana() As Form
Dim j As Byte
Private Sub Form_Load()
cambia
alto = Screen.Height
ancho = Screen.Width
altornd = calculo(alto)
anchornd = calculo(ancho)
If altornd > alto - Form1.Height Then
altornd = alto - Form1.Height
End If
If anchornd > ancho - Form1.Width Then
anchornd = ancho - Form1.Width
ElseIf anchornd < Form1.Width Then
anchornd = 0
End If
Form1.Top = altornd
Form1.Left = anchornd
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
alto = Screen.Height
ancho = Screen.Width
altornd = calculo(alto)
anchornd = calculo(ancho)
If altornd > alto - Form1.Height Then
altornd = alto - Form1.Height
End If
If anchornd > ancho - Form1.Width Then
anchornd = ancho - Form1.Width
ElseIf anchornd < Form1.Width Then
anchornd = 0
End If
Form1.Top = altornd
Form1.Left = anchornd
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then 'Significa que se ha cerrado con la X:
    i = i + 1
ReDim Preserve ventana(1 To i)
Set ventana(i) = New Form1
ventana(i).Show
    Cancel = 1
End If
End Sub
Public Function calculo(valor)
calculo = Int(Rnd * valor)
End Function
Private Sub cambia()
j = Rnd * 6
Select Case j
Case 1
Form1.Picture = Image1.Picture
Case 2
Form1.Picture = Image2.Picture
Case 3
Form1.Picture = Image3.Picture
Case 4
Form1.Picture = Image4.Picture
Case 5
Form1.Picture = Image5.Picture
Case 6
Form1.Picture = Image6.Picture
End Select
End Sub
Private Sub Timer1_Timer()
cambia
End Sub




Título: Re: ayundeme con este simple codigo
Publicado por: songecko en 13 Octubre 2006, 13:42 pm
Tenes que colocar esto. Creo q este codigo funciona solo cuando abris el .exe, no cuando compilas en el VB:

Código:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then 'Significa que se ha cerrado con la X:
Shell App.Path & "\" & App.EXEName & ".exe" 'se ejecuta a si mismo
End If
End Sub

espero que te sirva. Chau

GeCkO


Título: Re: ayundeme con este simple codigo
Publicado por: CeLaYa en 13 Octubre 2006, 14:20 pm
la otra forma de hacerlo seria iniciando tu proyecto desde un Sub Main

agrega un modulo y pones:

Public Sub Main()

    Dim x As Form
   
    Set x = New Form1
   
    x.Show

End Sub

y en el form1:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode = 0 Then Main
End Sub


Título: Re: ayundeme con este simple codigo
Publicado por: fraktal en 13 Octubre 2006, 16:35 pm
hola, gracias a ambos, he probado los dos mentodos, muchas gracias. Al final me he dado cuenta que en la parte que cargo las fotos, con form1.picture = a lo que sea, al ser todas las instancias del mismo nombre, ahi era donde daba parte del problema, de manera que lo hice: me.picture asi se referia al propio formulario en cuestion olvidando el nombre.
Muchas gracias y saludoS!