Hola, tengo mi WebBrowser que muestra una imagen con marquee infinito (http://ikillcraft.a0001.net/fondo.html); quiero saber si es posible mediante este código transformarlo en el WebBrowser1 que es el control de mi WebBrowser...
Option Explicit On
Option Strict On
Public Class Form1
' variables
Private x As Integer
Private y As Integer
Private mover As Boolean
Private Sub Form1_MouseDown( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
' habilitar el flag
mover = True
' guardar las coordenadas
x = e.X
y = e.Y
' cambiar el cursor del mouse
Me.Cursor = Cursors.NoMove2D
End If
End Sub
Private Sub Form1_MouseMove( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If mover Then
' establecer la nueva posición
Me.Location = New Point((Me.Left + e.X - x), (Me.Top + e.Y - y))
End If
End Sub
Private Sub Form1_MouseUp( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
' reestablecer
mover = False
Me.Cursor = Cursors.Default
End Sub
End Class
Cual es el problema?
Lo he intentado cambiando Form1 por WebBrowser1 y lockeando el mismo WebBrowser, pero cuando voy a arrastrar el Form, lo que arrastro es la imagen que lleva el WebBrowser dentro, es decir lo que está mostrando...
Alguna idea?
Un saludo.
He estado modificando un poco el código:
Private Mover As Boolean = False
Private p_Mouse As Point = Nothing
Private Sub WebBrowser1_MouseDown( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles WebBrowser1.MouseDown
Me.Cursor = Cursors.Hand
Mover = True
' guarda rl el x e y donde se hizo clic
p_Mouse.X = e.X
p_Mouse.Y = e.Y
End Sub
Private Sub WebBrowser1_MouseMove( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles WebBrowser1.MouseMove
If Mover Then
' referencia al control
Dim unControl As Control = CType(sender, Control)
' cambiar las coordenadas
Dim p1 As Point = unControl.PointToScreen(e.Location)
Dim p2 As Point = unControl.Parent.PointToClient(p1)
' asignar el left y el top - laposición del mouse donde se hizo clic
unControl.Left = p2.X - p_Mouse.X
unControl.Top = p2.Y - p_Mouse.Y
End If
End Sub
Private Sub WebBrowser1_MouseUp( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser1.MouseUp
' cambiar el cursors
Me.Cursor = Cursors.Default
' flag para mover el control
Mover = False
End Sub
Pero me sale este error, y no se porqué:
(http://i.imgur.com/d0kYE1V.png)
He estado buscando información, pero no he encontrado nada... Soy muy noob, o soy retarded xD
:-\ :-\
Lo mismo pasa si uso este code:
Dim oPoint As New System.Drawing.Point
Dim posicionX, posicionY As Integer
Private Sub WebBrowser1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser1.MouseDown
If e.Button = MouseButtons.Left Then
'resta la posición del control que manda a la posición de la forma...
posicionX = Control.MousePosition.X - Me.Location.X
'centro del control.
posicionY = Control.MousePosition.Y - Me.Location.Y
End If
End Sub
Private Sub WebBrowser1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser1.MouseMove
If e.Button = MouseButtons.Left Then
oPoint = Control.MousePosition
oPoint.X -= (posicionX)
oPoint.Y -= (posicionY)
Me.Location = oPoint
My.Settings.Save()
End If
End Sub
Me gustaría citarte algo que te dije, pero para lo que me va a servir...
Lee los eventos disponibles del webbrowser, ¿Ves alguno que se llame MouseMove, MouseDown, o MouseUp?, No Seazoux, no todos los controles tienen los mismos eventos.
Es más, con haber invertido 10 segundos para leer el mensaje de la excepción, habrías leido lo mismo que te acabo de explicar.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WebBrowser1.Navigate("http://google.com")
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim document As HtmlDocument = WebBrowser1.Document
AddHandler document.Body.MouseDown, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseDown)
End Sub
Private Sub WebBrowser1_MouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Left Then
MsgBox("Botón izquiero presionado")
End If
End Sub
Hombre soy muy newbie y esos errores son nuevos, así que no se que hacer al respecto... Seguramente, la próxima vez no tenga que preguntar nada.
PD: De los errores se aprende...
Otro error:
CitarError 2 Method 'Private Sub WebBrowser1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs)' does not have a signature compatible with delegate 'Delegate Sub HtmlElementEventHandler(sender As Object, e As System.Windows.Forms.HtmlElementEventArgs)'. C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmMain.vb 31 83 IkillLauncher
A mi el error que me pongas me suena a chino, habrá que ir aprendiendo de donde salen. Soy primerizo...
PD: Voy a intentar entender algo:
does not have a signature compatible with delegateno tiene una firma compatible con el delegadoQuien es el delegado? xD
PD: Soy muy lioso...
Un saludo. ;)
Ahhhh Vale... xD No se a lo que se refería cuando decía que
El evento MouseMove no es válido para este control ActiveX
CitarExamine the corresponding parameters and, if they are present, return types to determine which pair is not compatible.
Te vendría bien leer acerca del Framework de .NET. En tu error se ve claramente que la firma del delegado y la del método no coinciden.
El delegado lo utilizas al asociar el evento MouseDown al método WebBrowser1_MouseDown. ¿Qué significa éso? Qué estás asociando una acción sobre un método mediante un delegado, que no es más que un puntero seguro a una función (con puntero seguro me refiero a un puntero a bajo nivel utilizado para invocar funciones).
Vamos que cuando se produce ese evento tu llamas a dicha función. Asegúrate de que las firmas de ambos coinciden y espero vayas adquiriendo conocimiento.
Saludos!
Y como hago que las firmas coincidan? xD
Que son las firmas?
Lo del puntero seguro, el delegado, no me ha quedado muy claro...
Esto es mas difícil que vete tu a saber que cosa... xD
Esto es epico, si pongo este trozo de code:
Private Sub WebBrowser1_MouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Left Then
MsgBox("Botón izquiero presionado")
End If
No me sale ningún error
:(
Perdona si te ha sentado un poco mal, pero me ha molestado bastante porque solo con leer ya se sabe lo que pasa, no hay que ser un experto en el tema, y yo no lo soy.
Saludos.
Cita de: Seazoux en 26 Mayo 2013, 18:54 PM
Y como hago que las firmas coincidan? xD
Que son las firmas?
Lo del puntero seguro, el delegado, no me ha quedado muy claro...
Esto es mas difícil que vete tu a saber que cosa... xD
Aunque no manejo mucho sobre delegados, si no recuerdo mal cuando sucede un evento se crea un delegado oculto automáticamente, y puedes acceder a el con un nombre especial dentro del sub, que no recuerdo como era el nombre.
Lo de "las firmas" se refiere al contenido que he marcado en rojo:
Private Sub WebBrowser1_MouseDown(
ByVal sender As Object, ByVal e As HtmlElementEventArgs)
End Sub
...si tu cambias HtmlElementEventArgs por MouseEventArgs, no es compatible la firma, el evento no existe.
No me ha molestado, es más tu llevas razón... Soy fallos muy tontos los míos (bueno, en realidad, yo no me doy cuenta de que está mal, por que soy primerizo bablablablalblalbla), además de siempre como tu sabes, me ha gustado el código ya hecho... :silbar:
Tengo que empollar mucho xD
Mirad lo que he hecho:
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim document As HtmlDocument = WebBrowser1.Document
AddHandler document.Body.MouseDown, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseDown)
AddHandler document.Body.MouseUp, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseUp)
AddHandler document.Body.MouseMove, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseMove)
End Sub
Private Sub WebBrowser1_MouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Left Then
MsgBox("Botón izquiero presionado")
End If
End Sub
Private Sub WebBrowser1_MouseUp(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Right Then
MsgBox("Botón izquiero presionado")
End If
End Sub
Private Sub WebBrowser1_MouseMove(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Middle Then
MsgBox("Botón izquiero presionado")
End If
End Sub
No me sale ningún error hasta que pulso F5, y volvemos a lo mismo de antes.
http://i.imgur.com/d0kYE1V.png
LELELELELELELELEL!
He quitado este código, y ya si va...
Private Sub WebBrowser1_MouseDown( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles WebBrowser1.MouseDown
Me.Cursor = Cursors.Hand
Mover = True
' guarda rl el x e y donde se hizo clic
p_Mouse.X = e.X
p_Mouse.Y = e.Y
End Sub
Private Sub WebBrowser1_MouseMove( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles WebBrowser1.MouseMove
If Mover Then
' referencia al control
Dim unControl As Control = CType(sender, Control)
' cambiar las coordenadas
Dim p1 As Point = unControl.PointToScreen(e.Location)
Dim p2 As Point = unControl.Parent.PointToClient(p1)
' asignar el left y el top - laposición del mouse donde se hizo clic
unControl.Left = p2.X - p_Mouse.X
unControl.Top = p2.Y - p_Mouse.Y
End If
End Sub
Private Sub WebBrowser1_MouseUp( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser1.MouseUp
' cambiar el cursors
Me.Cursor = Cursors.Default
' flag para mover el control
Mover = False
End Sub
Y si me salta en MouseMove, es porque algo hice mal... ;)
Voy a ver...
Estoy editando, con multiples comandos sacados de "por ahí"
Private Sub WebBrowser1_MouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = MouseButtons.Left Then MoveForm = True : MoveForm_Mouse_Position = e.Location
End Sub
Private Sub WebBrowser1_MouseUp(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If MoveForm Then Me.Location = Me.Location + e.Location - MoveForm_Mouse_Position
End Sub
Private Sub WebBrowser1_MouseMove(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.Button = MouseButtons.Left Then MoveForm = False
End Sub
Pero tengo varios errores:
CitarError 2 'Location' is not a member of 'System.Windows.Forms.HtmlElementEventArgs'. C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmMain.vb 40 103 IkillLauncher
CitarError 4 'Button' is not a member of 'System.Windows.Forms.HtmlElementEventArgs'. C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmMain.vb 48 12 IkillLauncher
Si entiendo lo que pone, pero no se como solucionarlo
Segun tu, el EventArgs no es compatible con el Snippet que tu me distes y a su vez e.* no es compatible con HtmlElementEventArgs, que hago?
@Seazoux
Dale a "copy exception to clipboard", y así lees la versión extendida, y ves lo que ocurre.
De todas formas quizás los tiros puedan ir por aquí:
AddHandler document.Body.KeyPress, New HtmlElementEventHandler(AddressOf WebBrowser1_KeyPress)
Private Sub WebBrowser1_KeyPress(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.KeyPressedCode = Keys.A Then
MsgBox("Tecla "A" pulsada")
End If
End Sub
No he conseguido que funcione con las teclas "F", imagino que poque son especiales del control y... bueno, no sé como se hará la verdad.
Saludos
Cuando copio el error solo me sale Copy, y no me sale lo que tu dices... e.e
No se a lo mejor esta en otro lado...
(http://i.imgur.com/Hkb3h7F.png)
Yo me he perdido, que puedo hacer al respecto, sobre el código...
Nuevo código más simplón:
<System.Runtime.InteropServices.DllImport("user32.DLL", EntryPoint:="ReleaseCapture")> _
Private Shared Sub ReleaseCapture()
End Sub
<System.Runtime.InteropServices.DllImport("user32.DLL", EntryPoint:="SendMessage")> _
Private Shared Sub SendMessage( _
ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer _
)
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim document As HtmlDocument = WebBrowser1.Document
AddHandler document.Body.MouseDown, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseDown)
AddHandler document.Body.MouseUp, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseUp)
AddHandler document.Body.MouseMove, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseMove)
End Sub
Private Sub moverForm()
ReleaseCapture()
SendMessage(Me.Handle, WM_SYSCOMMAND, MOUSE_MOVE, 0)
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove, WebBrowser1.MouseMove
If e.Button = MouseButtons.Left Then
moverForm()
End If
End Sub
Como siempre HtmlElementEventHandler y MouseEventArgs con conflictos... XD
Porque no intentas entender lo que se te dijo?
HtmlElementEventArgs, Existe
MouseEventargs, No existe
Estás asociando el evento del body a un procedimiento "Form1_MouseMove" que tiene como parámetro "System.Windows.Forms.MouseEventArgs", es imposible que funcione.
Lo repito, arriba tienes un ejemplo de la alternativa
Citar Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WebBrowser1.Navigate("http://google.com")
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim document As HtmlDocument = WebBrowser1.Document
AddHandler document.Body.MouseDown, New HtmlElementEventHandler(AddressOf WebBrowser1_MouseDown)
End Sub
Private Sub WebBrowser1_MouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Left Then
MsgBox("Botón izquiero presionado")
End If
End Sub
saludos
Yo paso de calentarme la cabeza... xD
Te quoteo:
Cita de: Seazoux en 26 Mayo 2013, 20:16 PM
No hay ninguna forma de intercalar un panel invisble para poder arrastrar el form y a la vez que se vea el contenido de abajo? xD
Te habría contestado a eso si hubiera entendido lo que quieres decir :-/
Cita de: EleKtro H@cker en 26 Mayo 2013, 20:28 PM
Te habría contestado a eso si hubiera entendido lo que quieres decir :-/
A ver, no se puede superponer un Panel y un WebBrowser y que el WebBrowser este atrás y el Panel delante, y que el mismo panel deje ver lo que hay debajo, pero que si le hago click me permita arrastrarlo?
(Como si tuviese un color invisible)
Cita de: Seazoux en 26 Mayo 2013, 20:55 PM
no se puede superponer un Panel y un WebBrowser y que el WebBrowser este atrás y el Panel delante, y que el mismo panel deje ver lo que hay debajo
¿Porque dices que no puedes?
(http://img20.imageshack.us/img20/6312/captura1xr.png)
Lo naranja es el panel.
Yo también paso de calentarme la cabeza si no veo una imágen ("y que el mismo panel deje ver lo que hay debajo").
Es ironía? O me estás haciendo un ojo por ojo? xD
En realidad, se puede o no? :¬¬
Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
Me.BackColor = Color.FromArgb(0, 0, 0, 0)
End Sub
Pero me sale una X gigante.
No es ironía, es que no entiendo lo que dices ni lo que pretendes hacer macho xD
A ver si lo entiendes:
(http://www.vbforums.com/attachment.php?s=373ec087a07ec8f35f51d7cf96c8d986&attachmentid=91137&d=1346772382)
Estoy en el instituto, así que no podré fijarme mucho en los posts.
PD: El panel naranja es el WebBrowser y quiero que se vea.