#include "totvs.ch"
// Definições para integração com leitor de código de barras
#define PRODUCT_MODE "PRODUCT_MODE" // Decode only UPC and EAN barcodes. This is the right choice for shopping apps which get prices, reviews, etc. for products.
#define ONE_D_MODE "ONE_D_MODE" // Decode only 1D barcodes.
#define QR_CODE_MODE "QR_CODE_MODE" // Decode only QR codes.
#define DATA_MATRIX_MODE "DATA_MATRIX_MODE" // Decode only Data Matrix codes.
#define AZTEC_MODE "AZTEC_MODE" // Decode only Aztec.
#define PDF417_MODE "PDF417_MODE" // Decode only PDF417.
// Definições dos valores usados para orientação da tela do dispositivo
#define ORIENTATION_UNSPECIFIED -1 // Usado somente para o SetScreenOrientation. Posição livre definida pelo usuário ou sensor do dispositivo.
#define ORIENTATION_PORTRAIT 1 // Tela na posição retrato.
#define ORIENTATION_LANDSCAPE 2 // Tela na posição paisagem.
#define ORIENTATION_INVERTED_PORTRAIT 4 // Tela na posição retrato invertido.
#define ORIENTATION_INVERTED_LANDSCAPE 8 // Tela na posição paisagem invertida.
Function u_tMobiletstMobile()
Local calibri18Black := TFont():New("Calibri",,018,,.T.,,,,,.F.,.F.)
DEFINE MSDIALOG oDlg TITLE "Testes com TMobile" FROM 000, 000 TO 115195, 700 COLORS 0, 16777215 PIXEL
PRIVATE oMbl := TMobile():New(oDlg)
@ 005, 040 SAY oSay1 PROMPT oTFont:= TFont():New('calibri',,-18,,.T.)
oTSay := TSay():New( 005, 045,{||"Integrações disponíveis na classe tMobile para a plataforma TOTVS | FatClient Embarcado" SIZE 260, 016 OF oDlg FONT calibri18Black COLORS 0, 16777215 PIXEL
},oDlg;
,,oTFont,.T.,.F.,.F.,.T.,0,,270,020,.F.,.T.,.F.,.F.,.F.,.F. )
SetCss("TButton{color: black;}")
@ 035, 007 BUTTON oButton1 PROMPT "Ler Código de Barras" SIZE 100150, 012 OF oDlg ACTION {|| u_tmbl1() } PIXEL
@ 035, 130180 BUTTON oButton2 PROMPT "Listar Dispositivos Bluetooth Pareados" SIZE 100150, 012 OF oDlg ACTION {|| u_tmbl2() } PIXEL
@ 035055, 245007 BUTTON oButton2oButton3 PROMPT "Capturar Foto" SIZE 100150, 012 OF oDlg ACTION {|| u_tmbl3() } PIXEL
@ 055, 180 BUTTON oButton4 PROMPT "Mostrar Orientação da Tela" SIZE 150, 012 OF oDlg ACTION {|| u_tmbl4() } PIXEL
@ 075, 007 BUTTON oButton5 PROMPT "Especificar Orientação da Tela" SIZE 150, 012 OF oDlg ACTION {|| u_tmbl5() } PIXEL
@ 075, 180 BUTTON oButton6 PROMPT "Ativar bScreenOrientationChanged" SIZE 150, 012 OF oDlg ACTION {|| u_tmbl6() } PIXEL
ACTIVATE DIALOG oDlg CENTERED
Return
Static Function u_tmbl1()
LOCAL oMbl
LOCAL cBarType
LOCAL aBarResult
oMbl:= TMobile():New()
// Especificar aqui um tipo de código de barras para limitar a leitura.
//cBarType:= PRODUCT_MODE;
cBarType:= "";
aBarResult:= oMbl:BarCode()
If aBarResult[1] = ""
sMsg := "Nenhum código de barras foi lido."
Else
sMsg := "Código de barras lido:" + chr(13) + chr(13) + "Código: " + aBarResult[1] + chr(13) + "Formato: " + aBarResult[2]
EndIf
MsgInfo(sMsg)
Return
Static Function u_tmbl2()
LOCAL oMbl
LOCAL aDevicesResult
Local i
oMbl:= TMobile():New()
aDevicesResult:= oMbl:GetPairedBluetoothDevices()
sMsg := ""
For i := 1 to len(aDevicesResult)
sMsg := sMsg + "Nome: " + aDevicesResult[i][1] + chr(13)
sMsg := sMsg + "Endereço: " + aDevicesResult[i][2] + chr(13) + chr(13)
Next i
If sMsg = ""
sMsg := "Nenhum dispositivo pareado ou interface Bluetooth desligada."
Else
sMsg := "Dispositivos Bluetooth Pareados:" + chr(13) + chr(13) + sMsg
EndIf
MsgInfo(sMsg)
Return
Static Function u_tmbl3()
Local cFilePath
Local cMsg
DEFINE DIALOG oDlg TITLE "Exemplo TMobile TakePicture" FROM 180,180 TO 610,700 PIXEL
oMbl:= TMobile():New()
cFilePath:= oMbl:TakePicture()
if (cFilePath = "")
cMsg := "Nenhuma imagem foi gravada."
else
cMsg := "Arquivo: " + cFilePath
endif
// Por ser o Android um sistema baseado no linux e para indicar que o arquivo encontra-se no
// lado do client, é adicionada uma letra de unidade de disco fictícia.
cFilePath:= "C:" + cFilePath
oTBitmap1 := TBitmap():New(01,01,260,184,,cFilePath,.F.,oDlg,,,.F.,.T.,,,.F.,,.T.,,.F.)
oTBitmap1:lAutoSize := .F.
oSay:= TSay():New(187, 02, {||cMsg},oDlg,,,,,,.T.,CLR_RED,CLR_WHITE,200,10)
oTButton1 := TButton():New( 200, 110, "Fechar", oDlg, {||oDlg:End()},40,10,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE DIALOG oDlg CENTERED
Return
Static Function u_tmbl4()
PrintOrientation( oMbl:GetScreenOrientation() )
Return
Static Function u_tmbl5()
DEFINE MSDIALOG oDlgInput TITLE "Escolha uma orientação para a tela" FROM 180,180 TO 260,360 PIXEL
nRadio := 1
aItems := {'-1=Unspecified','1=Portrait','2=Landscape','4=Inverted Portrait','8=Inverted Landscape'}
cCombo1:= aItems[1]
oCombo1 := TComboBox():New(01,01,{|u|if(PCount()>0,cCombo1:=u,cCombo1)},;
aItems,80,20,oDlgInput,,,,,,.T.,,,,,,,,,'cCombo1')
oBtn1 := TButton():New( 25, 002, 'Ok', oDlgInput, {|| oMbl:SetScreenOrientation(VAL(cCombo1)), oDlgInput:End() },25,15,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn2 := TButton():New( 25, 034, 'Cancela', oDlgInput, {|| oDlgInput:End() },25,15,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlgInput CENTERED
Return
Static Function u_tmbl6()
oMbl:bScreenOrientationChanged := { |nOrientation| PrintOrientation(nOrientation) }
MsgInfo("O blobo de código bScreenOrientationChanged foi ativado." + CRLF + ;
"Mude a orientação da tela do dispositivo móvel para que" + CRLF + ;
"uma mensagem seja exibida mostrando a nova orientação.")
Return
Static Function PrintOrientation( nOrientation )
cMsg:= ""
Do Case
Case nOrientation == ORIENTATION_PORTRAIT
cMsg:= "Portrait Orientation"
Case nOrientation == ORIENTATION_LANDSCAPE
cMsg:= "Landscape Orientation"
Case nOrientation == ORIENTATION_INVERTED_PORTRAIT
cMsg:= "Inverted Portrait Orientation"
Case nOrientation == ORIENTATION_INVERTED_LANDSCAPE
cMsg:= "Inverted Landscape Orientation"
OtherWise
cMsg:= "Not supported!"
EndCase
MsgInfo(cMsg)
Return
|