Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: pedraosone en 20 Julio 2009, 18:24 pm



Título: por que me funciona solo una parte del codigo? (solucionado)
Publicado por: pedraosone en 20 Julio 2009, 18:24 pm
hola nuevamente amigos.
veran hace pocas horas puse un post donde consegui solucionar una duda con la ruta de acseso, pues bien:
ahora resulta que la aplicacion que ando creando (la cual solo cambia el fondo del escritorio por la de una imagen que tenga en el cd ) me cambia solo 2 de las 4 imagenes que le tengo puestas y resulta que las 4 tienen las mismas medidas y son .bmp
el codigo que uso es el siguiente:
Código
  1. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
  2.    (ByVal uAction As Long, ByVal uParam As Long, _
  3.    ByVal lpvParam As String, ByVal fuWinIni As Long) As Long
  4. Const SPIF_UPDATEINIFILE = &H1
  5. Const SPI_SETDESKWALLPAPER = 20
  6. Const SPIF_SENDWININICHANGE = &H2
  7. Private Sub Picture1_Click()
  8. Dim FileName As String
  9.    Dim X As Long
  10.  
  11.    'Usa aquí el bitmap que quieres usar
  12.    FileName = App.Path & "\fondo(1).bmp"
  13.  
  14.    X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, _
  15.       SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
  16.  
  17. End Sub
  18. Private Sub Picture2_Click()
  19. Dim FileName As String
  20.    Dim X As Long
  21.  
  22.    'Usa aquí el bitmap que quieres usar
  23.    FileName = App.Path + "\fondo(2).bmp"
  24.  
  25.    X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, _
  26.       SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
  27.  
  28. End Sub
  29. Private Sub Picture3_Click()
  30. Dim FileName As String
  31.    Dim X As Long
  32.  
  33.    'Usa aquí el bitmap que quieres usar
  34.    FileName = App.Path + "\fondo(3).bmp"
  35.  
  36.    X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, _
  37.       SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
  38.  
  39. End Sub
  40. Private Sub Picture4_Click()
  41. Dim FileName As String
  42.    Dim X As Long
  43.  
  44.    'Usa aquí el bitmap que quieres usar
  45.    FileName = App.Path + "\fondo(4).bmp"
  46.  
  47.    X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, _
  48.       SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
  49.  
  50. End Sub
  51.  
  52. son 4 picture box y en cada uno tengo una imagen diferente para cuando quiero cambiar una por otra solo bastaria con hacer click en uno de los picture box y se cambia automaticamente pero solo me funciona con dos de esos picture box
  53. espero haberme explicado con claridad amigos
  54. espero sus consejos.

Finalmente lo he solucionado

Encontre buscando en la web un codigo que modificando un poco la interface de mi  software me ha funcionado perfectamente amigos.

solo elimine los picture box y añadi al proyecto un filelistbox, dos checkbox y algun que otro componente, finalmente modifique un poco mi codigo y voila, el programa me funciona a la perfeccion.

Aqui os pongo el codigo por si alguien mas quiere aprovecharlo, y si quieren el programa para testearlo solo envienme un email a:
pedraosone@yahoo.es y se lo remito encantado.

Código
  1.  
  2. Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
  3. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
  4. Dim ruta As String
  5. Const SPIF_UPDATEINIFILE = 1
  6. Const SPI_SETDESKWALLPAPER = 20
  7. Const SPI_SETDESKPATTERN = 21
  8. Const SPIF_SENDWININICHANGE = &H2
  9.  
  10. Private Sub Check1_Click()
  11. If Check1.Value = Checked Then
  12.    Image1.Stretch = True
  13. Else
  14.    Image1.Stretch = False
  15. End If
  16. End Sub
  17.  
  18. Private Sub Check2_Click()
  19. Image1.Visible = Check2.Value
  20. End Sub
  21.  
  22. Private Sub Command1_Click()
  23. Dim ruta As String
  24. If Right(File1.Path, 1) <> "" Then
  25.  ruta = File1.Path & "\" & File1.FileName
  26. Else
  27.  ruta = File1.Path & "\" & File1.FileName
  28. End If
  29. x = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, _
  30.    ruta, SPIF_UPDATEINIFILE Or _
  31.    SPIF_SENDWININICHANGE)
  32. End Sub
  33.  
  34. Private Sub Command2_Click()
  35. Dim x As Long
  36.    'Para sacar el papel Tapiz se le envía una cadena vacía en lpvParam
  37.    x = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
  38.    'MsgBox "El fondo de pantalla ha sido quitado", 64
  39.  
  40. End Sub
  41.  
  42. Private Sub File1_Click()
  43. On Error Resume Next
  44. Dim ruta As String
  45. If Right(File1.Path, 1) <> "" Then
  46.  ruta = File1.Path &  File1.FileName
  47. Else
  48.  ruta = File1.Path & "\" & File1.FileName
  49. End If
  50. Image1.Picture = LoadPicture(ruta)
  51. Label1.Visible = True
  52. Label1.Caption = "Imagen: " + ruta
  53. End Sub
  54.  
  55. Private Sub File1_DBLCLICK()
  56. On Error Resume Next
  57. Dim ruta As String
  58. If Right(File1.Path, 1) <> "" Then
  59.  ruta = File1.Path & File1.FileName
  60. Else
  61.  ruta = File1.Path & "\" & File1.FileName
  62. End If
  63. x = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, _
  64.    ruta, SPIF_UPDATEINIFILE Or _
  65.    SPIF_SENDWININICHANGE)
  66. Image1.Picture = LoadPicture(ruta)
  67. Label1.Visible = True
  68. Label1.Caption = "Imagen: " + ruta
  69. End Sub
  70.  
  71. Private Sub File1_KeyPress(KeyAscii As Integer)
  72. If KeyAscii = 13 Then
  73. On Error Resume Next
  74. Dim ruta As String
  75. If Right(File1.Path, 1) = "\" Then
  76.  ruta = File1.Path & File1.FileName
  77. Else
  78.  ruta = File1.Path & "\" & File1.FileName
  79. End If
  80. x = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, _
  81.    ruta, SPIF_UPDATEINIFILE Or _
  82.    SPIF_SENDWININICHANGE)
  83. Image1.Picture = LoadPicture(ruta)
  84. Label1.Visible = True
  85. Label1.Caption = "Imagen: " + ruta
  86. End If
  87. End Sub
  88.  
  89. Private Sub Form_KeyPress(KeyAscii As Integer)
  90. If KeyAscii = 27 Then
  91. End
  92. End If
  93. End Sub
  94.  
  95. Private Sub Form_Resize()
  96. On Error Resume Next
  97. Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'Centra el formulario completamente
  98. End Sub
  99.  
  100.  

Espero que os sea tan util como me lo ha sido a mi, gracias.