Autor
|
Tema: Problema con un WebBrowser (II) Ahora arrastrable (Leído 8,520 veces)
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
Hola, tengo mi WebBrowser que muestra una imagen con marquee infinito; 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é: 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
|
|
« Última modificación: 26 Mayo 2013, 17:43 pm por Seazoux »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
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
|
|
« Última modificación: 26 Mayo 2013, 18:34 pm por EleKtro H@cker »
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
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: Error 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
Examine the corresponding parameters and, if they are present, return types to determine which pair is not compatible.
|
|
« Última modificación: 26 Mayo 2013, 18:52 pm por Seazoux »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
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!
|
|
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
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
|
|
« Última modificación: 26 Mayo 2013, 18:57 pm por Seazoux »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
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.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
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.
|
|
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
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...
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: Error 2 'Location' is not a member of 'System.Windows.Forms.HtmlElementEventArgs'. C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmMain.vb 40 103 IkillLauncher
Error 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?
|
|
« Última modificación: 26 Mayo 2013, 19:19 pm por Seazoux »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
@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
|
|
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
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...
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
|
|
« Última modificación: 26 Mayo 2013, 20:13 pm por Seazoux »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con cdigo en WebBrowser 2005
Programación Visual Basic
|
Ian~Shadow
|
0
|
1,122
|
11 Junio 2007, 15:54 pm
por Ian~Shadow
|
|
|
[Problema] WebBrowser no anda bien...
Programación Visual Basic
|
agus0
|
0
|
1,739
|
9 Noviembre 2009, 00:38 am
por agus0
|
|
|
Super duda! que pasa ahora con los dvd que antes 4,7 y ahora 4,3 ?
Dudas Generales
|
sauces
|
9
|
6,292
|
15 Junio 2010, 14:34 pm
por Akai
|
|
|
Problema con WebBrowser
.NET (C#, VB.NET, ASP)
|
TEMPLAR
|
5
|
6,222
|
21 Enero 2012, 04:07 am
por jhon1_23
|
|
|
Eliminar Post :)
Programación Visual Basic
|
iNETFRUIT
|
5
|
3,171
|
31 Diciembre 2010, 16:07 pm
por skapunky
|
|