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 - karmany

#1351
Gracias por la ayuda pero no me vale.
Si lo pongo de esa forma que me dices sólo lo ordena por referencia2, es decir, el resultado final en el textbox si no me equivoco será: 17,2,22,7.

Yo lo que quiero hacer es que lo ordene de forma "global", referencia1 y referencia2 a la vez.

Yo lo que he estado haciendo es ORDER BY referencia1 and referencia2 y he probado muchas combinaciones, utilizando también or, pero no lo consigo, y estoy casi seguro que la solución a mi problema no tiene que ser muy diferente de esto que comento. Pero no lo logro.

Espero que alguien sepa hacerlo..
#1352
Hola a todos.
Tengo una base de datos con una tabla: tabla1, en esta tabla sólo he puesto dos campos: referencia1 y referencia2.
referencia1 tiene estos registros: 1,5,15,13
referencia2 tiene estos registros: 2,17,7,22

He accedido a la base de datos mediante un control de datos Data.
Yo lo que he hecho es seleccionar todos los registros de la tabla1 (es decir, todos los registros de los campos referencia1 y referencia2) que comiencen por 1.
Lo he conseguido de este modo: 
   Data1.RecordSource = "SELECT * FROM Tabla1 WHERE referencia2 LIKE '1*' or referencia1 LIKE '1*' "

Pero mi pregunta es: ¿Cómo puedo conseguir ordenar los registros para que se ordenen según he hecho en Data1.RecordSource?

Es decir, si yo tengo un textbox en mi formulario que enlaza a la referencia2 al pasar los registros uno a uno tendría que ver este orden: 2,22,7,17. ¿Entendéis mi pregunta verdad?

Muchísimas gracias por la ayuda.
#1353
Programación Visual Basic / vacio
13 Febrero 2006, 16:49 PM
repetido
#1354
Muchas gracias Zorrohack, ha funcionado perfectamente.

Yo solamente conocía la API GetKeyState, pero tampoco sabía que si devolvía 1 con vbKeyCapital está Caps Lock encendido. Yo siempre la había utilizado como <0 para saber la tecla pulsada.
Y la verdad, no había oído nombrar keybd_event.

De nuevo, gracias.. :D
#1355
Conocéis cómo puedo saber si tengo las mayúsculas activadas o no, y si están desactivadas activarlas..
Gracias, he buscado por todos sitios y no encuentro nada...


PD para salir del apuro estoy utilizando Ucase.
#1356
Hola!!
Tengo un formulario con sólo un Textbox y un módulo.
Lo que quiero hacer es que cuando en el textbox pulse con el botón derecho y seleccione la opción -lectura de derecha a izquierda- ese menú emergente se cierre y que esa opción -lectura de derecha a izquierda- no sea ejecutada.

Yo a lo máximo que he llegado ha sido a interceptar cuando paso el cursor, por encima de la opción: -lectura de derecha a izquierda-. Pero me es imposible cerrar el menú y aparte interceptar cuando se pulse la opción y no como he hecho yo cuando paso el cursor..

Tal vez sea algo complicado, pero a ver si alguien me echa una mano..
Dejo el código para que probéis lo que digo:

En el formulario hay un Textbox. Este es el simple código que hay que poner en el formulario:
Private Sub Form_Load()
    Activa
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Desactiva
End Sub


Y este es el código que hay que poner en el módulo:
Option Explicit

Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long


Public Const GWL_WNDPROC = (-4)
Global PrevWndProc As Long

Public Sub Activa()
    PrevWndProc = SetWindowLong(Form1.Text1.hWnd, GWL_WNDPROC, AddressOf interceptar)
End Sub

Public Sub Desactiva()
  Dim temp As Long
    temp = SetWindowLong(Form1.Text1.hWnd, GWL_WNDPROC, PrevWndProc)
End Sub

Public Function interceptar(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = &H11F Then 'WM_MENUSELECT = &H11F
        If wParam = -2139062272 Then 'Es el parámetro wParam correspondiente.
            Debug.Print "Has pasado sobre -lectura de derecha a izquierda- " & Now & ""
            interceptar = True
        End If
    Else
        interceptar = CallWindowProc(PrevWndProc, hWnd, Msg, wParam, lParam)
    End If
End Function


Gracias por la ayuda
#1357
Software / Re: Me peta los dvd a 80 %
6 Febrero 2006, 00:30 AM
Lo primero para que no malgastes DVD's, crea las imágenes en tu disco duro y luego con un programa como el Daemon Tools las visualizas. Al crear las imágenes en el disco duro, podrás ver si están bien grabadas o no.
Sería interesante que pegaras el log, por ej. del Nero y así tal vez viendo el error se pueda averiguar algo.
Si dices que no presenta ningun conflicto el dispositivo podrías probar:
Usar sólo el programa para la grabación, deshabilitar antivirus o cualquier otro programa en ejecución, comprobar que el archivo que estás grabando no sea corrupto, incluso evitar caídas de tensión en la red..hay muchas cosas.
Que haya suerte..
#1358
He encontrado una forma de interceptar el menú que sale cuando pulsamos con el botón derecho por ej. en un textbox.
El problema es que hay una función que no entiendo lo que hace, ¿me podéis ayudar?

Hay un formulario con un Textbox, un Command y un módulo.
El código es el siguiente:
En el formulario:
Option Explicit
Private mbCapturado As Boolean
Private Sub Command1_Click()
   If Not mbCapturado Then
        gHW = Text1.hWnd
        Activa
        mbCapturado = True
   Else
        mbCapturado = False
        Desactiva
        gHW = 0
   End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If mbCapturado Then Desactiva
End Sub


En el módulo esto:
Option Explicit

Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Public Const GWL_WNDPROC = (-4)

Public Const WM_CONTEXTMENU = &H7B

Global lpPrevWndProc As Long
Global gHW As Long

Public Sub Activa()
    lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
    AddressOf gWindowProc)
End Sub

Public Sub Desactiva()
  Dim temp As Long
    temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub

Public Function gWindowProc(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = WM_CONTEXTMENU Then
        Debug.Print "Interceptado  WM_CONTEXTMENU ( " & Now & ")"
        gWindowProc = True
    Else ' Send all other messages to the default message handler
        gWindowProc = CallWindowProc(lpPrevWndProc, hWnd, Msg, wParam, _
                    lParam)
    End If
End Function


La función que no entiendo es Function gWindowProc. No sé lo que hace. ¿Es de windows? ¿Es predefinida?
En la primera sentencia if, hace: gWindowProc = True. Viendo esto yo he puesto directamente (dentro de Activa): lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, True), pero se "cuelga" el VB.

Alguien q tenga conocimientos me lo puede explicar un poco??
Muchas gracias.
#1359
Software / Re: Me peta los dvd a 80 %
5 Febrero 2006, 19:15 PM
Eso que te ocurre puede ser debido a muchas razones..
Prueba a utilizar otros cd's, mira a ver si tienes los codec's necesarios, pero la opción que estoy viendo es que tengas mal instalada la grabadora de DVD ya que has abierto otro post con ese problema.
Soluciona primero esto último y luego nos comentas..
#1360
Muchas gracias el_chente23 por tu ayuda..
Lo probé y gracias a tu ayuda lo cambié a este otro para que Text1.text no sea sólo igual a p.

Private letra As String

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
  letra = ""
  If KeyCode = 46 Then
    letra = "p"
    KeyCode = 0 'así no tiene que borrar el carácter
  End If
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
  If Len(letra) > 0 Then
    Text1.Text = Left(Text1, Text1.SelStart) _
                 + "p" _
                 + Right(Text1.Text, Len(Text1) - Text1.SelStart - 1)
  End If
End Sub



Casualidad de la vida, después un colega me indicó otro código mucho más sencillo y creo que es menos lioso y el más adecuado:

If KeyCode = vbKeyDelete Then
KeyCode = 0 ' Anular el delete
SendKeys "{p}" ' Simular el tecleo de la p
End if


Gracias