MC1000

Post Reply
ramirezosvaldo
Posts: 101
Joined: Mon Oct 10, 2005 6:48 pm
Location: Cd. Juarez Chihuahua
Contact:

MC1000

Post by ramirezosvaldo »

Estimados
El mismo programa para la MC3000 funciona para la MC1000

Se que no es gran cosa, pero anexo el programa de como quedo.

Saludos


#include "fwce.ch"
#include "hbclass.ch"
#include "Directry.ch"

#define crlf chr(13)+chr(10)
#define CRLF chr(13)+chr(10)
#define CR chr(13)

#pragma comment (lib,"scnapi32")

FUNCTION Main()
* begin

PRIVATE oWnd
PRIVATE nCant := 1 , oCant
PRIVATE nCantUltimo := 1 , oCantUltimo

PRIVATE oMsg , oMsgUltimo
PRIVATE cBarCode := space(13) , oBarCode
PRIVATE nContador := 0 , oContador
PRIVATE nContador2 := 0 , oContador2
PRIVATE cCurDir := curdir()
PRIVATE aTemp_file := {}

IF StillRun("Toma-Facil++ V1.0")
Quit
ENDIF

if ! file( cCurDir+"INVENTA.DBF")
aadd( aTemp_file , { "BARCODE","C",13,0} )
aadd( aTemp_file , { "INVENTARIO" ,"N",08,0} )
aadd( aTemp_file , { "FECHA" ,"D",08,0} )
aadd( aTemp_file , { "HORA" ,"C",08,0} )
create_tmp_file( aTemp_file , cCurDir , "inventa.dbf" )
endif

if ! file( cCurDir+"INVENTA.DBF")
msginfo("Base de datos no pudo se creada.")
close all
return
endif

use ( cCurDir +"INVENTA.DBF" ) alias INVENTA
index on upper( barcode ) to ( cCurDir+"INVENTA.NTX" )
set order to 1
go top



DEFINE WINDOW oWnd TITLE "Toma-Facil++ V1.0"

@ 1.0,02 SAY "Cantidad :" SIZE 70, 20
@ 1.0,12 GET oCant VAR nCant picture "99999" VALID CheckCant() SIZE 40, 20
@ 2.3,02 SAY "Codigo :" SIZE 70, 20
@ 2.5,12 GET oBarCode VAR cBarcode picture "@!" VALID CheckBarCode() SIZE 120, 20

@ 04.0,02 SAY oMsgUltimo VAR "Ultimo : Cant:" SIZE 400, 20
@ 06.5,02 SAY oContador VAR "Piezas:" SIZE 200, 20
@ 08.0,02 SAY oContador2 VAR "Codigos:" SIZE 200, 20

* @ 08.5,02 SAY oMsg VAR "Msg :" SIZE 400, 20

@ 08.5,22 BUTTON "Terminar" SIZE 80, 30 ACTION oWnd:END()

ACTIVATE WINDOW oWnd on Init BuildTimer( oWnd )


RETURN NIL

procedure BuildTimer( oWnd )
* Begin
Define Timer oTimer Interval 1000 Action CheckBattery() OF oWnd
Activate Timer oTimer
return

function CheckBattery()
If BatteryLife () < 10
oMsg:VarPut( "!! Bateria Baja, Grabe su informacion.!!")
oMsg:refresh()
endif
return .t.


FUNCTION CheckCant()
* begin
LOCAL cFile , cRet , nActual := 0 , lReturn := .F.

IF oCant:nLastKey = 13

cBarCode := ""
cRet := SCAN_OPEN()
IF valtype( cRet ) = "C"
cRet := strtran( cRet , chr(0),"" )
FOR i := 1 TO len( cRet )
IF substr(cRet,i,1) $"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-/"
cBarCode += substr(cRet,i,1)
ENDIF
NEXT
ENDIF

cBarCode := alltrim(cBarcode)+space(13-len(alltrim(cBarcode)))

IF ! empty( cBarCode )

if INVENTA->(DbSeek( cBarcode))
replace INVENTA->inventario with INVENTA->inventario + nCant
else
INVENTA->(DbAppend())
replace INVENTA->barcode with cBarcode
replace INVENTA->inventario with nCant
endif
replace INVENTA->fecha with date()
replace INVENTA->hora with time()

nContador += nCant
oContador:VarPut("Piezas:"+transform(nContador,"999"))
oContador:refresh()

nContador2 += 1
oContador2:VarPut("Codigos:"+transform(nContador2,"999"))
oContador2:refresh()

oCant:VarPut(1)
oCant:refresh()

oBarCode:VarPut( space(15))
oBarCode:refresh()

oMsgUltimo:VarPut("Ultimo:"+alltrim(cBarCode)+" Cant:"+transform(nCant,"999"))
oMsgUltimo:refresh()

ENDIF
ELSE
lReturn := .T.
ENDIF
RETURN lReturn

FUNCTION CheckBarCode()
* begin
LOCAL cFile , cRet , nActual := 0 , lReturn := .F. , nHandle , cTxt

IF oBarCode:nLastKey = 38
oBarCode:oJump := oCant
RETURN .T.
ENDIF

if oBarCode:nLastKey = 13
cBarCode := alltrim(cBarcode)+space(13-len(alltrim(cBarcode)))
if INVENTA->(DbSeek( cBarcode))
replace INVENTA->inventario with INVENTA->inventario + nCant
else
INVENTA->(DbAppend())
replace INVENTA->barcode with cBarcode
replace INVENTA->inventario with nCant
endif
replace INVENTA->fecha with date()
replace INVENTA->hora with time()

nContador += nCant
oContador:VarPut("Piezas:"+transform(nContador,"999"))
oContador:refresh()

nContador2 += 1
oContador2:VarPut("Codigos:"+transform(nContador2,"999"))
oContador2:refresh()

oCant:VarPut(1)
oCant:refresh()

oBarCode:VarPut( space(15))
oBarCode:refresh()

oMsgUltimo:VarPut("Ultimo:"+cBarCode+" Cant:"+transform(nCant,"999"))
oMsgUltimo:refresh()


oCant:VarPut(1)
lReturn := .T.
endif

IF lReturn
oBarCode:oJump := oCant
ENDIF

RETURN lReturn


* Funciones que no corren en Symbol MC3000
FUNCTION cesetmenu() ; RETURN NIL
FUNCTION getmenu() ; RETURN NIL
FUNCTION readbitmap() ; RETURN NIL
FUNCTION palbmpread() ; RETURN NIL

****************************************************************************************************

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>
#include <Scancapi.h>
#include <mmsystem.h>
#include <uniqueid.h>
LPWSTR AnsiToWide( LPSTR );
#define BUFFER_SIZE 7095
#define DEFAULT_TIMEOUT 10000

LPSCAN_BUFFER lpScanBuffer = NULL;
BOOL bUseText = TRUE;
DWORD dwScanSize = 7095;
DWORD dwScanTimeout = 0;


HANDLE hScanner = NULL;
TCHAR szScannerName[MAX_PATH] = TEXT("SCN1:");
DWORD dwResult ;
CHAR Buffer ;
UINT uMsg ;
DWORD dwTimeout ;

HB_FUNC( SCAN_OPEN )
{
dwResult = SCAN_Open( szScannerName, &hScanner );
if ( dwResult == E_SCN_SUCCESS )
{
dwResult = SCAN_Enable( hScanner );
if ( dwResult == E_SCN_SUCCESS )
{
BOOL state = TRUE;
dwResult = SCAN_SetSoftTrigger(hScanner, &state);
if (dwResult == E_SCN_SUCCESS)
{
// allocate a new scan buffer
lpScanBuffer = SCAN_AllocateBuffer(TRUE /* data as chars */, BUFFER_SIZE);
if (lpScanBuffer)
{
dwResult = SCAN_ReadLabelWait(hScanner, lpScanBuffer, DEFAULT_TIMEOUT);
if (dwResult == E_SCN_SUCCESS)
{
hb_retclen( (char *)SCNBUF_GETDATA(lpScanBuffer),28);
}
}
SCAN_DeallocateBuffer(lpScanBuffer);
}
state = FALSE;
SCAN_SetSoftTrigger(hScanner, &state);
}
else
{
MessageBox( GetActiveWindow(), L"Error en SCAN_Enable", L"Ok", 0 );
}
}
else
{
MessageBox( GetActiveWindow(), L"Error en SCAN_Open", L"Ok", 0 );
}

}


HB_FUNC (STILLRUN)
{
HWND hWnd;
BOOL lRet = FALSE;
LPWSTR pW = AnsiToWide( hb_parc( 1 ) );
hWnd = FindWindow ( NULL,pW);
if (hWnd)
{
SetForegroundWindow ((HWND) ((ULONG) hWnd |0x01));
lRet = TRUE;
}
hb_retl( lRet );

}

HB_FUNC (BATTERYLIFE)
{
BOOL iRet;
SYSTEM_POWER_STATUS_EX status;
iRet = GetSystemPowerStatusEx (&status, TRUE);

hb_retnl ((INT) status.BatteryLifePercent);
}

HB_FUNC (BATTERYINFO)

{
BOOL iRet;
SYSTEM_POWER_STATUS_EX status;
iRet = GetSystemPowerStatusEx (&status, TRUE);

hb_reta (9);
hb_stornl ((INT) status.ACLineStatus, -1, 1);
hb_stornl ((INT) status.BatteryFlag, -1, 2);
hb_stornl ((INT) status.BatteryLifePercent, -1, 3);
hb_stornl ((ULONG) status.BatteryLifeTime, -1, 4);
hb_stornl ((ULONG) status.BatteryFullLifeTime, -1, 5);
hb_stornl ((INT) status.BackupBatteryFlag, -1, 6);
hb_stornl ((INT) status.BackupBatteryLifePercent, -1, 7);
hb_stornl ((ULONG) status.BackupBatteryLifeTime, -1, 8);
hb_stornl ((ULONG) status.BackupBatteryFullLifeTime, -1, 9);
}

#pragma ENDDUMP

FUNCTION create_tmp_file( aFields , cPath , cName )
* Begin
LOCAL temp
temp := cPath
temp := temp+cName
DbCreate( temp , aFields , "DBFNTX" )
RETURN temp
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Osvaldo,

gracias por la información :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
molivcov
Posts: 1
Joined: Sat Mar 31, 2007 7:04 pm
Location: Veracruz Veracruz
Contact:

Post by molivcov »

Estimado Osvaldo(o quien me pueda ayudar):

Fijate que tenemos una MC1000 y estoy revisando tu codigo, mi pregunta es, ese codigo para que lenguaje de programacion aplica?, y la segunda seria, como lo cargas a la MC1000?, mucho te agradeceria esa informacion, para poder echar a andar el equipo, ya que el demo que trae no permite exportar el archivo que genera.

Muchas Gracias:
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Miguel,

Es para FWPPC (www.fivetechsoft.com)
regards, saludos

Antonio Linares
www.fivetechsoft.com
ramirezosvaldo
Posts: 101
Joined: Mon Oct 10, 2005 6:48 pm
Location: Cd. Juarez Chihuahua
Contact:

Post by ramirezosvaldo »

Miguel

1.- Lenguage de programacion harbour para Pocket PC
( este te convierte a codigo de el cual se compila en VCE )
2.- Libreria para Graficos FiveWin para Pocket PC

Para Navegar desde tu pc el la memoria del la MC1000

3.- Bajar el SDK de Symbol para dicha terminal
(Desde luego instalarlos)

4.- Bajar el ActiveSync de Microsoft

5.- Conectar el cargador o cradle via USB a tu PC y lo reconoce

En tu PC, haces tus programas, compilas y generas los exe para luego copiarlos a tu terminal donde los vas a ejecutar

Lo que se me hico laborioso en la MC1000 es que se batalla para activar el menu de windows y el teclado numerico que trae no ayuda mucho.
Ya que esta terminal no es touch screen, si es batallar.

BEETPEM
( Bueno Eso Es Todo Por El Momento )
Saludos
Osvaldo Ramirez
mjdemonte
Posts: 2
Joined: Thu Apr 24, 2008 1:07 pm

Aplicación para MC1000 con uso de scanner

Post by mjdemonte »

Hola a todos, tengo que desarrollar una aplicación para una MC1000, en la cual mediante el uso del scanner se debe poder controlar el stock de un depósito, se debe almacenar la cantidad de cada artículo. Baje sl SMDK para MC1000m estuve viendo varios ejemplos en Embedded Visual C++, el problema es que no se por donde empezar y buscando en la Web accedí a este foro, en el cual hay un ejemplo enviado por ramirezosvaldo, el el cual se hace uso del scanner y maneja DBfs (yo programa en Visual FoxPro). Lo que necesitaría es que me comentén el software que tengo que bajar para probar el código que envió ramirezosvaldo.

Yo tengo instalado lo siguiente:
ActiveSync 4.2

Embedded Visual C 4.0 y SP4

Windows CE Platform SDK for MC1000c42

Symbol Mobility Developer Kit (SMDK) for Embedded Visual 4.0 (eVC4) (SMDK-C-1.04.02)

Conecté la MC1000 a mi PC, copie un ejemplo y lo ejecuté.

Espero su ayuda, desde ya muchas gracias.
Saludos.
Mauricio.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Mauricio,

Necesitas FWPPC que es un producto comercial de FiveTech Software y que puedes comprar desde www.fivetechsoft.com sección pedidos, gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
mjdemonte
Posts: 2
Joined: Thu Apr 24, 2008 1:07 pm

Post by mjdemonte »

Antonio, gracias por responder, bajé una demo del FWPPC para probarlo, ¿Solamente eso necesito? ¿Se pueden usar las librerias de C que vienen en el Software de la MC1000?

Espero tus comentarios.
Muchas Gracias.
Saludos.
Mauricio.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Mauricio,

No hay versión demo de FWPPC. Te refieres a un EXE ya construido ?

Si, puedes añadirle cualquier fichero en C (ó librerías ya construidas) y hasta en C++. Solo necesitas FWPPC y empiezas a construir aplicaciones :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply