Página 1 de 1

Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 12 Ago 2010 14:12
por asimoes
Senhores,

Compartilho com vocês o sistema que eu fiz para impressão na impressora térmica Bematech USB por DLL.
Biblioteca: HWGUI com MinGW

Qualquer melhoria por favor publiquem aqui.

API.BAT

Código: Selecionar todos

@echo off
set path=%path%;d:\harbourx\mingw\bin
SET HB_COMPILER=mingw
HBMK2 IMPBEMA.HBM 
pause
IMPBEMA.HBM:

Código: Selecionar todos

# ---------------------------
# Nome do Executavel
# ---------------------------
-oimpbema
# ---------------------------
# Bibliotecas
# ---------------------------
-lhwgui
-lprocmisc
-lhbct
-lhbnf
-lhbwin
# ---------------------------
# Caminho dos Includes
# ---------------------------
-incpath=d:\harbourx\mingw\include;d:\harbourx\hwgui\include
# ---------------------------
# Caminho das Libs da HwGui
# ---------------------------
-LD:\Harbourx\mingw\lib
# ---------------------------
# Outros Parametros
# ---------------------------
-workdir=.\obj\
-gtgui
-head=full
-n
-w
-nowarn
-inc
#-st
#-b
#-run
# ---------------------------
# Prg(s) e Rc(s)
# ---------------------------
impbema
impbema.rc
Fonte IMPBEMA.PRG

Código: Selecionar todos

/*
PROGFRAMA : IMPRESSÃO DE ARQUIVOS TEXTOS PARA IMPRESSORAS BEMATECH MP-4000 TH USB POR DLL (IMPBEMA.EXE)
AUTOR     : ALEXANDRE SIMÕES
COMPILADOR: HARBOUR - MINGW
BIBLIOTECA: HWGUI
CRIADO EM : JANEIRO/2010
*/

#include "Inkey.ch"
#include "hwgui.ch"
#include "common.ch"
#include "hbdyn.ch"
#include "simpleio.ch"
#include "hbgtinfo.ch"
#include "hbcompat.ch"


//STATIC oMainWindow

FUNCTION Main

LOCAL   lTermica  := .T., oFont
LOCAL   oPrint    := HIcon() :AddResource("ICON_BEMA")
LOCAL   oTrayMenu

MEMVAR->cPrint     := GetDefaultPrinter()
MEMVAR->sPorta     := 'USB'
MEMVAR->CR_LF      := CHR(13)+CHR(10)    
MEMVAR->oVermelho  := HIcon() :AddResource("ICON_VERMELHO")
MEMVAR->oAmarelo   := HIcon() :AddResource("ICON_AMARELO")
MEMVAR->oVerde     := HIcon() :AddResource("ICON_VERDE")
MEMVAR->oDlgHabla  := Nil
MEMVAR->oTimer     := Nil
MEMVAR->oMainWindow:=Nil


SET EXCLUSIVE OFF
SET AUTOPEN OFF
SET DATE BRITI
SET CENTURY ON
SET OPTIMIZE ON
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST DBFCDX
HB_LANGSELECT("PT")
HB_CDPSELECT( "PT850" )

   PREPARE FONT oFont NAME "Arial" WIDTH 0 HEIGHT -17 CHARSET 4
   
   MEMVAR->nHandleDLL:=hb_LibLoad("MP2032.DLL")
   
   DO WHILE StatusImp() = 0
      IF MsgSimNao('Tentar Conexão Com a Impressora?')
         LOOP
      ELSE
         Info('Entre em contato com o HelpDesk. (ramal 3964)'+CR_LF+;
              'Informe que há falha de comunicação com a impressora.')
         Liberar() 
      ENDIF
   ENDDO    

   IF ( MEMVAR->hWnd := Hwg_FindWindow( MEMVAR->oMainWindow,"Impressão Bematech "+MEMVAR->sPorta) ) != 0
      Hwg_SetForegroundWindow( MEMVAR->hWnd )
      RETURN Nil
   ENDIF

   INIT WINDOW MEMVAR->oMainWindow MAIN ICON oPrint TITLE "Impressão Bematech USB" FONT oFont

   CONTEXT MENU oTrayMenu
      MENUITEM "Status da Impressora" ACTION {||StatusImp()}
      MENUITEM "Testar Impressão"     ACTION {||TestarImpressao()}
      SEPARATOR
      //MENUITEM "Sobre"                ACTION {||Sobre()}
      MENUITEM "Sair"                 ACTION {||Sair()}
   ENDMENU
   
   Liga_Timer(MEMVAR->oMainWindow,.T.)
   
   MEMVAR->oMainWindow:InitTray(oPrint,,oTrayMenu,"Impressão Bematech USB")

   ACTIVATE WINDOW MEMVAR->oMainWindow NOSHOW
  
   oTrayMenu:End()

RETURN Nil

FUNCTION Sair
MEMVAR oMainWindow
   Liga_Timer(oMainWindow,.F.)   
   oMainWindow:oTimer:End()   
   IF MsgNoYes("Deseja Realmente Sair do Programa ?","Aviso do Sistema")
      Liberar()
   ELSE
      Liga_Timer(oMainWindow,.T.)
      RETURN Nil
   ENDIF
RETURN Nil

FUNCTION Sobre
LOCAL  oSplash  
MEMVAR oMainWindow   
   Liga_Timer(oMainWindow,.F.)
   SPLASH oSplash TO "SOBRE.BMP" TIME 5000
   Liga_Timer(oMainWindow,.T.)
RETURN Nil

FUNCTION Imp_Raw
LOCAL nRet, cArq, cMsg
MEMVAR cPrint, oMainWindow
   Liga_Timer(oMainWindow,.F.)
   IF FILE("C:\TEMP\ITBI.TXT")
      cArq := "C:\TEMP\ITBI.TXT" 
      nRet := PrintFileRaw(cPrint,cArq,'Recibo ITBI')
      IF nRet < 1
         cMsg := 'Erro Imprimindo: '
         Switch nRet
         Case -1
            cMsg += "Invalid parameters passed to FUNCTION" ; Exit
         Case -2
            cMsg += "WinAPI OpenPrinter() call failed"      ; Exit
         Case -3
            cMsg += "WinAPI StartDocPrinter() call failed"  ; Exit
         Case -4
            cMsg += "WinAPI StartPagePrinter() call failed" ; Exit
         Case -5
            cMsg += "WinAPI malloc() of memory failed"      ; Exit
         Case -6
            cMsg += "Arquivo " + cArq + " não LOCALIZADO"   ; Exit
         End
         Exclama(cMsg)
      ENDIF
      FERASE("C:\TEMP\ITBI.TXT")
   ENDIF
   Liga_Timer(oMainWindow,.T.)
RETURN Nil

FUNCTION Imp_Termica
STATIC nIcon
LOCAL  nLinha:=0, nStatus, lFalha:=.F., lMostra:=.F., oErro, cImagem, cLinha
MEMVAR CR_LF
MEMVAR oVerde, oAmarelo, oVermelho
MEMVAR nHandleDLL, oMainWindow
   IF nIcon = Nil
      nIcon:=1
   ENDIF

   Liga_Timer(oMainWindow,.F.)
   nIcon := IF(nIcon > 3, 1, nIcon)
   Muda_Icone(IF(nIcon=1,oVerde,IF(nIcon=2,oAmarelo,oVermelho)))
   nIcon++ 	
   INKEY(0.05)
   IF FILE("EMERGENCIA")
      Liberar()
   ENDIF
   IF FILE("C:\TEMP\ITBI.TXT")
      TRY
         cImagem:='LOGOSMF.BMP'
         nStatus:=hb_dynCall( { "ImprimeBitmap", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cImagem,0)
         FT_FUSE( "C:\TEMP\ITBI.TXT" )
         DO WHILE ! FT_FEOF()
            nLinha++
            cLinha:=SPACE(4)+FT_FREADLN()+CR_LF
            nStatus:=hb_dynCall( { "FormataTX", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cLinha,2, 0, 0, 0, 0)
            IF nStatus = 0
               nStatus:=ExibeStatusImpressora()
               IF nStatus = 0 .OR. nStatus = 9 .OR. nStatus = 32
                  lFalha:=.T.
                  EXIT
               ENDIF 
            ENDIF
            FT_FSKIP()
         ENDDO      
         FT_FUSE()
         IF !lFalha
            nStatus:=hb_dynCall( { "AcionaGuilhotina", nHandleDLL,HB_DYN_CALLCONV_STDCALL},1)
            IF nStatus = 0
               ExibeStatusImpressora()
            ENDIF 
         ENDIF 
      CATCH oErro
         FT_FUSE()
         FERASE("C:\TEMP\ITBI.TXT")      
      FINALLY   
         FERASE("C:\TEMP\ITBI.TXT")
      END 
   ENDIF
   Liga_Timer(oMainWindow,.T.)
RETURN Nil

FUNCTION Liberar
MEMVAR nHandleDLL
   hb_LibFree(nHandleDLL)
   EndWindow()  
   ExitProcess()
RETURN Nil

FUNCTION Liga_Timer(oJanela,lLiga)
MEMVAR oTimer
   IF lLiga
      SET TIMER oTimer of oJanela VALUE 1000 ACTION {|| Imp_Termica() }
   ELSE
      oJanela:oTimer:End()   
   ENDIF
RETURN Nil

FUNCTION MsgNaoSim(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgNoYes(cMensagem,cTitulo)

FUNCTION MsgSimNao(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgYesNo(cMensagem,cTitulo)

FUNCTION Info(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgInfo(cMensagem,cTitulo)

FUNCTION Pare(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgStop(cMensagem,cTitulo)

FUNCTION Exclama(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgExclamation(cMensagem,cTitulo)

FUNCTION MsgProc( cMsg, cTitulo, cEvento )
LOCAL   oFonte := HFont():Add( "New Courier" , 0 ,-15,100,255 )
LOCAL   oSay
MEMVAR  oDlgHabla, hWnd

DEFAULT cTitulo TO "Processando",;
        cMsg    TO "Aguarde, em Processamento.",;
        cEvento TO "INICIO"

   DO CASE
   CASE cEvento == "INICIO"
      INIT DIALOG oDlgHabla       ;
      TITLE cTitulo ;
      SIZE 485, 80                ;
      STYLE DS_CENTER + WS_VISIBLE
      @ 0, 20  Say oSay Caption cMsg Of oDlgHabla SIZE 465, 20 STYLE SS_CENTER FONT oFonte COLOR "N/W"
      ACTIVATE DIALOG oDlgHabla NOMODAL
      hwg_SetForegroundWindow(hWnd)
   CASE cEvento == "TROCA"   
      oDlgHabla:aControls[1]:SetText(cMsg)   
   CASE cEvento == "FIM"
      oDlgHabla:Close()
   ENDCASE
RETURN .T.

FUNCTION ExibeStatusImpressora
LOCAL  cMensagem:="", cMensAcao:="", nStatus
MEMVAR CR_LF
MEMVAR nHandleDLL
   nStatus:=hb_dynCall( { "Le_Status", nHandleDLL,HB_DYN_CALLCONV_STDCALL})
   DO CASE
   CASE nStatus = 0
      cMensagem+='Status da impressora: Desligada ou Cabo Desconectado.              '+CR_LF+;
    	           'O Recibo não será  impresso.                                       ' 	    	      	              
      cMensAcao:='Ação: Ligue a Impressora ou Verifique o Cabo ou Reinicie o Programa'
   CASE nStatus = 4
      cMensagem+='Status da impressora: Pouco Papel e Off-Line.' 	    	
      cMensAcao:='Ação: Verifique o Nível de Papel e;          '+CR_LF+;
                 'Coloque a Impressora em On-Line              '
   CASE nStatus = 5
      cMensagem+='Status da impressora: Pouco Papel e On-Line.' 	    	
      cMensAcao:='Ação: Verifique o Nível de Papel            '
   CASE nStatus = 9
      cMensagem+='Status da impressora: Tampa Aberta.'+CR_LF+;
    	           'O Recibo não será impresso.        '
      cMensAcao:='Ação: Feche a Tampa                '
   CASE nStatus = 32
     	cMensagem+='Status da impressora: Sem Papel.   '+CR_LF+;
    	           'O Recibo não será  impresso.       '     	
      cMensAcao:='Ação: Coloque Papel                '
   ENDCASE 
   IF !EMPTY(cMensagem)
      Info('Problemas durante a impressão do recibo.' + CR_LF +;
           'A impressora retornou o seguinte alerta:' + CR_LF + CR_LF +;
           cMensagem                                  + CR_LF + CR_LF +;
           cMensAcao)
   ENDIF
RETURN nStatus

FUNCTION VerificaStatusImpressora
MEMVAR sPorta, CR_LF, nHandleDLL
LOCAL nStatus:=hb_dynCall( { "IniciaPorta", nHandleDLL,HB_DYN_CALLCONV_STDCALL},sPorta)
   IF nStatus = 0
      Pare('Houve uma falha ao tentar estabelecer comunicação ' +;
           'com a porta '+sPorta+' (Bematech). '                +CR_LF+;
           'O Recibo não será  impresso! Verifique com o HelpDesk. (ramal 3964)','Atenção')
   ENDIF 	
RETURN nStatus

FUNCTION TestarImpressao
LOCAL  nStatus, I, L,  cLinha:="", cImagem
MEMVAR CR_LF, nHandleDLL   

   cLinha+=REPLIC("*",49)                                     +CR_LF
   cLinha+="TESTE DE IMPRESSÃO TESTE DE IMPRESSÃO TESTE DE IM"+CR_LF
   cLinha+="TESTE DE IMPRESSÃO TESTE DE IMPRESSÃO TESTE DE IM"+CR_LF
   cLinha+="TESTE DE IMPRESSÃO TESTE DE IMPRESSÃO TESTE DE IM"+CR_LF
   cLinha+="TESTE DE IMPRESSÃO TESTE DE IMPRESSÃO TESTE DE IM"+CR_LF
   cLinha+="TESTE DE IMPRESSÃO TESTE DE IMPRESSÃO TESTE DE IM"+CR_LF
   cLinha+="TESTE DE IMPRESSÃO TESTE DE IMPRESSÃO TESTE DE IM"+CR_LF   
   cLinha+=REPLIC("*",49)                                     +CR_LF
   cLinha+=CR_LF   
   cLinha+=CR_LF      
   nStatus:=hb_dynCall( { "FormataTX", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cLinha,2, 0, 0, 0, 0)
   IF nStatus = 0
      ExibeStatusImpressora()
   ENDIF
   cCodigo  := 'abc-123'
   nStatus:=hb_dynCall( { "ImprimeCodigoBarrasCODE39", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cCodigo)
   IF nStatus = 0
      ExibeStatusImpressora()
   ENDIF
   nStatus:=hb_dynCall( { "AcionaGuilhotina", nHandleDLL,HB_DYN_CALLCONV_STDCALL},1)
   IF nStatus = 0
      ExibeStatusImpressora()
   ENDIF
RETURN Nil

FUNCTION StatusImp(lInicio)
LOCAL  nStatus, cMensagem:='', cMensAcao:=''
MEMVAR sPorta, CR_LF, nHandleDLL
   nStatus:=hb_dynCall( { "IniciaPorta", nHandleDLL,HB_DYN_CALLCONV_STDCALL},sPorta)   
   IF nStatus = 0
   	  cMensagem:='Falha de comunicação com a Impressora '+sPorta+' Bematech'
   ENDIF 
   IF nStatus <> 0 
   	  cMensagem:='Impressora '+sPorta+' Bematech iniciada com sucesso.'+CR_LF+CR_LF
      nStatus:=hb_dynCall( { "AjustaLarguraPapel", nHandleDLL, HB_DYN_CALLCONV_STDCALL},76)               
   	  nStatus:=hb_dynCall( { "Le_Status", nHandleDLL, HB_DYN_CALLCONV_STDCALL})
      DO CASE
      CASE nStatus = 0
      	cMensagem+='Status da impressora: Desligada ou Cabo Desconectado.'+CR_LF+;
      	           'O Recibo não será  impresso.                          ' 	    	      	              
        cMensAcao:='Ação: Ligue a Impressora/Verifique o Cabo             '
 	    CASE nStatus = 5
      	cMensagem+='Status da impressora: Pouco Papel.' 	    	
        cMensAcao:='Ação: Verifique Nível de Papel    '
      CASE nStatus = 9
      	cMensagem+='Status da impressora: Tampa Aberta.'+CR_LF+;
      	           'O Recibo não será  impresso.        ' 	    	      	              
        cMensAcao:='Ação: Feche a Tampa                 '
 	    CASE nStatus = 32
      	cMensagem+='Status da impressora: Sem Papel.'+CR_LF+;
      	           'O Recibo não será  impresso.     ' 	    	
        cMensAcao:='Ação: Coloque Papel              '
      ENDCASE 
   ENDIF 	
   Info(cMensagem+IF(!EMPTY(cMensAcao),CR_LF+CR_LF+cMensAcao,''))
RETURN nStatus

FUNCTION Muda_Icone(oIconeX, cTexto)
LOCAL oIcon := oIconeX //HIcon():addResource( "ICON_CLOCK" ) // icone que está no resource mas pode usar ADDFILE tmb.
MEMVAR oMainWindow   
   ShellModifyIcon( oMainWindow:handle, oIcon:handle)
   oMainWindow:Refresh()
RETURN Nil

#pragma BEGINDUMP

#define _WIN32_IE      0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT   0x0400
#include <shlobj.h>
#include <windows.h>
#include <commctrl.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( SHOWERROR )

{
   LPVOID lpMsgBuf;
   DWORD dwError  = GetLastError();

   FormatMessage( 
      FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,
      dwError,
      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
      (LPTSTR) &lpMsgBuf,
      0,
      NULL 
   );
   
   MessageBox(NULL, (LPCSTR)lpMsgBuf, "Shutdown", MB_OK | MB_ICONEXCLAMATION);
   // Free the buffer.
   LocalFree( lpMsgBuf );
}

HB_FUNC( ENABLEPERMISSIONS )

{
   LUID tmpLuid;
   TOKEN_PRIVILEGES tkp, tkpNewButIgnored;
   DWORD lBufferNeeded;
   HANDLE hdlTokenHandle;
   HANDLE hdlProcessHandle = GetCurrentProcess();

   OpenProcessToken(hdlProcessHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hdlTokenHandle);

   LookupPrivilegeValue(NULL, "SeShutdownPrivilege", &tmpLuid);

   tkp.PrivilegeCount            = 1;
   tkp.Privileges[0].Luid        = tmpLuid;
   tkp.Privileges[0].Attributes  = SE_PRIVILEGE_ENABLED;

   AdjustTokenPrivileges(hdlTokenHandle, FALSE, &tkp, sizeof(tkpNewButIgnored), &tkpNewButIgnored, &lBufferNeeded);
}

HB_FUNC( EXITWINDOWSEX )

{
   hb_retl( ExitWindowsEx( (UINT) hb_parni( 1 ), (DWORD) hb_parnl( 2 ) ) );
}

/*HB_FUNC( GETPRIVATEPROFILESTRING )
{
   TCHAR bBuffer[ 1024 ] = { 0 };
   DWORD dwLen ;
   char * lpSection = hb_parc( 1 );
   char * lpEntry = ISCHAR(2) ? hb_parc( 2 ) : NULL ;
   char * lpDefault = hb_parc( 3 );
   char * lpFileName = hb_parc( 4 );
   dwLen = GetPrivateProfileString( lpSection , lpEntry ,lpDefault , bBuffer, sizeof( bBuffer ) , lpFileName);
   if( dwLen )
     hb_retclen( ( char * ) bBuffer, dwLen );
   else
      hb_retc( lpDefault );
} */

/*HB_FUNC( WRITEPRIVATEPROFILESTRING )
{
   char * lpSection = hb_parc( 1 );
   char * lpEntry = ISCHAR(2) ? hb_parc( 2 ) : NULL ;
   char * lpData = ISCHAR(3) ? hb_parc( 3 ) : NULL ;
   char * lpFileName= hb_parc( 4 );

   if ( WritePrivateProfileString( lpSection , lpEntry , lpData , lpFileName ) )
      hb_retl( TRUE ) ;
   else
      hb_retl(FALSE);
}*/

/*HB_FUNC( GETWINDOWTEXT )
{
   HWND hWnd   = ( HWND ) hb_parnl( 1 );
   int iLen    = GetWindowTextLength( hWnd );
   LPSTR pText;

   if( iLen > 0 )
   {
      pText = hb_xgrab( iLen + 1 );
      GetWindowText( hWnd, pText, iLen + 1 );
      hb_retclen( pText, iLen );
      hb_xfree( pText );
   }
   else
      hb_retc( "" );
}*/

HB_FUNC( LOADTRAYICON )
{
	HICON himage;
	HINSTANCE hInstance  = (HINSTANCE) hb_parnl(1);  // handle to application instance
	LPCTSTR   lpIconName = (LPCTSTR)   hb_parc(2);   // name string or resource identifier

	himage = (HICON) LoadImage( hInstance ,  lpIconName , IMAGE_ICON, 16, 16, LR_SHARED ) ;

	if (himage==NULL)
	{
		himage = (HICON) LoadImage( hInstance , lpIconName , IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE ) ;
	}

	hb_retnl ( (LONG) himage );
}

HB_FUNC( LOADMAINICON )
{
	HICON himage;
	HINSTANCE hInstance  = (HINSTANCE) hb_parnl(1);  // handle to application instance
	LPCTSTR   lpIconName = (LPCTSTR)   hb_parc(2);   // name string or resource identifier

	himage = (HICON) LoadImage( hInstance , lpIconName , IMAGE_ICON, 0, 0, LR_DEFAULTSIZE ) ;

	if (himage==NULL)
	{
		himage = (HICON) LoadImage( hInstance , lpIconName , IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE ) ;
	}

	hb_retnl ( (LONG) himage );
} 

static HWND GetStartButton(void);


static void ShowNotifyInfo(HWND hWnd, BOOL bAdd, HICON hIcon, LPSTR szText, LPSTR szInfo, LPSTR szInfoTitle);

HB_FUNC ( SHOWNOTIFYINFO )
{
	ShowNotifyInfo( (HWND) hb_parnl(1), (BOOL) hb_parl(2), (HICON) hb_parnl(3), (LPSTR) hb_parc(4), 
			(LPSTR) hb_parc(5), (LPSTR) hb_parc(6) );
}

static void ShowNotifyInfo(HWND hWnd, BOOL bAdd, HICON hIcon, LPSTR szText, LPSTR szInfo, LPSTR szInfoTitle)
{
	NOTIFYICONDATA nid;

	ZeroMemory( &nid, sizeof(nid) );

	nid.cbSize		= sizeof(NOTIFYICONDATA);
	nid.hIcon		= hIcon;
	nid.hWnd		= hWnd;
	nid.uID			= 0;
	nid.uFlags		= NIF_INFO | NIF_TIP | NIF_ICON;
	nid.dwInfoFlags		= NIIF_INFO;

	lstrcpy( nid.szTip, TEXT(szText) );
	lstrcpy( nid.szInfo, TEXT(szInfo) );
	lstrcpy( nid.szInfoTitle, TEXT(szInfoTitle) );

	if(bAdd)
		Shell_NotifyIcon( NIM_ADD, &nid );
	else
		Shell_NotifyIcon( NIM_DELETE, &nid );

	if(hIcon)
		DestroyIcon( hIcon );
} 

HB_FUNC ( SETSTARTBUTTONIMAGE )
{
	HWND hButton = GetStartButton();
	HDC  hDCButton = GetDC(hButton);
	HDC  hDcCompatibleButton;
	RECT rc;
	int  nWidth, nHeight;

	HBITMAP hBitmap, hBitmapOld;
	BITMAP bitmap;

	GetWindowRect(hButton, &rc);
	nWidth = rc.right - rc.left;
	nHeight = rc.bottom - rc.top;

	hDcCompatibleButton = CreateCompatibleDC(hDCButton);

	hBitmap = (HBITMAP)LoadImage (NULL, hb_parc(1), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

	hBitmapOld = (HBITMAP)SelectObject(hDcCompatibleButton, hBitmap);
	GetObject(hBitmap, sizeof(BITMAP), &bitmap);

	if (nWidth > bitmap.bmWidth - 3 && nWidth < bitmap.bmWidth + 3 && nHeight > bitmap.bmHeight - 3 && nHeight < bitmap.bmHeight + 3)
		BitBlt(hDCButton, 0, 0, nWidth, nHeight, hDcCompatibleButton, 0, 0, SRCCOPY);
	else
		StretchBlt(hDCButton, 0, 0, nWidth, nHeight, hDcCompatibleButton, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);

	SelectObject(hDcCompatibleButton, hBitmapOld);

	DeleteDC(hDcCompatibleButton);
	DeleteDC(hDCButton);
	DeleteObject(hBitmap);
} 

static HWND GetStartButton()
{
	static HWND hKnownButton=0;
	HWND hTaskBar, hButton;

	hTaskBar = FindWindow( "Shell_TrayWnd", NULL );
	hButton = GetWindow( hTaskBar, GW_CHILD );

	if (hButton)
		hKnownButton = hButton;
	else
		hButton = hKnownButton;

	return hButton;
}

HB_FUNC( GETKEYBOARDMODE )
{
	HKL kbl;
	HWND CurApp;
	DWORD idthd;
	int newmode;

	CurApp=GetForegroundWindow();
	idthd=GetWindowThreadProcessId(CurApp,NULL);
	kbl=GetKeyboardLayout(idthd);
	newmode=(int)LOWORD(kbl);
	hb_retnl(newmode);
}

#pragma ENDDUMP 


/*#pragma BEGINDUMP

#define _WIN32_IE      0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT   0x0400
#include <shlobj.h>

#include <windows.h>
#include <commctrl.h>
#include "hbapi.h"
#include "hbapiitm.h"

static void ShowNotifyInfo(HWND hWnd, BOOL bAdd, HICON hIcon, LPSTR szText, LPSTR szInfo, LPSTR szInfoTitle);

HB_FUNC ( SHOWNOTIFYINFO )
{
	ShowNotifyInfo( (HWND) hb_parnl(1), (BOOL) hb_parl(2), (HICON) hb_parnl(3), (LPSTR) hb_parc(4), 
			(LPSTR) hb_parc(5), (LPSTR) hb_parc(6) );
}

static void ShowNotifyInfo(HWND hWnd, BOOL bAdd, HICON hIcon, LPSTR szText, LPSTR szInfo, LPSTR szInfoTitle)
{
	NOTIFYICONDATA nid;

	ZeroMemory( &nid, sizeof(nid) );

	nid.cbSize		= sizeof(NOTIFYICONDATA);
	nid.hIcon		= hIcon;
	nid.hWnd		= hWnd;
	nid.uID			= 0;
	nid.uFlags		= NIF_INFO | NIF_TIP | NIF_ICON;
	nid.dwInfoFlags		= NIIF_INFO;

	lstrcpy( nid.szTip, TEXT(szText) );
	lstrcpy( nid.szInfo, TEXT(szInfo) );
	lstrcpy( nid.szInfoTitle, TEXT(szInfoTitle) );

	if(bAdd)
		Shell_NotifyIcon( NIM_ADD, &nid );
	else
		Shell_NotifyIcon( NIM_DELETE, &nid );

	if(hIcon)
		DestroyIcon( hIcon );
}

HB_FUNC (LOADTRAYICON)
{

	HICON himage;
	HINSTANCE hInstance  = (HINSTANCE) hb_parnl(1);  // handle to application instance
	LPCTSTR   lpIconName = (LPCTSTR)   hb_parc(2);   // name string or resource identifier

	himage = (HICON) LoadImage( hInstance ,  lpIconName , IMAGE_ICON, 16, 16, LR_SHARED ) ;

	if (himage==NULL)
	{
		himage = (HICON) LoadImage( hInstance ,  lpIconName , IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE ) ;
	}

	hb_retnl ( (LONG) himage );

}

HB_FUNC (LOADMAINICON)
{

	HICON himage;
	HINSTANCE hInstance  = (HINSTANCE) hb_parnl(1);  // handle to application instance
	LPCTSTR   lpIconName = (LPCTSTR)   hb_parc(2);   // name string or resource identifier

	himage = (HICON) LoadImage( hInstance ,  lpIconName , IMAGE_ICON, 0, 0, LR_DEFAULTSIZE ) ;

	if (himage==NULL)
	{
		himage = (HICON) LoadImage( hInstance ,  lpIconName , IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE ) ;
	}

	hb_retnl ( (LONG) himage );

}

#pragma ENDDUMP */

Re: Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 12 Ago 2010 21:19
por fladimir
Parabéns colega, agradecemos a contribuição e desejamos ....

... Sucesso!!!!

:)Pos

Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 06 Dez 2016 18:28
por fladimir
no caso... esta função GETPRIVATEPROFILESTRING

Qdo compilo apresenta várias warnings...

Do tipo...

Código: Selecionar todos

warning: implicit declaration of funciton 'ischar' [-Winplicit-function-declaration]
         
char * lpEntry = ischar( 2 ) ? hb_parc(2) : NULL;
                 ^ 
Já troquei por HB_ISCHAR
HB_ISCHARACTER

Já coloquei antes da função
#define ISCHAR( n ) HB_ISCHAR( n ) // etc etc

todos dão a mesma mensagem.

Alguém saberia o q pode ser?

Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 06 Dez 2016 19:30
por asimoes
Fladimir,

O correto é HB_ISCHAR

Você tá usando: ?

Código: Selecionar todos

#include "hbapi.h"
#include "hbapiitm.h"

Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 06 Dez 2016 19:34
por asimoes
No arquivo hbapi.h

Código: Selecionar todos

#define HB_ISCHAR( n )        ( hb_param( n, HB_IT_STRING ) != NULL )

Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 06 Dez 2016 21:02
por fladimir
Vlw Alexandre....

Gerou o EXE com Warnings... mas gerou... não sei se vai afetar vou testar...

Segue código:

Código: Selecionar todos

#pragma BEGINDUMP
	#define _WIN32_IE      0x0500
	#define HB_OS_WIN_32_USED
	//#define _WIN32_WINNT   0x0400
	#include <windows.h>
	#include "hbapi.h"
	#include "hbapiitm.h"
	
	#if !defined( HB_ISNIL )
	   #define HB_ISNIL( n )   ISNIL( n )
	   #define HB_ISCHAR( n )  ISCHAR( n )
	#endif
	
	HB_FUNC( SYG_GETPRIVATEPROFILESTRING )
	{
	   //TCHAR bBuffer[ 1024 ] = { 0 };
	   TCHAR bBuffer[ 5024 ] = { 0 };
	   DWORD dwLen ;
	   char * lpSection  = hb_parc( 1 );
	   char * lpEntry    = HB_ISCHAR(2) ? hb_parc( 2 ) : NULL ;
	   char * lpDefault  = hb_parc( 3 );
	   char * lpFileName = hb_parc( 4 );
	   dwLen = GetPrivateProfileString( lpSection , lpEntry ,lpDefault , bBuffer, sizeof( bBuffer ) , lpFileName);
	   if( dwLen )
	     hb_retclen( ( char * ) bBuffer, dwLen );
	   else
	      hb_retc( lpDefault );
	}

	HB_FUNC( SYG_WRITEPRIVATEPROFILESTRING )
	{
	   char * lpSection = hb_parc( 1 );
	   char * lpEntry = HB_ISCHAR(2) ? hb_parc( 2 ) : NULL ;
	   char * lpData = HB_ISCHAR(3) ? hb_parc( 3 ) : NULL ;
	   char * lpFileName= hb_parc( 4 );
	
	   if ( WritePrivateProfileString( lpSection , lpEntry , lpData , lpFileName ) )
	      hb_retl( TRUE ) ;
	   else
	      hb_retl(FALSE);
	}	
#pragma ENDDUMP

Warnings:

Código: Selecionar todos

In file included from HBNFe.prg:9381:0:
D:/DEV/HB34/include/hbapi.h:226:31: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 #define HB_ISCHAR( n )        ( hb_param( n, HB_IT_STRING ) != NULL )
                               ^
HBNFe.prg:9408:22: note: in expansion of macro 'HB_ISCHAR'
D:/DEV/HB34/include/hbapi.h:226:31: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 #define HB_ISCHAR( n )        ( hb_param( n, HB_IT_STRING ) != NULL )
                               ^
HBNFe.prg:9409:21: note: in expansion of macro 'HB_ISCHAR'
HBNFe.prg:9410:24: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
hbmk2: Linkando...

Exemplo de Uso Impressora Térmica Bematech MP-4000 TH

Enviado: 07 Dez 2016 00:56
por Claudio Soto
fladimir escreveu:Vlw Alexandre....

Gerou o EXE com Warnings... mas gerou... não sei se vai afetar vou testar...

Segue código:

Código: Selecionar todos

#pragma BEGINDUMP
	#define _WIN32_IE      0x0500
	#define HB_OS_WIN_32_USED
	//#define _WIN32_WINNT   0x0400
	#include <windows.h>
	#include "hbapi.h"
	#include "hbapiitm.h"
	
	#if !defined( HB_ISNIL )
	   #define HB_ISNIL( n )   ISNIL( n )
	   #define HB_ISCHAR( n )  ISCHAR( n )
	#endif
	
	HB_FUNC( SYG_GETPRIVATEPROFILESTRING )
	{
	   //TCHAR bBuffer[ 1024 ] = { 0 };
	   TCHAR bBuffer[ 5024 ] = { 0 };
	   DWORD dwLen ;
	   char * lpSection  = hb_parc( 1 );
	   char * lpEntry    = HB_ISCHAR(2) ? hb_parc( 2 ) : NULL ;
	   char * lpDefault  = hb_parc( 3 );
	   char * lpFileName = hb_parc( 4 );
	   dwLen = GetPrivateProfileString( lpSection , lpEntry ,lpDefault , bBuffer, sizeof( bBuffer ) , lpFileName);
	   if( dwLen )
	     hb_retclen( ( char * ) bBuffer, dwLen );
	   else
	      hb_retc( lpDefault );
	}

	HB_FUNC( SYG_WRITEPRIVATEPROFILESTRING )
	{
	   char * lpSection = hb_parc( 1 );
	   char * lpEntry = HB_ISCHAR(2) ? hb_parc( 2 ) : NULL ;
	   char * lpData = HB_ISCHAR(3) ? hb_parc( 3 ) : NULL ;
	   char * lpFileName= hb_parc( 4 );
	
	   if ( WritePrivateProfileString( lpSection , lpEntry , lpData , lpFileName ) )
	      hb_retl( TRUE ) ;
	   else
	      hb_retl(FALSE);
	}	
#pragma ENDDUMP

Warnings:

Código: Selecionar todos

In file included from HBNFe.prg:9381:0:
D:/DEV/HB34/include/hbapi.h:226:31: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 #define HB_ISCHAR( n )        ( hb_param( n, HB_IT_STRING ) != NULL )
                               ^
HBNFe.prg:9408:22: note: in expansion of macro 'HB_ISCHAR'
D:/DEV/HB34/include/hbapi.h:226:31: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 #define HB_ISCHAR( n )        ( hb_param( n, HB_IT_STRING ) != NULL )
                               ^
HBNFe.prg:9409:21: note: in expansion of macro 'HB_ISCHAR'
HBNFe.prg:9410:24: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
hbmk2: Linkando...
Para eliminar las advertencias poner delante de cada hb_parc,
(char *) hb_parc