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

#991
Solo debes cancelar el mensaje de NOTIFICACION al redimencionar la ventana...

con un Hook seria interceptar a WM_SYSCOMMAND y rectificar wParam... y cancelar!¡.


case WM_SYSCOMMAND:
    if ((wParam & 0xfff0) == SC_SIZE) return 0;
    break;


pero como ya tienes el Callback de la ventana solo debas ajustar esas lineas.

Dulces Lunas!¡.
#992
si lo que haces son expresiones tipo

(((A+B)-(X+Y))+H)

y quieres que al termino (al pulsar la tecla "=" ) te de el resultado, entonces tienes 2 formas de hacerlo:

1.- Usar un buffer de resultados ( Ans como en las calculadoras cientificas ).
2.- usar un parse matematico que te lo resuelva... por ejemplo este que no termine pero funciona con expresiones simples...



'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel )            //
' //                                                            //
' // Web: http://InfrAngeluX.Sytes.Net/                         //
' //                                                            //
' // |-> Pueden Distribuir Este Código siempre y cuando         //
' // no se eliminen los créditos originales de este código      //
' // No importando que sea modificado/editado o engrandecido    //
' // o achicado, si es en base a este código                    //
' ////////////////////////////////////////////////////////////////
' //
' ////////////////////////////////////////////////////////////////

' 50x-9+114-32x
' (50-32)x = 9-114
' x = (9-114) / (50-32)

Option Explicit

Enum eOperandos
    eParentesisI = 0
    eParentesisF = 1
    ePotencia = 2
    eRaiz = 3
    eMultiplicacion = 4
    eDivicion = 5
    eSuma = 6
    eResta = 7
End Enum

Private Operandos(0 To 7) As String

'   //  Ecuación de 1er grado.
'Public Function EcuacionLineal(ByVal vExpresion$) As String'
'Dim str_Exp$()
'    str_expr$() = Split(vExpresion$, "=", 2)'
'    If UBound(str_expr$) = 1 Then
'        ReDim Preserve str_expr$(0 To 1)
'    End If
    '   //  Hubicamos los terminos (Incognitas en el lado izquierdo y las constantes en el derecho)
   
'End Function

Public Function GetParentesis(ByVal vExpresion$) As String
Dim lng_op&(0 To 1)             '   //  Posicion Inicial/Final
Dim str_bloq$
Dim boo_res         As Boolean

    lng_op&(1) = InStr(1, vExpresion$, Operandos(eOperandos.eParentesisF))
    If (lng_op&(1) <> 0) Then
        lng_op&(0) = InStrRev(vExpresion$, Operandos(eOperandos.eParentesisI), lng_op&(1))
        If (lng_op&(0) = 0) Then
            lng_op&(0) = 1
        Else
            lng_op&(0) = lng_op&(0) + 1
        End If
        GetParentesis = Mid$(vExpresion$, lng_op&(0), lng_op&(1) - lng_op&(0))
    Else
        GetParentesis = vExpresion$
    End If
   
End Function


' // Terminos Semejantes ( Con incognita ).
Public Function ReduccionDeOperandos(ByVal vExpresion$, Optional ByVal Incognita As String = "x") As String
Dim str_spl$()
Dim lng_val#(0 To 1)
Dim lng_ing&(0 To 1)
Dim str_coll$()
Dim lng_c&
Dim str_res$
Dim lng_Opd&

    vExpresion$ = Replace$(vExpresion$, " ", "")
    vExpresion$ = Replace$(vExpresion$, ",", ".")
   
    If (Len(vExpresion$)) Then
        Do
       
            lng_Opd& = BuscarOperando(vExpresion$)
            If (lng_Opd& > -1) Then
                str_spl$ = Split(vExpresion$, Operandos(lng_Opd&), 2)
               
                If (lng_Opd& = eOperandos.eRaiz) Then
                    lng_val#(0) = GetVal(str_spl$(UBound(str_spl$)), &H0, False)
                    str_res$ = Sqr(lng_val#(0))
                    vExpresion$ = Replace$(vExpresion$, Operandos(lng_Opd&) & lng_val#(0), str_res$)
                   
                ElseIf (lng_Opd& <= eOperandos.eResta) Then
                   
                    lng_val#(0) = GetVal(str_spl$(0), &H0, True)
                    lng_val#(1) = GetVal(str_spl$(1), &H0, False)
                   
                    lng_ing&(0) = InStr(1, str_spl$(0), Incognita, vbTextCompare)
                    lng_ing&(1) = InStr(1, str_spl$(1), Incognita, vbTextCompare)
                   
                   
                    Select Case lng_Opd&
                        Case eOperandos.ePotencia
                            str_res$ = lng_val#(0) ^ lng_val#(1)
                           
                        Case eOperandos.eMultiplicacion
                            str_res$ = lng_val#(0) * lng_val#(1)
                           
                        Case eOperandos.eDivicion
                            str_res$ = FormatNumber(lng_val#(0) / lng_val#(1), 9)
                           
                        Case eOperandos.eSuma
                            str_res$ = lng_val#(0) + lng_val#(1)
                           
                        Case eOperandos.eResta
                            str_res$ = lng_val#(0) - lng_val#(1)
                           
                    End Select
                    vExpresion$ = Replace$(vExpresion$, lng_val#(0) & Operandos(lng_Opd&) & lng_val#(1), str_res$)
                   
                Else
                    ReduccionDeOperandos = vExpresion$
                    Exit Function
                   
                End If
               
            End If
       
        Loop Until lng_Opd& = -1
       
    End If
   
    ReduccionDeOperandos = vExpresion$
   
End Function

Public Function BuscarOperando(ByVal vExpresion$, Optional ByVal Reverse As Boolean = False, Optional ByRef Inpos&) As Long
Dim lng_Opd&
    lng_Opd& = -1
    If (Len(vExpresion$)) Then
        For lng_Opd& = 2 To UBound(Operandos)
            If (Reverse) Then
                Inpos& = InStrRev(vExpresion$, Operandos(lng_Opd&), Len(vExpresion$))
            Else
                Inpos& = InStr(1, vExpresion$, Operandos(lng_Opd&))
            End If
            If (Inpos&) Then
                Exit For
            End If
        Next lng_Opd&
        If (lng_Opd& = UBound(Operandos) + 1) Then
            BuscarOperando = -1
        Else
            BuscarOperando = lng_Opd&
        End If
    End If
End Function

Public Function GetVal(ByVal vExpresion$, ByRef OutPos As Long, Optional ByVal Reverse As Boolean = False) As Double
Dim str_res$
    If (Len(vExpresion$)) Then
        str_res$ = BuscarOperando(vExpresion$, Reverse, OutPos)
        If (Reverse) Then
            If (str_res$ = -1) Then
                OutPos = 1
            End If
            GetVal = Val(Mid$(vExpresion$, OutPos))
        Else
            If (str_res$ = -1) Then
                GetVal = Val(Mid$(vExpresion$, 1))
                OutPos = Len(vExpresion$)
            Else
                GetVal = Val(Mid$(vExpresion$, 1, OutPos))
            End If
        End If
    End If
End Function

Private Sub Class_Initialize()
    Operandos(eOperandos.eParentesisI) = "("
    Operandos(eOperandos.eParentesisF) = ")"
    Operandos(eOperandos.ePotencia) = "^"
    Operandos(eOperandos.eRaiz) = "sqrt"
    Operandos(eOperandos.eMultiplicacion) = "*"
    Operandos(eOperandos.eDivicion) = "/"
    Operandos(eOperandos.eSuma) = "+"
    Operandos(eOperandos.eResta) = "-"
End Sub





Private Sub Form_Load()
Dim cls_ecuLineal As New cls_ecuLineal
    With cls_ecuLineal
        Dim str$, str2$
        str2$ = "((7 + 4 * 5 + 4)) + 54 + (42) * (4 * (8 / (45 * 10)))*sqrt(9)"
        Do
            DoEvents
            str$ = .GetParentesis(str2$)
            If Len(str2$) <> Len(str$) Then
                str2$ = Replace(str2, "(" & str$ & ")", .ReduccionDeOperandos(str$))
            Else
                MsgBox .ReduccionDeOperandos(str$) & vbNewLine & ((7 + 4 * 5 + 4)) + 54 + (42) * (4 * (8 / (45 * 10))) * Sqr(9)
                Exit Do
            End If
        Loop
    End With
End Sub



Dulces Lunas!¡.
#993
Si lo haces de esa manera tendras muchos problemas... es decir, que tendras que crear un Parse matematico...

Dulces Lunas!¡.
#994
A pues tienes varios metodos... extraerlo de entre el texto HTML... extraelo mediante un parse de HTML o bien algun ocx que haga algo similar!¡.

Hay mucho de esto por hay.

Dulces Lunas!¡.
#995
Foro Libre / Re: Tienes un diario?
30 Septiembre 2011, 20:23 PM
.
Tenia una libreta... pero se me perdio... maldito Log, ¿Quien lo tendra?...

Dulces Lunas!¡.
#996
.
Entonces cuales son las bases?... desde hace mucho que quiero participar...

P.D.: El Ignorante afirma mientras que el Sabio Duda.

Dulces Lunas!¡.
#997
Programación C/C++ / Re: Recojer telcas de otra App
30 Septiembre 2011, 18:59 PM
Cita de: Riki_89D en 30 Septiembre 2011, 11:03 AM
y esto de hacerlo en otro hilo me a llamado la atencion

Me entendiste mal, se instala un HOOk pero no en otro hilo como tu lo quieres hacer igual si lo deseas hacer adelante, pero debes Instalar el HOOK asociandolo a un HILO, como lo es al hilo del programa que deseas interceptar!¡.

http://msdn.microsoft.com/en-us/library/ms644990%28v=VS.85%29.aspx

Código (c,6) [Seleccionar]


HHOOK WINAPI SetWindowsHookEx(
  __in  int idHook,
  __in  HOOKPROC lpfn,
  __in  HINSTANCE hMod,
  __in  DWORD dwThreadId
);



En el ultimo parametro mete el id del Hilo a asociar, eso es todo ( Hay una api para obtener el id del hilo, pero no recuerdo como se llamaba... cre que tiene algo que ver con GetThreadId() )...

P.D.: Recuerda que debes desinstalar el Hook... UnhookWindowsHookEx()

Dulces Lunas!¡.
#998
Si te refieres a forms MDI lo haces creando dos Forms y a uno lo pones como Parent del otro Form con el api

SetParent()

Dulces Lunas!¡.
#999
Programación C/C++ / Re: Recojer telcas de otra App
30 Septiembre 2011, 08:01 AM
Instala un HOOK al teclado que a su vez sea a un hilo de ejecucion espesifico (esto para no detectar teclas que vayan destinadas a otra Hilo).

Dulces Lunas!¡.
#1000
.
Sumar Dos colores... No trabaja aun muy bien que digamos... si desean discutir este algoritmo creen un nuevo tema, gracias!¡.

Código (vb) [Seleccionar]


Option Explicit

Private Function SumarColor(ByVal lColor As Long, ByVal AddColor As Long) As Long
Dim lRetColor           As Long
    If (lColor) Then
        If ((lColor And &HFF&) = &H0) Then
            lRetColor = (AddColor And &HFF&)
        ElseIf ((AddColor And &HFF&) = &H0) Then
            lRetColor = (lColor And &HFF&)
        Else
            lRetColor = (((lColor And &HFF&) + (AddColor And &HFF&)) \ 2)
        End If
       
        If ((lColor And &HFF00&) = &H0) Then
            lRetColor = (lRetColor Or (AddColor And &HFF00&))
        ElseIf ((AddColor And &HFF00&) = &H0) Then
            lRetColor = (lRetColor Or (lColor And &HFF00&))
        Else
            lRetColor = (lRetColor Or (((((lColor And &HFF00&) \ &H100&) + ((AddColor And &HFF00&) \ &H100&)) \ 2) * &H100&))
        End If
       
        If ((lColor And &HFF0000) = &H0) Then
            lRetColor = (lRetColor Or (AddColor And &HFF0000))
        ElseIf ((AddColor And &HFF0000) = &H0) Then
            lRetColor = (lRetColor Or (lColor And &HFF0000))
        Else
            lRetColor = (lRetColor Or (((((lColor And &HFF0000) \ &H10000) + ((AddColor And &HFF0000) \ &H10000)) \ 2) * &H10000))
        End If
       
        If ((lColor And &HFF000000) = &H0) Then
            lRetColor = (lRetColor Or (AddColor And &HFF000000))
        ElseIf ((AddColor And &HFF000000) = &H0) Then
            lRetColor = (lRetColor Or (lColor And &HFF000000))
        Else
            lRetColor = (lRetColor Or (((((lColor And &HFF000000) \ &H1000000) + ((AddColor And &HFF000000) \ &H1000000)) \ 2) * &H1000000))
        End If
    Else
        lRetColor = AddColor
    End If
    SumarColor = lRetColor
End Function



Código (Vb) [Seleccionar]


Private Sub Form_Load()
    Show
    BackColor = SumarColor(RGB(255, 0, 0), RGB(0, 255, 0))
    BackColor = SumarColor(BackColor, RGB(0, 0, 255))
    BackColor = SumarColor(BackColor, RGB(0, 25, 0))
    BackColor = SumarColor(BackColor, RGB(0, 25, 10))
    BackColor = SumarColor(BackColor, RGB(0, 1, 4))
    BackColor = SumarColor(BackColor, RGB(30, 0, 0))
End Sub



Temibles Lunas!¡.