Makelparam (min, max)

Consultas sobre el lenguaje Pauscal

Makelparam (min, max)

Notapor Joe3 » Lun Dic 02, 2013 12:50 pm

Necesito una implementación (si es que ya no existe) en Pauscal de la siguiente función:

Código: Seleccionar todo
private static IntPtr MakeLParam(int LoWord, int HiWord)
{
  return (IntPtr) ((HiWord << 16) | (LoWord & 0xffff));
}


o sino esta:
Código: Seleccionar todo
Public Function MAKELONG(wLow As Long, wHigh As Long) As Long
   MAKELONG = LOWORD(wLow) Or (&H10000 * LOWORD(wHigh))
 End Function

 Public Function MAKELPARAM(wLow As Long, wHigh As Long) As Long
   MAKELPARAM = MAKELONG(wLow, wHigh)
 End Function

 Public Function LOWORD1(dwValue As Long) As Integer
   MoveMemory LOWORD1, dwValue, 2
 End Function


Lo que realiza la función, por lo que entendí, es combinar dos enteros en 1 real.
La necesito para utilizar el sendmessage para cambiar la posicion de la barra de progreso.
Agradezco me puedan dar una manito. Gracias!
Joe3
 
Mensajes: 16
Registrado: Lun Nov 25, 2013 9:39 am
Ubicación: Montevideo - Uruguay

Sponsor


Re: Makelparam (min, max)

Notapor ErikH » Lun Dic 02, 2013 5:04 pm

Joe3 escribiste:Necesito una implementación (si es que ya no existe) en Pauscal de la siguiente función:

Código: Seleccionar todo
private static IntPtr MakeLParam(int LoWord, int HiWord)
{
  return (IntPtr) ((HiWord << 16) | (LoWord & 0xffff));
}



Esta es la mas sencilla.

Código: Seleccionar todo
Proc MakeLParam(LoWord:Entero,HiWord:Entero):Entero
  Devolver ((HiWord shl 16) Or (LoWord And 65535))
FinProc


Fuentes:
Pauscal:Operadores aritméticos
Pauscal:Proc
Pauscal:Resumen de tipos de datos
Word (computer architecture)
Integer (computer science)
ImagenEntrá a la wiki en OpenShift
Colofox!!!!
ErikH
 
Mensajes: 151
Registrado: Jue Nov 29, 2007 11:24 pm
Ubicación: Algún lugar de México

Re: Makelparam (min, max)

Notapor Joe3 » Lun Dic 02, 2013 7:02 pm

Eres un genio, mañana subo la biblioteca para que la veas, saludos
Joe3
 
Mensajes: 16
Registrado: Lun Nov 25, 2013 9:39 am
Ubicación: Montevideo - Uruguay

Re: Makelparam (min, max)

Notapor ErikH » Mar Dic 03, 2013 5:00 am

ok, aqui la espero :silbando:
ImagenEntrá a la wiki en OpenShift
Colofox!!!!
ErikH
 
Mensajes: 151
Registrado: Jue Nov 29, 2007 11:24 pm
Ubicación: Algún lugar de México

Re: Makelparam (min, max)

Notapor Joe3 » Lun Dic 09, 2013 12:52 pm

ErikH, fíjate si me puedes guiar, la semana pasada estuve con mucho trabajo y no pude terminarla,
use como plantilla una biblioteca de otro control, dime si voy bien, le falta mucho todavía.
Saludos

Agregar a Declare.bdp:
Código: Seleccionar todo
'Barra progreso

Estruc PBM_GETRANGE,_
      Param1:Booleano,_
      Rango:PBRANGE

Estruc PBRANGE,_
     iLow:Entero,_
     iHigh:Entero

Const ICC_PROGRESS_CLASS = &20

'Estructura para inicar cmmcontrols para barra progreso
Estruc INITCOMMONCONTROLSEX,_
   dwSize:Entero,_
   dwICC:Entero


PscBarraProgreso.bdp:
Código: Seleccionar todo
$ADV-
$EBC-

Importar "DeclareW.prp"
Importar "Declare.prp"
Importar "Utiles.prp"
Importar "WinCtrls.prp"

Privado:

Var pscBPCount:Entero

Proc pscBarraProgreso_wndproc(hWnd,Msg,wParam,lParam:Entero):Entero
  Var Rc:RECT,Pnt:PAINTSTRUCT
  Var Obj:pscBarraProgreso
  Var TmpStr:Cadena
  Var Temp:Entero

  Obj=EnteroToControl(GetProp(hWnd,"THIS"))
  Seleccionar Msg
    Caso WM_PAINT
  '    Si (GetUpdateRect(hWnd,Rc,Verd))
  '      Temp=BeginPaint(hWnd,Pnt)
  '      Si (Obj.Visible)
  '        GetClientRect(hWnd,Rc)
  '        TmpStr=Obj.StTexto
  '        SelectObject(Temp,Obj.Fuente.hFont)
  '        SetBkColor(Temp,ColorReal(Obj.Color))
  '        DrawText(Temp,TmpStr,CadLong(TmpStr),Rc,DT_WORDBREAK+DT_EXPANDTABS)
  '      FinSi
  '      EndPaint(hWnd,Pnt)
  '    FinSi
  '    Devolver 0
    Caso WM_GETTEXT
  '    TmpStr=Obj.StTexto
  '    Temp=CadLong(TmpStr)
  '    Si (wParam>Temp) wParam=Temp
  '    CopyMemory(lParam,CadPtr(TmpStr),wParam)
  '    Devolver wParam
    Caso WM_GETTEXTLENGTH
  '    Devolver CadLong(Obj.StTexto)
    Caso WM_SETTEXT
  '    Temp=lstrlen2(lParam)
  '    Si (Temp=0)
  '      Obj.StTexto=""
  '    SiNo
  '      TmpStr=RepCarac(0,Temp)
  '      CopyMemory(CadPtr(TmpStr),lParam,Temp)
  '      Obj.StTexto=TmpStr
  '    FinSi
  '    GetClientRect(hWnd,Rc)
  '    InvalidateRect(hWnd,Rc,Verd)
  '    Devolver 0
    Caso WM_LBUTTONUP
  '    Si (Obj.Habilitado)
  '      Si (Obj.Eventos.AlCliquear@) Obj.Eventos.AlCliquear
  '    FinSi
  '    Devolver 0
  FinSeleccionar
  Resultado=DefWindowProc(hWnd,Msg,wParam,lParam)
FinProc

Público:

Clase pscBarraProgreso(pscTextControl), _
  ObjNum:Entero, _
  ClassNomb:Cadena

  ClaseVar StTexto:Cadena
  ClaseVar Eventos:pscBarraProgreso_EVENTINFO

Público:
  Proc CargarBarraProgreso(HwndParent:Entero)
   Var InitCmmCTRL:Entero, Icc:INITCOMMONCONTROLSEX

   Var tmp, tmp2:PBRANGE, tmp3:PBM_GETRANGE 'Mensajes

      '************* Iniciamos los controles ****************
      Icc.dwSize = Long(icc)
      Icc.dwICC  = ICC_PROGRESS_CLASS
      InitCmmCTRL = InitCommonControlsEx(Icc)
      Si(InitCmmCTRL=0) GenerarError errFalloWinCtrls

      ObjNum    = CreateWindowEx(0,ClassNomb,iTexto,WS_CHILD+(>Habil?0:WS_DISABLED)+(>Visib?WS_VISIBLE:0),_
                                 Coords.x,Coords.y,Coords.Width,Coords.Height,HwndParent,0,GetModuleHandle(""),Nulo)
      Si(ObjNum=0) GenerarError errFalloWinCtrls


     ' tmp.ilow  = 0
     ' tmp.ihigh = 100
     ' SendMessage(ObjNum, PBM_SETRANGE, 0, tmp);   

   
     'Fuente.InsertarFuente(ObjNum)
     'SetProp(ObjNum,"THIS",ObjPtr())
     'SetColor(Col)
     'ObtenerDC
     'Texto=iTexto
     UpdateWindow(ObjNum)
  FinProc

  Proc DescargarBarraProgreso
    Si (ObjNum=0) Salir
    DestroyWindow(ObjNum)
    ObjNum=0
  FinProc

Privado:
  Proc Registrar
  Var wndcls:WNDCLASS
    'wndcls.style          = CS_PARENTDC
     wndcls.lpfnwndproc    = pscBarraProgreso_wndproc@
     wndcls.hInstance      = Programa.hInstance
     wndcls.hCursor        = LoadCursorNum(0, IDC_ARROW)
     wndcls.hbrBackground  = COLOR_WINDOW
     wndcls.lpszMenuName   = ""
     wndcls.lpszClassName  = ClassNomb
     Si(RegisterClass(wndcls) = 0)
        GenerarError errFalloWinCtrls
     SiNo
        Mensaje("Clase registrada correctamente: "+ClassNomb)    ' Debug
     FinSi
  FinProc
 
  Proc Inicializar
    Alto=25
    Ancho=81
    Color=COLOR_BTNFACE+&1000000
    Habilitado=Verd
    Visible=Verd
    pscBPCount=pscBPCount+1
    ClassNomb="pscBP"+EntCad(pscBPCount)
    Registrar
  FinProc
 
  Proc Finalizar
    DescargarBarraProgreso
    UnregisterClass(ClassNomb,Programa.hInstance)
  FinProc
 
  Constructor:Inicializar
  Destructor:Finalizar
 
FinClase


Aplicación para testear:
Código: Seleccionar todo
'Archivo generado por Visual Pauscal
'El código de los eventos y demás procedimientos
'se encuentra al final de este archivo

$ADV-

Importar "PauscalW.prp"



Clase c_Form1(pscForm)
Público:

  ClaseVar _
    BProgreso:pscBarraProgreso

Privado:
  Proc Init
    X=0
    Y=0
    Ancho=609
    Alto=205
    Color=0
    Texto="Form1"
    Visible=Verd
    Habilitado=Verd
    PuedeCambiarDeTamaño=Verd
    BotonMaximizar=Verd
    BotonMinimizar=Verd
    MenuSistema=Verd
    Centrar=Verd
    Borde=Verd
    Eval Eventos
    FinEval
    CrearForm
    Crear BProgreso
    Eval BProgreso
      .Padre = EsteObjeto
      .X=16
      .Y=56
      .Ancho=560
      .Alto=32
      .Texto="Barra de Progreso"
      .Visible=Verd
      .Habilitado=Verd
      Eval .Eventos
      FinEval
    FinEval
  FinProc
Público:
  Proc CargarForm
    Si (hWnd=0)
      Init
      BProgreso.CargarBarraProgreso(hWnd)
      FormCargado
    FinSi
  FinProc
  Proc Mostrar(Opcional EsModal:Booleano)
    CargarForm
    Si (EsModal) MostrarModalInt; SiNo; MostrarInt
  FinProc

'Eventos


FinClase

'Alias



Var Form1:c_Form1

Proc CicloPrincipal
  Crear Form1
  Form1.CargarForm
  Form1.Mostrar
  Programa.Ejecutar
FinProc


'**************************************************

'Código de eventos y procedimientos
'definidos por el usuario


CicloPrincipal
Fin


PD: Falta agregar la función makelparam() y ver como pasarle los mensajes para poder utilizarla
Joe3
 
Mensajes: 16
Registrado: Lun Nov 25, 2013 9:39 am
Ubicación: Montevideo - Uruguay

Re: Makelparam (min, max)

Notapor ErikH » Mar Dic 10, 2013 5:49 pm

Casi, aqui esta un programa Quick an dirty :lol:

Código: Seleccionar todo
$ADV-
$EBC-
    Importar "PauscalW.prp"
Importar "DeclareW.prp"
Importar "Declare.prp"
Importar "Utiles.prp"
Importar "WinCtrls.prp"

Privado:

Var pscBPCount:Entero



Público:

Clase pscBarraProgreso(pscTextControl), _
  ObjNum:Entero, _
  ClassNomb:Cadena

  ClaseVar StTexto:Cadena
  ClaseVar Eventos:pscBarraProgreso_EVENTINFO

Público:
  Proc CargarBarraProgreso(HwndParent:Entero)
   Var InitCmmCTRL:Entero, Icc:INITCOMMONCONTROLSEX

   Var tmp, tmp2:PBRANGE, tmp3:PBM_GETRANGE 'Mensajes

      '************* Iniciamos los controles ****************
      Icc.dwSize = Long(icc)
      Icc.dwICC  = ICC_PROGRESS_CLASS
      InitCmmCTRL = InitCommonControlsEx(Icc@)
      Si(InitCmmCTRL=0) GenerarError errFalloWinCtrls

      ObjNum    = CreateWindowEx(0,ClassNomb,iTexto,WS_CHILD+(>Habil?0:WS_DISABLED)+(>Visib?WS_VISIBLE:0),_
                                 Coords.x,Coords.y,Coords.Width,Coords.Height,HwndParent,0,GetModuleHandle(""),Nulo)
      Si(ObjNum=0) GenerarError errFalloWinCtrls
''=================Esta parte envia el mensaje es el tercer parametro el importante
     SendMessage(ObjNum , 1026, 10, 0)

     UpdateWindow(ObjNum)
  FinProc

  Proc DescargarBarraProgreso
    Si (ObjNum=0) Salir
    DestroyWindow(ObjNum)
    ObjNum=0
  FinProc

Privado:
 
  Proc Inicializar
    Alto=25
    Ancho=81
    Color=COLOR_BTNFACE+&1000000
    Habilitado=Verd
    Visible=Verd
    pscBPCount=pscBPCount+1
    ClassNomb="msctls_progress32"
    'esta clase no necesita Registrarse su propia clase
    'Para eso se utiliza InitCommonControlsEx
    ' O eso entendí XD
  FinProc
 
  Proc Finalizar
    DescargarBarraProgreso
    UnregisterClass(ClassNomb,Programa.hInstance)
  FinProc
 
  Constructor:Inicializar
  Destructor:Finalizar
 
FinClase

'Barra progreso
'=====================================================================
'=====================================================================
'=====================================================================
Estruc PBM_GETRANGE,_
      Param1:Booleano,_
      Rango:PBRANGE

Estruc PBRANGE,_
     iLow:Entero,_
     iHigh:Entero

Const ICC_PROGRESS_CLASS = &20

'Estructura para inicar cmmcontrols para barra progreso
Estruc INITCOMMONCONTROLSEX,_
   dwSize:Entero,_
   dwICC:Entero
   
Estruc pscBarraProgreso_EVENTINFO, _
  AlCliquear:pscEvNotif, _
  AlDobleCliquear:pscEvNotif
 
'

Proc InitCommonControlsEx(:Entero):Booleano, "Comctl32"


'=====================================================================
'=====================================================================
'=====================================================================


    'Archivo generado por Visual Pauscal
    'El código de los eventos y demás procedimientos
    'se encuentra al final de este archivo

    $ADV-





    Clase c_Form1(pscForm)
    Público:

      ClaseVar _
        BProgreso:pscBarraProgreso

    Privado:
      Proc Init
        X=0
        Y=0
        Ancho=609
        Alto=205
        Color=0
        Texto="Form1"
        Visible=Verd
        Habilitado=Verd
        PuedeCambiarDeTamaño=Verd
        BotonMaximizar=Verd
        BotonMinimizar=Verd
        MenuSistema=Verd
        Centrar=Verd
        Borde=Verd
        Eval Eventos
        FinEval
        CrearForm
        Crear BProgreso
        Eval BProgreso
          .Padre = EsteObjeto
          .X=16
          .Y=56
          .Ancho=560
          .Alto=32
          .Texto="Barra de Progreso"
          .Visible=Verd
          .Habilitado=Verd
          Eval .Eventos
          FinEval
        FinEval
      FinProc
    Público:
      Proc CargarForm
        Si (hWnd=0)
          Init
          BProgreso.CargarBarraProgreso(hWnd)
          FormCargado
        FinSi
      FinProc
      Proc Mostrar(Opcional EsModal:Booleano)
        CargarForm
        Si (EsModal) MostrarModalInt; SiNo; MostrarInt
      FinProc

    'Eventos


    FinClase

    'Alias



    Var Form1:c_Form1

    Proc CicloPrincipal
      Crear Form1
      Form1.CargarForm
      Form1.Mostrar
      Programa.Ejecutar
    FinProc


    '**************************************************

    'Código de eventos y procedimientos
    'definidos por el usuario


    CicloPrincipal
    Fin


Entre los cambios importantes esta el de el nombre de la clase que se realiza en la linea
Código: Seleccionar todo
ClassNomb="msctls_progress32"


Tal vez prefieras hacerlo en
Código: Seleccionar todo
CreateWindowEx(0,"msctls_progress32",iTexto,WS_CHILD+(>Habil?0:WS_DISABLED)+(>Visib?WS_VISIBLE:0),_
                                 Coords.x,Coords.y,Coords.Width,Coords.Height,HwndParent,0,GetModuleHandle(""),Nulo)

Esto lo acepta porque es un clase que se define en la llamada anterior
Código: Seleccionar todo
      InitCmmCTRL = InitCommonControlsEx(Icc@)

Por lo que no necesita definirse con el procedimiento Registrar

Checa la linea
Código: Seleccionar todo
''=================Esta parte envia el mensaje es el tercer parametro el importante
     SendMessage(ObjNum , 1026, 10, 0)


1026 es el valor del mensaje PBM_SETPOS en decimal, en hexadecimal es 0x402. Con eso puedes enviar mas mensajes y crear procedimientos para cada tipo de mensaje en la clase.

Para crear un boton puedes usar:
Código: Seleccionar todo
ClassNomb="Button"


¡Suerte!

Fuente:
How to Use Progress Bar Controls
Progress Bar Messages
ImagenEntrá a la wiki en OpenShift
Colofox!!!!
ErikH
 
Mensajes: 151
Registrado: Jue Nov 29, 2007 11:24 pm
Ubicación: Algún lugar de México


Volver a Dudas, Preguntas y Respuestas

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron