Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

MSHFlexGrid... supera la lógica

Estas en el tema de MSHFlexGrid... supera la lógica en el foro de Visual Basic clásico en Foros del Web. Bueno, la verdad que me estoy partiendo la cabeza con este tema: Resulta que hice un PopUp menu que aparece cuando hago click derecho sobre ...
  #1 (permalink)  
Antiguo 29/03/2006, 08:03
Avatar de Frehley  
Fecha de Ingreso: junio-2005
Ubicación: Somewhere between Heaven and Hell
Mensajes: 415
Antigüedad: 18 años, 10 meses
Puntos: 0
Pregunta MSHFlexGrid... supera la lógica

Bueno, la verdad que me estoy partiendo la cabeza con este tema:

Resulta que hice un PopUp menu que aparece cuando hago click derecho sobre MSHFlexGrid2.

Cita:
Private Sub MSHFlexGrid2_MouseDown(button As Integer, Shift As Integer, x As Single, y As Single)

If button = vbRightButton Then
MSHFlexGrid2.Col = 0
PopupMenu herramientas
End If

End Sub
Hay un submenu que dice "Terminar Viaje" el cual me abre un form3 que contiene un textbox.

La idea es que ese textbox tenga como text el texto que tiene la columna 0 del MSHFlexGrid2 (y el row sería la misma donde se hizo el click).

El problema es el siguiente:
Cuando yo hago click en el submenu y me carga el form, el textbox tiene siempre el texto del row y col donde se encuetnra el foco. Esto sería OBVIO, pero yo en el initialize del form le pongo

form1.MSHFlexGrid2.Col = 0

Ahí ya tendría que moverse a esa columna, pero no lo hace.

Tambíen probé esto:

Cita:
Private Sub MSHFlexGrid2_MouseDown(button As Integer, Shift As Integer, x As Single, y As Single)

If button = vbRightButton Then
form1.MSHFlexGrid2.Col = 0
MSHFlexGrid2.Col = 0
PopupMenu herramientas
End If

End Sub
Y esto:

Cita:
Private Sub MSHFlexGrid2_MouseDown(button As Integer, Shift As Integer, x As Single, y As Single)

form1.MSHFlexGrid2.Col = 0
If button = vbRightButton Then
MSHFlexGrid2.Col = 0
PopupMenu herramientas
End If

End Sub
Pero sigue sin moverse.

Solamente se mueve si hago esto antes de hacer el click derecho para el PoPup:

Cita:
Private Sub MSHFlexGrid2_Click()

MSHFlexGrid2.Col = 0

End Sub
Pero eso no sería práctico.

Espero que me puedan explicar que es lo que estoy haciendo mal, estoy seguro que es algo simple, pero en este momento tengo la cabeza frustrada y canzada por estar programando toda la noche.

Muchas gracias!
__________________
diegoz.com.ar
  #2 (permalink)  
Antiguo 29/03/2006, 15:35
Avatar de Ultra Putrefactus  
Fecha de Ingreso: marzo-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
EL problema es que el al hacer click sobre el flexgrid con el botón derecho este no selecciona el item. Lo que tienes que hacer es forzar la selección del item cada vez que se haga un click derecho sobre la grilla.

En un modulo:

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Public Const MOUSEEVENTF_MOVE = &H1 ' mouse move
Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down
Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down
Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up
Public Const MOUSEEVENTF_WHEEL = &H800 ' wheel button rolled
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move

Public Type POINTAPI
x As Long
y As Long
End Type

En el form:

private Mdown as boolean' a nivel general en el formulario

Private Sub MSHFlexGrid2_MouseDown(button As Integer, Shift As Integer, x As Single, y As Single)
Dim pt As POINTAPI

GetCursorPos ptcur_x = pt.x * 65535 / ScaleX(Screen.Width, vbTwips, vbPixels)
cur_y = pt.y * 65535 / ScaleY(Screen.Height, vbTwips, vbPixels)

If Button = 2 Then

mouse_event _
MOUSEEVENTF_ABSOLUTE + _
MOUSEEVENTF_MOVE + _
MOUSEEVENTF_LEFTDOWN + _
MOUSEEVENTF_LEFTUP, _
cur_x, cur_y, 0, 0

Mdown = True


End If
End Sub
Private Sub MSHFlexGrid2_Click()

If Mdown Then

PopupMenu herramientas
End If
End Sub

En el evento click de la opción de menu:

Private Sub TerminarViaje_Click

MSHFlexGrid2.col=0
Form2.Text1= MSHFlexGrid2.text
Form2.Show
End Sub
  #3 (permalink)  
Antiguo 29/03/2006, 15:47
Avatar de Ultra Putrefactus  
Fecha de Ingreso: marzo-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
se me olvido un detale.

EN el evento click del MSHFlexGrid2, después de mostrar el popup, tienes que poner Mdown en False, Osea debiera quedar así:


If Mdown Then

PopupMenu herramientas
Mdown=False

End If
  #4 (permalink)  
Antiguo 30/03/2006, 00:55
Avatar de Frehley  
Fecha de Ingreso: junio-2005
Ubicación: Somewhere between Heaven and Hell
Mensajes: 415
Antigüedad: 18 años, 10 meses
Puntos: 0
Muchas gracias por tu respuesta. Ahora el error está en esta linea:

Cita:
GetCursorPos ptcur_x = pt.x * 65535 / ScaleX(Screen.Width, vbTwips, vbPixels)
Me da este error:
Cita:
By Ref Argument Type Dismatch
y me marca el "="

Sabés que puede ser?

Muchas gracias!
__________________
diegoz.com.ar

Última edición por Frehley; 30/03/2006 a las 06:02
  #5 (permalink)  
Antiguo 30/03/2006, 02:47
 
Fecha de Ingreso: mayo-2005
Mensajes: 93
Antigüedad: 19 años
Puntos: 1
Hay dos posibilidades:

1.- No he entendido realmente lo que quieres y no puedes hacer.
2.- Os habeis liado la manta a la cabeza.

Si es la segunda opción, creo que se puede solucionar cuando detectas que el botón derecho del ratón, grabar el el colsel y/o el rowsel del hflexgrid que debes mostrar en el form que se carga posteriormente.

Lo digo porque el código inicial que has mostrado me funciona correctamente para algo similar, pero claro yo en vez de fijar el col de hflexgrid, fijo el colsel.

Si es la primera opción, que también puede ser, entonces, este mensaje se autodestruirá en ...

gurgur
__________________
No te hubieran dado la capacidad de soñar sin darte también la posibilidad de convertir tus sueños en realidad
  #6 (permalink)  
Antiguo 30/03/2006, 07:31
Avatar de Ultra Putrefactus  
Fecha de Ingreso: marzo-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
Sorry, Quedo mal tipeado, debiera ser así:

GetCursorPos Pt
Cur_X=pt.x * 65535 / ScaleX(Screen.Width, vbTwips, vbPixels)
cur_y = pt.y * 65535 / ScaleY(Screen.Height, vbTwips, vbPixels)
  #7 (permalink)  
Antiguo 30/03/2006, 07:48
Avatar de Frehley  
Fecha de Ingreso: junio-2005
Ubicación: Somewhere between Heaven and Hell
Mensajes: 415
Antigüedad: 18 años, 10 meses
Puntos: 0
Buenisimo. Lo pruebo y te comento que pasó.

Muchas gracias!
__________________
diegoz.com.ar
  #8 (permalink)  
Antiguo 30/03/2006, 07:54
Avatar de Frehley  
Fecha de Ingreso: junio-2005
Ubicación: Somewhere between Heaven and Hell
Mensajes: 415
Antigüedad: 18 años, 10 meses
Puntos: 0
Sos un grande, man! Funciona perfecto!

Muchisimas gracias! d(^_^)b
__________________
diegoz.com.ar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:02.