Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - okik

#791
Veo que como yo, te has desesperado buscando...  :rolleyes:

Al final lo que voy ha hacer es crear un DataGridView, y cargar los datos en el mismo, ademas de poder modificarlos poder crear otro archivo excel o podificar el original


#792
Hola,
Para hacer eso necesitas recurrir a funciones  API de windows.

Para simular el evento del Clic del ratón has de llamar a la siguiente función:
Código (vb) [Seleccionar]

Private 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)


En este caso la constante que te interesa usar es:
Código (vb) [Seleccionar]
Const MOUSEEVENTF_LEFTDOWN = &H2 '  botón izquierdo presionado

Para llamar a mouse_event y simular el CLIC del ratón se hace de la siguiente manera:

Código (vb) [Seleccionar]
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)


Para mover el cursor, es decir el puntero del ratón se usa la siguiente función:

Código (vb) [Seleccionar]
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long


Y la forma de llamarlo es:
Código (vb) [Seleccionar]
Call SetCursorPos (X,Y)

Donde X e Y son las coordenadas en pixels del escritorio de windows. Así, si tu pantalla tiene una resolución de 1280x800 y quieres colocar el cursor justo en el centro de la pantalla pones:
Código (vb) [Seleccionar]
Call SetCursorPos((1280/2), (800/2))


Ejemplo de programa

- Crea un módulo
- Un control PictureBox
- Un control Timer
- Un control CommandButton

En el módulo pega lo siguiente:
Código (vb) [Seleccionar]
'Definición de la API para mover el cursor
Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long


'Definición de la API para los eventos del ratón
Private 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)
Const MOUSEEVENTF_MOVE = &H1 '  movimiento del mouse
Const MOUSEEVENTF_LEFTDOWN = &H2 '  botón izquierdo presionado
Const MOUSEEVENTF_LEFTUP = &H4 '  botón izquierdo soltado
Const MOUSEEVENTF_RIGHTDOWN = &H8 '  botón derecho presionado
Const MOUSEEVENTF_RIGHTUP = &H10 '  botón derecho soltado
Const MOUSEEVENTF_MIDDLEDOWN = &H20 '  botón central presionado
Const MOUSEEVENTF_MIDDLEUP = &H40 ' botón central soltado
Const MOUSEEVENTF_ABSOLUTE = &H8000 '  movimiento absoluto
Public Sub HacerClic()
'Simula el clic del boton izquierdo del ratón
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
End Sub




En el Form pega lo siguiente:

Código (vb) [Seleccionar]
'Función API para determinar la posición de un control o formulario
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long


Dim ColorTiza As Integer
Dim PosPicture As RECT
Dim r As Variant
Dim X As Integer, Y As Integer
 
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
ColorTiza = 0 'Color blanco por defecto al abrir el programa
Timer1.Interval = 200
'Obtiene el centro del PictureBox
Call GetWindowRect(Picture1.hWnd, PosPicture)
X = PosPicture.Left + ((PosPicture.Right - PosPicture.Left) / 2)
Y = PosPicture.Top + ((PosPicture.Bottom - PosPicture.Top) / 2)

'Coloca el cursor en el centro del Picture
Call SetCursorPos(X, Y)


End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Picture1.PSet (X, Y), QBColor(ColorTiza)
End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Picture1.DrawWidth = 5
Picture1.Line -(X, Y), QBColor(ColorTiza)
End If
End Sub

Private Sub Timer1_Timer()
Call GetWindowRect(Picture1.hWnd, PosPicture)
r = (r + 0.5)
X = X + Cos(Y) * r
Y = Y + Sin(X) * r

'Mueve el cursor
Call SetCursorPos(X, Y)
'Simula el evento CLIC del ratón
Call HacerClic

'Para el proceso cuando el cursor se sale del control PictureBox
If X > PosPicture.Right Or X < PosPicture.Left Then Timer1.Enabled = False
If Y > PosPicture.Bottom Or Y < PosPicture.Top Then Timer1.Enabled = False

End Sub


Saludos
#793
Fácil  ;D
Haces clic sobre la palabra en cuestión con el botón DERECHO del ratón. Cuando se despliegue el menú, le das a 'Agregar al diccionario' y se quitará la raya roja.

Otra opción, sería acceder a "Herramientas/Opciones/[Ortografía y Gramática]" y desactivar la casilla "Revisar ortografía mientras escribe". Pero se entiende que no revisará más automáticamente la ortografía hasta que no actives de nuevo esta opción.

Esto es en Office 2003, no se como irá en 2010, si es tu caso.


#794
Hola,

Al decir tres puntos no especificas si lo quieres en un lugar concreto, de forma aleatoria, o bien los tres seguidos es decir "..."

Forma 1.
"Tres puntos seguidos ..." en VB6

Código (vb) [Seleccionar]
With Picture1
.AutoRedraw = True
.Font = "Arial" 'tipo de fuente
.Font.Size = 50 'tamaño de fuente
.CurrentX = 200 'Posición 10 pixels de izquierda a derecha
.CurrentY = 0 'Posición 10 pixels de arriba a abajo
Picture1.Print "..."
End With


Forma 1.
"Tres puntos seguidos ..." en VB.Net

Código (vbnet) [Seleccionar]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.CreateGraphics.DrawString("...", New Font("Arial", 50, FontStyle.Bold, GraphicsUnit.Point, 2) _
       , Brushes.Brown, 0, 0)
    End Sub





Forma 2.
Esto dibuja tres puntos circulares de forma aleatoria dentro de un picture con VB. Net

Código (vbnet) [Seleccionar]
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim Lapiz As Object
        Dim Grosor As Integer
        Dim Color As Color
        Dim PosicionX As Integer
        Dim PosicionY As Integer
        Grosor = 5 'Grosor del punto
        Color = Color.HotPink 'Color del punto (rosa)
        Lapiz = New Pen(Color, Grosor) 'Lapiz(pen) para pintar el punto

        PictureBox1.Refresh() 'Limpia el picture

        For I = 1 To 3
            'Posición en el eje X, Y del punto de forma aleatoria
            PosicionX = Int(Rnd() * PictureBox1.Width - 1) + 1 'obtiene una posición X dentro del picture
            PosicionY = Int(Rnd() * PictureBox1.Height - 1) + 1 'obtiene una posición y dentro del picture

            'Dibuja el punto
            PictureBox1.CreateGraphics.DrawEllipse(Lapiz, PosicionX, PosicionY, Grosor, Grosor)
        Next I

    End Sub

#795

Gracias  por la respuesta FranciskoAsdf  y no quiero ser quisquilloso... pero no es lo que busco.

El código que me has puesto es de Visual Basic 6.0 y como he explicado lo que quiero es hacerlo con Visual Basic 2010.  Que creo que también se le suele llamar VB.Net 2010

la función: OpenDatabase, no lo reconoce  VB2010, ya para empezar.

Y por último,  este código que me das, si no me equivoco es para acceder a una base de de datos *.mdb y no *.xls. Lo digo porque lo he probado en VB6 y me da error  3343, "No se reconoce el formato de base de datos..."

Saludos
#796
Hola

Después de mucho curiosear no encontré nada. Iba a preguntar, pero encontré la solución por mí mismo. Es la siguiente:


Código (vbnet) [Seleccionar]
'//Se introducen los datos en el datagrid....

'//Desactivar 'reordenar las filas' al hacer clic en la cabecera de una columna
For x = 0 To DataGridView1.ColumnCount - 1               
      .Columns(x).SortModeDataGridViewColumnSortMode.NotSortable         
Next x



IMPORTANTE  :o: Debe introducirse DESPUÉS de introducir los datos en el datagrid. De lo contrario no funcionará, en cualquier caso, sólo en la primera columna.

Al poner "NotSortable" las cabeceras de las columnas no reaccionan al hacer clic, es decir no se comportan como botones.

Si quieres que las cabeceras hagan el efecto de clic (pero sin reordenar) entonces pones  "Programmatic"

Código (vbnet) [Seleccionar]
For x = 0 To DataGridView1.ColumnCount - 1               
      .Columns(x).SortModeDataGridViewColumnSortMode.Programmatic         
Next x



Si quieres que NO reordene en una determinada columna  pones el índice de la columna en .columns(índice):


DataGridView1.Columns(INDICE).SortModeDataGridViewColumnSortMode.NotSortable

ejemplo:

Código (vbnet) [Seleccionar]
DataGridView1.Columns(0).SortModeDataGridViewColumnSortMode.NotSortable


Espero que a álguien le sirva.
#797
Hola,
Antes de nada decir que antes usaba VB6 y he empezado a programar recientemente en VB2010.

Estoy transcribiendo un programa VB6 a VISUAL BASIC .NET 2010. No lo quiero convertir, puesto que quiero empezar desde el principio aprovechando las ventajas de vb2010. El programa creado con vb6, accedía a una hoja de cálculo Excel (*.xls)  de la siguiente manera (simplificada):


Importar referéncias:
'Microsoft DAO 3.51 Object Library"
'Microsoft ActiveX Data Objects 2.0 Library"


Código (vb) [Seleccionar]
Dim SheetName As String
Dim RecSet As ADODB.Recordset


'Abre la hoja de cálculo 01.xls
With CreateObject("ADOX.Catalog")
   .ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _
                     & "c:\01.xls';" _
                     & "Extended Properties='Excel 8.0;HDR=yes'"
   SheetName = .Tables(0).Name
   Set RecSet = New ADODB.Recordset
   Set RecSet.ActiveConnection = .ActiveConnection
End With
RecSet.Open "[" & SheetName & "]", , adOpenForwardOnly, adLockReadOnly, adCmdTable


'Lee el archivo
RecSet.MoveFirst ' Se coloca al principio
RecSet.MoveNext
Valor = CStr(RecSet.Fields(1)) 'Obtiene un valor fila:1 y columna:1

RecSet.Close


El caso es que llevo varios días buscando en la red y no consigo encontrar una forma clara de hacer lo mismo con vb2010. Porque yo no quiero acceder a todo el contenido, sino a una fila y columna concreta del archivo xls, según necesite.

Otra cosa que se me ha ocurrido es leer todo y meterlo en un DataGridView, para luego acceder a los datos desde el DataGridView.

Con los datos tengo que hacer cálculos matemáticos, por eso tengo que poder acceder a una información concreta de la tabla según necesite.

Espero que alguien me pueda ayudar  :P.

Saludos