hola de nuevo. jeje
como dice el titulo , se podría meter una música en la pestaña resources . y después agregar el control de windows media player y el directorio poner esa musica?
osea yo se poner músicas en los formularios. pero la canción tiene que ir en la adjunto con el exe . y eso no es lo que quiero .
lo que quiero es hacer un exe que ya contenga dentro la canción y la reproduzca.
yo pienso que se debería incrustar como los txt en la parte de resources pero no se como poner el mp3
gracias de antemano . ;-)
Cita de: **Aincrad** en 12 Octubre 2017, 16:09 PMse podría meter una música en la pestaña resources
Si, puedes añadir y embedir cualquier tipo de archivo a la tabla de recursos de tu executable.
- Linked and Embedded Resources | MSDN (https://msdn.microsoft.com/en-us/library/e2c9s1d7(v=vs.90).aspx)
Cita de: **Aincrad** en 12 Octubre 2017, 16:09 PMyo pienso que se debería incrustar como los txt en la parte de resources pero no se como poner el mp3
Pues exactamente de la misma manera, ¿cual es el problema que le encuentras?, simplemente seleccionas el archivo que quieres añadir como recurso, o directamente desde el explorador de Windows usas el ratón para arrastrar el archivo a la IDE (teniendo la pestaña de recursos abierta) y así se añade...
En otro post te mostré un enlace a
MSDN donde te explican como añadir recursos...
Cita de: **Aincrad** en 12 Octubre 2017, 16:09 PMy después agregar el control de windows media player y el directorio poner esa musica?
Si, siempre y cuando primero extraigas los datos
raw del recurso para generar un archivo local en el disco, y que así el
host de
WMP pueda reproducirlo, puesto que WMP solo acepta un nombre de archivo o una url. En otras palabras: no puedes usar WMP para reproducir un recurso de audio si no lo extraes al disco, lo cual no se si supone una complicación o no para las intenciones que tengas, de todas formas en otro post te mostré un código para extraer recursos y guardarlos en el disco...
Si lo que quieres es cargar diréctamente el stream del recurso de audio para reproducirlo, entonces puedes usar la clase
System.Media.SoundPlayer (del set de librerías para la tecnología
WPF) de la siguiente manera:
Imports System.Media
Using waveStream As UnmanagedMemoryStream = My.Resources.ResourceManager.GetStream("Nombre del recurso WAV"),
player As New SoundPlayer(waveStream)
player.PlaySync()
End Using
Nota: pero no reproduce archivos
MP3, el archivo de recurso tiene que ser en formato
WAV.
Nota 2: No te preocupes si programas bajo la tecnología
Windows Forms, puedes usar los miembros de
WPF igualmente.
Aquí tienes una guía:
- How to: Play a Sound from a Windows Form | docs.microsoft.com (https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-play-a-sound-from-a-windows-form)
Saludos
Cita de: Eleкtro en 12 Octubre 2017, 17:47 PM
Imports System.Media
Using waveStream As UnmanagedMemoryStream = My.Resources.ResourceManager.GetStream("Nombre del recurso WAV"),
Dim player As New SoundPlayer(waveStream)
player.PlaySync()
End Using
Nota: pero no reproduce archivos MP3, el archivo de recurso tiene que ser en formato WAV.
convertí el archivo mp3 a wav y lo agregue a resources y puse el code que esta arriba .
pero cuando ejecuto el form, empieza a reproducir la música y no aparece el form hasta dentro de unos 4 seg y despues que aparece el form pa musica se detiene?.como le hago?
.
Cita de: **Aincrad** en 12 Octubre 2017, 19:40 PMcuando ejecuto el form, empieza a reproducir la música y no aparece el form hasta dentro de unos 4 seg y despues que aparece el form pa musica se detiene?.
como le hago?
El método
SoundPlayer.PlaySync, como su propio nombre indica es sincrónico, es lo que se conoce como una llamada bloqueante. En otras palabras: es así por defecto, la cola de mensajes del thread de la UI se bloqueará hasta que se termine de reproducir la canción. Lo mismo te ocurriría si iterases un búcle infinito antes de cargar la UI... o despues, cuando sea.
¿Solución?, prueba a usar el método
SoundPlayer.Play a secas (en teoría es asincrónico), o sino, puedes ejecutar la llamada al método
SoundPlayer.PlaySync desde un nuevo
thread.
- Task Class | MSDN (https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx)
- Asynchronous Programming with Async and Await | docs.microsoft.com (https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/concepts/async/)
Saludos
Gracias ya lo solucione . ;-) ;-) ;-) ;-)
pd: Si Tengo un formulario sin bordes y le quiero poner un picture box como border.
entonces que código le pongo al picturebox para que haga la funcion de borde. ? :huh:
Cita de: **Aincrad** en 12 Octubre 2017, 20:22 PMSi Tengo un formulario sin bordes y le quiero poner un picture box como border.
No, esa no es la manera indicada de intentar simular un borde. De forma natural un control no puede sobresalir (visiblemente hablando) fuera de los límites (
bounds) del contenedor padre de dicho control, es decir, el
Form.
Sencillamente puedes recurrir a
GDI+ para dibujar un borde alrededor de la ventana del Form. Luego puedes capturar cuando el usuario presiona click para responder al mensaje de ventana
WM_NCHITTEST en el que puedes "falsificar" el identificador de la parte de la ventana que corresponde a las coordenadas donde se hizo click, y así simular que se presionó click izquierdo sobre una
borde barra de título (
titlebar) para iniciar la operación de arrastrar/mover la ventana del Form...
EDITO: O bien si lo prefieres puedes hacer eso mismo siguiendo la misma metodología que he descrito arriba pero para que en vez de mover la ventana lo que haga sea iniciar una operación de redimensionar (resize) el Form al presionar click sobre uno de los "bordes", aunque ello requeriría algo más de trabajo de implementación que lo que escribí en este código de aquí abajo.
...¿Y cómo se hace todo eso?, pues así:
Public NotInheritable Class Form1 : Inherits Form
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.FormBorderStyle = FormBorderStyle.None
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
' Asegúrate de escribir un valor de longitud que sea número par, para que encaje correctamente en los offsets.
Using pen As New Pen(Color.LimeGreen, SystemInformation.FrameBorderSize.Width)
e.Graphics.DrawRectangle(pen, Me.DisplayRectangle)
End Using
End Sub
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
If (e.Button = MouseButtons.Left) Then
NativeMethods.ReleaseCapture()
NativeMethods.SendMessage(Me.Handle, NativeMethods.WindowsMessages.WM_NCLBUTTONDOWN,
New IntPtr(NativeMethods.NcHitTestFlags.HT_CAPTION), IntPtr.Zero)
End If
End Sub
End Class
Friend NotInheritable Class NativeMethods
Private Sub New()
End Sub
' https://msdn.microsoft.com/en-us/library/windows/desktop/ff381405(v=vs.85).aspx
Friend Enum WindowsMessages As Integer
WM_NCLBUTTONDOWN = &HA1
End Enum
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms645618(v=vs.85).aspx
Friend Enum NcHitTestFlags As Integer
HT_CAPTION = &H2
End Enum
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646261(v=vs.85).aspx
<DllImport("user32.dll")>
Friend Shared Function ReleaseCapture() As Boolean
End Function
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx
<DllImport("user32.dll", EntryPoint:="SendMessage", SetLastError:=True)>
Friend Shared Function SendMessage(
<MarshalAs(UnmanagedType.SysInt)> ByVal hwnd As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal msg As WindowsMessages,
<MarshalAs(UnmanagedType.SysInt)> ByVal wParam As IntPtr,
<MarshalAs(UnmanagedType.SysInt)> ByVal lParam As IntPtr
) As Integer
End Function
End Class
Citarque código le pongo al picturebox para que haga la funcion de borde. ?
La próxima vez no pidas tanto código así como si esto fuese un servicio gratis de entrega de códigos a domicilio con una base de datos de códigos en oferta para cualquier ocasión especial del año...
En general pedir "códigos" está muy mal visto internacionálmente en el mundillo de la programación..
Trata de buscar un poco antes de preguntar, que son cosas sencillas las que pides y podrías investigar por Google o donde sea y acabar hallando una solución. No te lo van a dar todo siempre hecho.PD: Lo siento pero tenía que decirlo.
Saludos