Codigo exemplo de Modulo de PDV
Enviado: 30 Jun 2005 20:11
Amiguinhos
Disponibilizo codigo completo de um modulo de PDV, ou seja, o .PDG principal esta completo.
Nele esta exemplificado o trabalho do controle TWBROWSE e de como capturar teclas de função desde F1 até F9.
As teclas INSERT e DELETE e os botões funcionam perfeitamente.
A melhoria fica por conta de voce no que tange abertura de base de dados, pesquisas em estoque, impressão do cupom, etc.
Esta bem básico e como aprendizado irá ser de grande valia.
Usei WorkShop, Blinker 7 e Fivewin 2.4.
Codigo fonte do sample01.prg
Codigo fonte do sample01.rc
@braços :?)
Disponibilizo codigo completo de um modulo de PDV, ou seja, o .PDG principal esta completo.
Nele esta exemplificado o trabalho do controle TWBROWSE e de como capturar teclas de função desde F1 até F9.
As teclas INSERT e DELETE e os botões funcionam perfeitamente.
A melhoria fica por conta de voce no que tange abertura de base de dados, pesquisas em estoque, impressão do cupom, etc.
Esta bem básico e como aprendizado irá ser de grande valia.
Usei WorkShop, Blinker 7 e Fivewin 2.4.
Codigo fonte do sample01.prg
Código: Selecionar todos
#include "FiveWin.ch"
#xcommand Column Header <(h)> of <oMG> ;
Init <i> ;
[Picture <p>] ;
[When <w>] ;
[Valid <v>] ;
[Fail <f>] ;
[action <for>] ;
[Align <a>] ;
[Size <s>] ;
[Like <(n)>] ;
=> AddColumn(<h>, <i>, [<p>], [<{w}>], [<{v}>], [<{f}>], [<s>], [<{for}>], [<a>], [<(n)>], <oMG>)
Function Main()
LOCAL aTotal:= {0,0,0, Nil, Nil, Nil}
LOCAL aDatos:= {} // Array MultiDimensional
LOCAL aLine := {0,"", 0, 0, 0, .t.} // Formato da linha
LOCAL aJust := {2, 2, .f., .t., .t., .t.} // Colunas justificadas
// Cod.Art. Descrip. Cantidad $Unitario $Total MarcaDeNuevo
LOCAL l3d:= .F.
LOCAL oDlg, cPic:= "@ze 999,999.99", oFont
LOCAL hBmp:= LoadBitmap( GetResources(), "triangle" ) // Dedicado a mi amigo Mario Goanzalez
PUBLIC oLbx
LoadLibrary( "bwcc.dll" )
DEFINE FONT oFont NAME "Times New Roman" SIZE 0,-15 BOLD
DEFINE FONT oFnt1 NAME "MS Sans Serif" SIZE 0, -12
DEFINE FONT oFnt2 NAME "Arial Black" SIZE 18, -36 // SIZE 5, -10
DEFINE FONT oFnt3 NAME "Arial Black" SIZE 8, -16 // SIZE 5, -10
ACTIVATE FONT oFont
ACTIVATE FONT oFnt1
ACTIVATE FONT oFnt2
ACTIVATE FONT oFnt3
DEFINE DIALOG oDlg RESOURCE "dlgPDV"
TWBrowse():lHScroll:= .F.
REDEFINE LISTBOX oLbx FIELDS "" ID 8000 ;
HEADER "","Codigo", "Descricao", "Quantidade", ;
"Unitario", "Total" ;
OF oDlg ;
SIZES 25,50, 250, 67,60,60
oLbx:bLine:= {|nAt| nAt:= oLbx:nAt, ;
If( Len(aDatos)<1 .or. nAt>Len(aDatos),;
Array(6), ;
{ If( oLbx!=Nil .and. oLbx:lSelect, hBmp, 0 ),;
If( aDatos[nAt,1]==0,Space(4),StrZero( aDatos[nAt,1], 4 ) ), ;
aDatos[nAt,2], ;
Transform( aDatos[nAt,3], cPic ), ;
Transform( aDatos[nAt,4], cPic ), ;
Transform( aDatos[nAt,5], cPic ) } ) }
oLbx:aJustify := aJust
oLbx:SetArray( aDatos )
//oLbx:SetCols( aLine, {"","Codigo", "Descricao", "Quantidade", "Unitario", "Total" }, {25,50, 250, 67,60,60} )
oLbx:lAdjLastCol := .f.
oLbx:lAutoEdit := .t.
oLbx:lAutoSkip := .t.
oLbx:nLineStyle := 2
oLbx:nHeaderStyle:= 2
oLbx:bKeyDown := {|nKey| Pressionei( nKey, aDatos, oLbx, aTotal, aLine ) }
oLbx:bBkColor := {|nRow,nCol,nStyle| ;
if( nStyle==1,if( nCol%2==0, CLR_RED , CLR_GREEN ),) }
oLbx:bTextColor := {|nRow,nCol,nStyle| ;
if( nStyle==1,if( nCol%2==0, CLR_YELLOW, CLR_WHITE ),) }
oLbx:bEdit := {|nCol, cBuffer, lFirstEdit|;
EditaCelda( oLbx, nCol, cBuffer, aDatos, lFirstEdit, aTotal ) }
/*
Column Header "Codigo" of oLbx ;
Init 0 Picture "9999" ;
Size 10
Column Header "Descricao" of oLbx ;
Init Space(30) ;
Picture "@!" ;
Size 150
Column Header "Quantidade" of oLbx;
Init 0.0 ;
Picture "999999" ;
Size 67
Column Header "Unitario" of oLbx ;
Init 0.0 ;
Picture "999,999.99" ;
Size 60
Column Header "Total" of oLbx ;
Init 0.0 ;
Picture "99,999,999.99" ;
Size 90 ;
action oLbx:Cantidad * oLbx:Unitario;
When .f.
*/
REDEFINE BTNBMP ID 8301 OF oDlg RESOURCE "bmp_plus" TOOLTIP "Adiciona mais itens ao orcamento" ;
ACTION ( NewReg( aDatos, oLbx ), oLbx:Edit() )
REDEFINE BTNBMP ID 8302 OF oDlg RESOURCE "bmp_minus" TOOLTIP "Exclui o registro atual" ;
ACTION If( Len(aDatos) > 0 .and. ;
oLbx:nAt <= Len(aDatos) .and. oLbx:nAt > 0 .and. ;
Alert("Exclui o registro atual ?",{"ok","Cancela"}) == 1, ;
DelReg( aDatos, oLbx, aTotal ),)
REDEFINE BTNBMP ID 8303 OF oDlg RESOURCE "bmp_editar" TOOLTIP "Altera dados do registro atual" ;
ACTION If( Len(aDatos) > 0 .and. ;
oLbx:nAt <= Len(aDatos) .and. oLbx:nAt > 0,;
oLbx:Edit(), )
REDEFINE BTNBMP ID 8304 OF oDlg RESOURCE "bmp_printer" TOOLTIP "Imprime o orcamento" ACTION fun() // Cupom("LPT1",M->TT_DESCT)
// -> Botoes de edicao de registros
REDEFINE SAY oSay8101 ID 8101 OF oDlg
REDEFINE SAY oSay8102 ID 8102 OF oDlg
REDEFINE SAY oSay8103 ID 8103 OF oDlg
REDEFINE SAY oSay8104 ID 8104 OF oDlg FONT oFnt2 COLOR nRGB( 255, 255, 000 ),nRGB( 064, 064, 064 )
// -> Botoes de funcao
REDEFINE BUTTON ID 8001 OF oDlg ACTION Pressionei( VK_F1, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8002 OF oDlg ACTION Pressionei( VK_F2, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8003 OF oDlg ACTION Pressionei( VK_F3, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8004 OF oDlg ACTION Pressionei( VK_F4, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8005 OF oDlg ACTION Pressionei( VK_F5, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8006 OF oDlg ACTION Pressionei( VK_F6, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8007 OF oDlg ACTION Pressionei( VK_F7, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8008 OF oDlg ACTION Pressionei( VK_F8, aDatos, oLbx, aTotal )
REDEFINE BUTTON ID 8009 OF oDlg ACTION Pressionei( VK_F9, aDatos, oLbx, aTotal )
ACTIVATE DIALOG oDlg
RELEASE FONT oFont
ReleaseDC( hBmp )
return Nil
/*
function SetCols( aData, aHeaders, aColSizes ) CLASS TWBrowse
local aFields
local nElements, n
nElements := Len( aData )
::aHeaders := If( aHeaders != nil, aHeaders, ::aHeaders )
::aColSizes := If( aColSizes != nil, aColSizes, {} )
::bLine := {|| _aData( aData ) }
::aJustify := AFill( Array( nElements ), .F. )
if Len( ::GetColSizes() ) < nElements
::aColSizes = AFill( Array( nElements ), 0 )
aFields = Eval( ::bLine )
for n = 1 to nElements
::aColSizes[ n ] := If( ValType( aFields[ n ] ) != "C",;
15,; // Bitmap handle
GetTextWidth( 0, Replicate( "B", ;
Max( Len( ::aHeaders[ n ] ), ;
Len( aFields[ n ] ) ) + 1 ),;
If( ! Empty( ::oFont ), ::oFont:hFont,) ) )
next
endif
if ::oHScroll != nil
::oHScroll:nMax := ::GetColSizes()
endif
return nil
static function _aData( aFields )
local aFld
local nFor, nLen
nLen = Len( aFields )
aFld = Array( nLen )
for nFor = 1 to nLen
aFld[ nFor ] = Eval( aFields[ nFor ] )
next
return aFld */
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------*/
function AddColumn(cHead, cVal, cPic, bWhen, bValid, bFail, nSize, bFormula, xJustify, cVarName)
///Guarda los valores a usar en cada linea
Default bValid := {|| .t. }
Default bWhen := {|| .t. }
Default bFail := {|| .t. }
//aAdd(oLbx:aMultiGet, { cVal, cPic, bWhen, bValid, bFail, bFormula, ;
// Upper(if(cVarName <> Nil, cVarName, cHead)), cVal })
//oLbx:nColumns++
// Si se manda un picture, mayormente es para numeros
// If ( cPic <> Nil )
// aAdd( oLbx:aLineData, Transform(cVal, cPic) )
// Else
// aAdd( oLbx:aLineData, cVal )
// End
aAdd(oLBx:aJustify , xJustify)
aAdd(oLBx:aHeaders , cHead)
aAdd(oLBx:aColSizes, nSize)
aAdd(oLbx:aDefault , cVal)
Return oLbx
//----------------------------------------------------------------------------//
function xTransLine( aArray,cPic )
Local aData := {}, _i_
For _i_ := 1 To len(aArray)
aAdd(aData, xTransType( aArray[_i_],cPic ) )
Next
Return ( aData )
//----------------------------------------------------------------------------//
function xTransType( aDado,cPic )
do case
case ValType( aDado ) == "C"
return aDado
case ValType( aDado ) == "L"
return aDado
case ValType( aDado ) == "D"
return dtoc(aDado)
case ValType( aDado ) == "N"
return transf(aDado,cPic)
endcase
//----------------------------------------------------------------------------//
STATIC function Pressionei( nKey, aDatos, oLbx, aTotal, aLine )
Do Case
Case nKey = VK_F1; MsgInfo( "Pressionei F1" )
Case nKey = VK_F2; MsgInfo( "Pressionei F2" )
Case nKey = VK_F3; MsgInfo( "Pressionei F3" )
Case nKey = VK_F4; MsgInfo( "Pressionei F4" )
Case nKey = VK_F5; MsgInfo( "Pressionei F5" )
Case nKey = VK_F6; MsgInfo( "Pressionei F6" )
Case nKey = VK_F7; MsgInfo( "Pressionei F7" )
Case nKey = VK_F8; MsgInfo( "Pressionei F8" )
Case nKey = VK_F9; MsgInfo( "Pressionei F9" )
Case nKey = 45 // Insert
NewReg( aDatos, oLbx, aLine )
oLbx:Edit()
Case nKey = 46 // Delete
If Len(aDatos) > 0 .and. oLbx:nAt <= Len(aDatos) .and. oLbx:nAt > 0 .and. Alert("Exclui o registro atual ?",{"ok","Cancela"}) == 1
DelReg( aDatos, oLbx, aTotal )
endif
//otherwise
// MsgInfo( str(nkey) ) // Para descobrir o codigo de outras teclas
endcase
//----------------------------------------------------------------------------//
Function HelpIndex()
Pressionei( VK_F1 )
return nil
//----------------------------------------------------------------------------//
Function GetSysFont()
return "MS Sans Serif"
//----------------------------------------------------------------------------//
STATIC Function EditaCelda( oLbx, nCol, cBuffer, aDatos, lFirstEdit, aTotal )
LOCAL aResult, nAt:= oLbx:nAt, uBuffer, lContinue:= .t.
LOCAL bValid, nColReal:= nCol
nCol-- // Para que sea como si no exisiera BitMap
uBuffer:= aDatos[nAt,nCol]
While .t.
Do Case
Case ( nCol == 2 .or. nCol == 5 ) .and. lFirstEdit
Alert( "Colunas nao editaveis" )
return .f.
Case nCol == 1
bValid:= {|| If( Empty( aResult:= SeekItem( uBuffer ) ), ;
(Alert( "Codigo Inexistente :-("),.F.) , .T. ) }
If lContinue:= oLbx:lEditCol( nColReal, @uBuffer, "@ZE 9999", bValid,,CLR_YELLOW )
aDatos[nAt,1]:= uBuffer
aDatos[nAt,2]:= aResult[1]
aDatos[nAt,4]:= aResult[2]
EndIf
Case nCol == 3 // Cantidad
If lContinue:= oLbx:lEditCol( nColReal, @uBuffer, "@ZE 999,999.99",,,CLR_YELLOW )
If uBuffer <= 0
Alert("Especifique uma quantidade !!!")
Loop
EndIf
aDatos[nAt,3]:= uBuffer
EndIf
Case nCol == 4 // Unitario
If lContinue:= oLbx:lEditCol( nColReal, @uBuffer, "@ZE 999,999.99",,,CLR_YELLOW )
aDatos[nAt,4]:= uBuffer
aDatos[nAt,6]:= .f. // Ya no es un Nuevo Registro !!!
EndIf
Case nCol == 5 .and. ! lFirstEdit .and. Len( aDatos ) == nAt
NewReg( aDatos, oLbx )
EndCase
If ! lContinue .and. aDatos[nAt,6] // Se habia agregado un nuevo Item !!!
DelReg( aDatos, oLbx, aTotal )
return .f.
EndIf
Exit
EndDo
If Len( aDatos ) > 0
aDatos[nAt,5]:= Round( aDatos[nAt,3] * aDatos[nAt,4], 2 )
Suma( aDatos, aTotal )
EndIf
If lContinue
Do Case
Case oLbx:nLastKey == VK_UP
return If( !GetKeyState(VK_SHIFT), -3, -2 )
Case oLbx:nLastKey == VK_DOWN
return If( !GetKeyState(VK_SHIFT), 3, 2 )
Case oLbx:nLastKey == VK_TAB
return If( GetKeyState(VK_SHIFT), -1, 1 )
EndCase
EndIf
return lContinue
//----------------------------------------------------------------------------//
STATIC Function SeekItem( nCod ) // Simulamos busqueda en Base de Datos :-)
If nCod >= 1 .and. nCod <= 500
return { "Produto " + StrZero( nCod, 4 ), nCod + 0.55 }
EndIf
return ""
//----------------------------------------------------------------------------//
STATIC Function NewReg( aDatos, oLbx, aLine )
Aadd( aDatos, {0,"",0,0,0,.t.} )
oLbx:Refresh()
oLbx:lHitBottom:= .f.
oLbx:GoBottom()
SysRefresh()
return Nil
//----------------------------------------------------------------------------//
STATIC Function DelReg( aDatos, oLbx, aTotal )
ADel( aDatos, oLbx:nAt )
ASize( aDatos, Len( aDatos ) - 1 )
oLbx:GoUp()
oLbx:Refresh()
Suma( aDatos, aTotal )
return Nil
//----------------------------------------------------------------------------//
STATIC Function Suma( aDatos, aTotal )
aTotal[1]:= 0
AEval( aDatos, {|aItem| aTotal[1]+= aItem[5] } )
oSay8101:SetText( transf(Round( aTotal[1], 2 ) , "@ze 999,999.99") )
oSay8102:SetText( transf(Round( aTotal[1] * 0.21, 2 ) , "@ze 999,999.99") )
oSay8103:SetText( transf(Round( aTotal[1] + aTotal[2],2 ), "@ze 999,999.99") )
oSay8104:SetText( "R$ "+alltrim(transf(Round( aTotal[1] + aTotal[2],2 ), "@ze 999,999.99")) )
oSay8101:Refresh(.F.)
oSay8102:Refresh(.F.)
oSay8103:Refresh(.F.)
oSay8104:Refresh(.F.)
return Nil
//----------------------------------------------------------------------------//
STATIC Function fun( aDatos, aTotal )
return Nil
//----------------------------------------------------------------------------//
Código: Selecionar todos
dlgPDV DIALOG 17, 29, 523, 302
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "PDV - Modulo de Vendas"
FONT 8, "Helv"
{
CONTROL "", 8000, "TWBrowse", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 117, 77, 404, 96
PUSHBUTTON "&Fechar", 9102, 456, 277, 63, 14
PUSHBUTTON "Executar pesquisa", 8015, 5, 254, 106, 14
CONTROL "", -1, "BorShade", BSS_VDIP | BSS_LEFT | WS_CHILD | WS_VISIBLE, 114, 20, 1, 252
CONTROL "", -1, "BorShade", BSS_HDIP | BSS_LEFT | WS_CHILD | WS_VISIBLE, -4, 272, 530, 1
CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 117, 21, 405, 20
CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 3, 20, 109, 164
PUSHBUTTON "F1 - Funcao 01", 8001, 7, 24, 102, 14
PUSHBUTTON "F2 - Funcao 02", 8002, 7, 40, 102, 14
PUSHBUTTON "F3 - Funcao 03", 8003, 7, 56, 102, 14
PUSHBUTTON "F4 - Funcao 04", 8004, 7, 72, 102, 14
PUSHBUTTON "F5 - Funcao 05", 8005, 7, 88, 102, 14
PUSHBUTTON "F6 - Funcao 06", 8006, 7, 104, 102, 14
PUSHBUTTON "F7 - Funcao 07", 8007, 7, 120, 102, 14
PUSHBUTTON "F8 - Funcao 08", 8008, 7, 136, 102, 14
PUSHBUTTON "F9 - Funcao 09", 8009, 7, 152, 102, 14
PUSHBUTTON "F10 - Funcao 10", 8010, 7, 168, 102, 14
CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 3, 186, 109, 66
RTEXT "TOTAL BRUTO:", -1, 345, 178, 86, 13
RTEXT "DESCONTO:", -1, 345, 194, 86, 13
RTEXT "ARREDONDAMENTO:", -1, 345, 210, 86, 13
RTEXT "0,00", 8101, 435, 176, 86, 13, SS_RIGHT | WS_BORDER | WS_GROUP
RTEXT "0,00", 8102, 435, 192, 86, 13, SS_RIGHT | WS_BORDER | WS_GROUP
RTEXT "0,00", 8103, 435, 208, 86, 13, SS_RIGHT | WS_BORDER | WS_GROUP
LTEXT "Text", 8201, 282, 49, 60, 8
CONTROL "", 8301, "TBtnBmp", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 118, 175, 14, 15
CONTROL "", 8302, "TBtnBmp", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 135, 175, 14, 15
CONTROL "", 8303, "TBtnBmp", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 153, 175, 14, 15
CONTROL "", 8304, "TBtnBmp", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 171, 175, 14, 15
CTEXT "0,00", 8104, 335, 226, 186, 42
}
bmp_editar BITMAP
{
'42 4D F6 00 00 00 00 00 00 00 76 00 00 00 28 00'
'00 00 10 00 00 00 10 00 00 00 01 00 04 00 00 00'
'00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 77 77 77 77 77 77 77 77 74 44'
'44 87 77 77 77 77 74 46 66 48 77 77 77 77 74 66'
'66 64 87 77 77 77 74 6E E6 66 48 77 77 77 74 FF'
'EE 66 64 87 77 77 77 4F FE E6 66 48 77 77 77 74'
'FF EE 66 64 87 77 77 77 4F FE E6 66 48 77 77 77'
'74 FF EE 66 64 77 77 77 77 4F FE E6 44 47 77 77'
'77 74 FF E4 66 47 77 77 77 77 4F 4E 46 47 77 77'
'77 77 74 4E E4 77 77 77 77 77 77 44 47 77 77 77'
'77 77 77 77 77 77'
}
bmp_Somatoria BITMAP
{
'42 4D F6 00 00 00 00 00 00 00 76 00 00 00 28 00'
'00 00 10 00 00 00 10 00 00 00 01 00 04 00 00 00'
'00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80'
'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 77 77 77 77 77 77 77 77 77 77'
'70 77 77 77 77 77 77 77 70 07 77 77 77 77 77 77'
'70 F0 77 77 77 77 77 70 00 0F 07 77 77 77 77 70'
'FB FB F0 77 77 77 77 77 0F B0 00 07 77 77 77 77'
'0B FB 07 77 77 77 77 00 00 BF B0 77 77 77 77 0B'
'FB FB FB 07 77 77 77 70 BF B0 00 07 77 77 77 70'
'FB FB 07 77 77 77 77 77 0F BF B0 77 77 77 77 77'
'0B FB FB 07 77 77 77 77 70 BF BF B0 77 77 77 77'
'70 00 00 00 07 77'
}
bmp_plus BITMAP
{
'42 4D 24 02 00 00 00 00 00 00 76 00 00 00 28 00'
'00 00 1A 00 00 00 1A 00 00 00 01 00 04 00 00 00'
'00 00 A0 01 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 78 88 88 77 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 88 88 88 8A AA AA 88 88'
'88 87 77 00 00 00 77 7F AA AA AA AA AA AA AA AA'
'AA A8 77 00 00 00 77 7F AA AA AA AA AA AA AA AA'
'AA A8 77 00 00 00 77 7F AA AA AA AA AA AA AA AA'
'AA A8 77 00 00 00 77 7F AA AA AA AA AA AA AA AA'
'AA A8 77 00 00 00 77 77 FF FF FF FA AA AA 8F FF'
'FF F7 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 FA AA AA 87 77'
'77 77 77 00 00 00 77 77 77 77 77 7F FF FF 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 00 00 00'
}
bmp_minus BITMAP
{
'42 4D 24 02 00 00 00 00 00 00 76 00 00 00 28 00'
'00 00 1A 00 00 00 1A 00 00 00 01 00 04 00 00 00'
'00 00 A0 01 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 88 88 88 88 88 88 88 88'
'87 77 77 00 00 00 77 79 11 11 11 11 11 11 11 11'
'18 77 77 00 00 00 77 79 11 11 11 11 11 11 11 11'
'18 77 77 00 00 00 77 79 11 11 11 11 11 11 11 11'
'18 77 77 00 00 00 77 79 11 11 11 11 11 11 11 11'
'18 77 77 00 00 00 77 77 99 99 99 99 99 99 99 99'
'97 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 00 00 00'
}
triangle BITMAP
{
'42 4D 84 01 00 00 00 00 00 00 76 00 00 00 28 00'
'00 00 1A 00 00 00 10 00 00 00 01 00 04 00 00 00'
'00 00 00 01 00 00 00 00 00 00 00 00 00 00 10 00'
'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 07 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 00 07 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 00 00 07 77 77 77'
'77 77 77 00 00 00 77 77 77 77 00 00 00 07 77 77'
'77 77 77 00 00 00 77 77 77 77 00 00 00 00 07 77'
'77 77 77 00 00 00 77 77 77 77 00 00 00 00 00 07'
'77 77 77 00 00 00 77 77 77 77 00 00 00 00 00 00'
'77 77 77 00 00 00 77 77 77 77 00 00 00 00 00 00'
'07 77 77 00 00 00 77 77 77 77 00 00 00 00 00 07'
'77 77 77 00 00 00 77 77 77 77 00 00 00 00 07 77'
'77 77 77 00 00 00 77 77 77 77 00 00 00 07 77 77'
'77 77 77 00 00 00 77 77 77 77 00 00 07 77 77 77'
'77 77 77 00 00 00 77 77 77 77 00 07 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 07 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 77 77 00 00 00 77 77 77 77 77 77 77 77 77 77'
'77 00 00 00'
}
@braços :?)