fivetouch

Moderator: Enrico Maria Giordano

solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

fivetouch

Post by solving »

salve

provengo da ambiente clipper/alaska e volevo fare qualche programmino in android, qualcosa di molto semplice.
Ho alcuni clienti a cui scarico un listino (un semplice browse di un dbf) su dei terminali ( vecchio dos - clipper ).

Tempo fa' volevo passare a dei terminali con windows ce ( avevo chiesto info su questo forum ) la cosa non e' andata avanti
per costo eccessivo di palmare con lettore barcode incorporato, adesso vedo che il mercato palmari windows ce va' a morire.

Con l'avvento di tablet android il costo e' contenuto ( tablet da 10" + lettore barcode su porta usb circa 200 E. )

Alla ricerca di clipper + android ( c'e' ne' abbastanza di harbour + android in giro , ma uno che spiega bene come preparare l'ambiente di lavoro in windows ? ) ho guardato qui e ho letto di fivetouch.

qualcuno gia' usa fivetouch ?

da quello che ho capito la versione base ( costo 200 E.) permette di usare il programma come il vecchio dbase
modalita' interprete.

La versione completa ( costo 500 e. oppure aggiungere 300 E. ai 200 E. gia' spesi ) permette di generare
i file .apk da spostare/installare sui dispositivi android e/o ios .

ho capito bene ?

forumisti italiani che gia' lo usano possono darmi le loro esperienze in merito ?

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

Re: fivetouch

Post by Antonio Linares »

Hello,

We started FiveTouch development several months ago and we offered a demo version:

https://bitbucket.org/fivetech/fivetouc ... /downloads

This may the best way to test for yourself if it may be a good solution for you :-)

grazie,
regards, saludos

Antonio Linares
www.fivetechsoft.com
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

Ok
Con gli esempi a corredo funziona.

Esiste un Esempio con un dbf reale ?
il programma browse.prg e' un esempio ma senza aprire un dbf non riesco a capirlo.

Esiste un manuale con la sintassi dei comandi / funzioni ?

Grazie.
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

sono riuscito ad attenere qualcosa.

premetto che ho letto una guida di harbour + qt di Giovanni Di Maria ( http://www.elektrosoft.it/tutorials/hbqt/hbqt.asp )

ma fivetouch usa harbour + qt ? se si perche gli esempi di Di Maria non funzionano ?.

comunque dopo vari smanettamenti ecco il browse di esempio con fivetouch da me modificato per usare i dbf

non riesco a impostare una browse piu' corta in modo da far vedere i pulsanti fuori dal browse,
i pulsanti funzionano ( spostano il browser Top/Bottom ) ma danno un errore.

attendo suggerimenti.
Grazie.


#include "FiveTouch.ch"

function Main()

local oDlg := QDialog()
local oLayout := QVBoxLayout()
local oBrw := QTableView( oDlg )
local oModel := QStandardItemModel( 3, 4, oDlg )

LOCAL i, nNumRecord
LOCAL button_top, button_bottom

* --- Chiudo Tutto perche' se il programma va' in errore il file rimane in Uso
DBCLOSEALL()

USE "VIDEO.DBF" ALIAS Video NEW
nNumRecord := RecCount()

oModel:SetHorizontalHeaderItem( 0, QStandardItem( "Codice" ) )
oModel:SetHorizontalHeaderItem( 1, QStandardItem( "Titolo" ) )
oModel:SetHorizontalHeaderItem( 2, QStandardItem( "Genere" ) )
oModel:SetHorizontalHeaderItem( 3, QStandardItem( "Durata" ) )

For i = 0 TO nNumRecord

oModel:SetItem( i, 0, QStandardItem( Video->COD_CA ) )
oModel:SetItem( i, 1, QStandardItem( Video->TITOLO ) )
oModel:SetItem( i, 2, QStandardItem( Video->GENERE ) )
oModel:SetItem( i, 3, QStandardItem( STR(Video->DURATA) ) )

Video->( DBSKIP() )
NEXT

oDlg:SetLayout( oLayout )
oBrw:SetModel( oModel )
oLayout:AddWidget( oBrw )

//------------Button--------------
@ 300, 090 BUTTON button_top PROMPT "Inizio" OF oDlg ;
ACTION Top( oBrw )
@ 300, 210 BUTTON button_Bottom PROMPT "Fine" OF oDlg ;
ACTION Bot( oBrw )

oDlg:SetWindowTitle( "Elenco VideoCassette" )
oDlg:Resize( 500, 400 )
oDlg:Center()
oDlg:Exec()

Video->( DBCLOSEAREA() )

return nil

// ------------------------------------ Altre Funzioni

PROCEDURE Top( oT )
oT:scrollToTop()
oT:setCurrentCell( 0, 0 )
oT:setFocus()
RETURN

PROCEDURE Bot( oT )
oT:scrollToBottom()
oT:setCurrentCell( oT:rowCount() - 1, 0 )
oT:setFocus()
RETURN
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

Rieccomi , salve

1) Ma la sintassi dei comandi di FiveTouch quale' ? ( Mai usato FiveWin per Clipper e/o Harbour )
su quale mi devo basare ?, e possibile avere un manuale dei comandi / Funzione di base ?

Ecco un esempio che cerco di costruire guardando e "carpendo" istruzioni in giro nel forum Spagnolo.

Ho un problema nella funzione Vedi_P , quello che vorrei fare e' il seguente
(ho la procedura funzionante in clipper e cerco di convertirla) :

1) come limitare l'input della variabile a max 20 caratteri ?

2) ho costruito un ciclo Do while .T. ed esco dalla funzione Vedi_P o quando premo il pulsante "abbandona" o quando lascio
vuoto il campo oCod.
quello che non riesco a fare e' : alla pressione del pulsante "Cerca" di chiamare una funzione che mi esegua la seek
sul file mi faccia vedere un campo ( es. descrizione + prezzo ) mi svuoti la get e ritorni nel ciclo Do while .T.
in attesa da altro input.

In clipper lo faccio in un battito di ciglia ma in Fivetouch ( dato che non conosco la giusta sintassi ) non riesco.

Grazie.


#include "FiveTouch.ch"

function Main()local oDlg,;
oBtnPre,;
oBtnInv,;
oBtnEnd

LOCAL fDbf := "_DATIL.DBF",;
fNtx := "_DATIL.NTX"

SET DELETE ON
SET CENTURY ON
SET ESCAPE ON
SET DATE ITALIAN
SETCANCEL(.T.)

CLEAR SCREEN

// --- Verifico se Esiste File e Indice Altrimenti li Creo
Crea_File( fDbf, fNtx )

DEFINE DIALOG oDlg

oDlg:setWindowTitle( "Gestione Prezzi" )

// --- Definizione Pulsanti
@ 10, 90 BUTTON oBtnPre PROMPT "Prezzi" OF oDlg ;
ACTION Vedi_P( fDbf, fNtx )

@ 50, 90 BUTTON oBtnInv PROMPT "Inventario" OF oDlg ;
ACTION oDlg:End()

@ 90, 90 BUTTON oBtnCancel PROMPT "Fine" OF oDlg ;
ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTERED

return nil

FUNCTION Crea_File( fDbf, fNtx )
LOCAL aDbf := {}

//*** Crea Archivio se non esiste
IF !FILE( fDbf )
AADD(aDbf,{"CODICE","C",13,0})
AADD(aDbf,{"DESC","C",15,0})
AADD(aDbf,{"QTA","N",6,2})
AADD(aDbf,{"PRE","N",9,3})
DBCREATE(fDbf,aDbf)
FERASE(fNtx)
ENDIF

//*** Crea Indice se non esiste
IF !FILE( fNtx )
CLEAR SCREEN
* @ 1,0 SAY "Attendere ..."
* @ 2,0 SAY "Ricostruzione"
* @ 3,0 SAY "Indice"
USE( fDbf ) ALIAS Dati NEW
INDEX ON Dati->CODICE TO ( fNtx )
CLOSE DATABASES
ENDIF

RETURN NIL

FUNCTION Vedi_P( fDbf, fNtx )
LOCAL oCod, oDlg, cCod := SPACE(20)
LOCAL oBtnEnd, oBtnOk

DEFINE DIALOG oDlg TITLE "Vedi Prezzi" ;
SIZE 300, 200

@ 160, 25 BUTTON oBtnEnd PROMPT "Abbandona" OF oDlg ;
ACTION oDlg:End()

@ 160, 150 BUTTON oBtnOk PROMPT "Cerca" OF oDlg ;
ACTION MsgInfo( "Ok!" )

*USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW

DO WHILE .T.

@ 20, 020 SAY oSay PROMPT "Codice" OF oDlg
@ 20, 060 GET oCod VAR cCod OF oDlg
oCod:setFixedSize(130,25)

IF EMPTY( cCod )
EXIT
oDlg:End()
ELSE
MsgInfo( "Ok!" )
ENDIF

END DO

ACTIVATE DIALOG oDlg CENTERED

*Dati->( DBCLOSEAREA() )

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

Re: fivetouch

Post by Antonio Linares »

1) come limitare l'input della variabile a max 20 caratteri ?
Please review QLineEdit() DATA nMaxLength:

http://doc.qt.io/qt-4.8/qlineedit.html

oCod:nMaxLength = 20

I don't understand your second question, sorry
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: fivetouch

Post by Antonio Linares »

Please review FiveTouch.ch for currently supported syntax

FiveTouch uses QT, so all QT docs are usefull to use FiveTouch
regards, saludos

Antonio Linares
www.fivetechsoft.com
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

salve Antonio


second question :

Questa la mia funzione in Clipper :

*-------------------------------------------------- VEDI_P
STATIC FUNCTION Vedi_P( fDbf, fNtx )
LOCAL GetList := {}

LOCAL cBar := SPACE(13) ,;
cDes := SPACE(15) ,;
nPre := 0, xBar := ""

USE( fDbf ) INDEX (fNtx) ALIAS Dati NEW

DO WHILE .T.
CLEAR

cBar := SPACE(13)

@ 0,0 SAY "Vedi Prezzo"

@ 1,0 SAY "Cod " GET cBar PICTURE "@!"
READ

xBar := ALLTRIM( cBar )

IF !EMPTY( xBar )

IF Dati->( DBSEEK(xBar) )
cBar := Dati->CODICE
cDes := Dati->DESC
nPre := Dati->PRE

@ 2,0 SAY "Codice " + cBar
@ 3,0 SAY "Desc. " + cDes
@ 4,0 SAY "Prezzo " + ALLTRIM( TRANSFORM(nPre,"99999.999") )
ELSE
@ 2,0 SAY SPACE(40)
@ 3,0 SAY SPACE(40)
@ 4,0 SAY SPACE(40)

@ 2,0 SAY "-Non Trovato-"
ENDIF

@ 3,0 SAY "Premi Enter"
INKEY(0)
ELSE
EXIT
ENDIF

ENDDO

Dati->( DBCLOSEAREA() )

RETURN NIL


Come Convertire in fivetouch ?

Grazie
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

oCod:nMaxLength = 20 -> ERRORE
oCod:MaxLength = 20 -> ERRORE

oCod:SetMaxLength(20) -> OK


Se Dichiaro oCod := SPACE(1) -> OK

Se Dichiaro oCod := SPACE(20) -> stranamente il cursore non si pone all'inizio della Get ma al Centro
Devo prima usare il tasto Canc per vuotare il campo della Get anche se vuoto e poi posso digitare .

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

Re: fivetouch

Post by Antonio Linares »

solving wrote:salve Antonio


second question :

Questa la mia funzione in Clipper :

*-------------------------------------------------- VEDI_P
STATIC FUNCTION Vedi_P( fDbf, fNtx )
LOCAL GetList := {}

LOCAL cBar := SPACE(13) ,;
cDes := SPACE(15) ,;
nPre := 0, xBar := ""

USE( fDbf ) INDEX (fNtx) ALIAS Dati NEW

DO WHILE .T.
CLEAR

cBar := SPACE(13)

@ 0,0 SAY "Vedi Prezzo"

@ 1,0 SAY "Cod " GET cBar PICTURE "@!"
READ

xBar := ALLTRIM( cBar )

IF !EMPTY( xBar )

IF Dati->( DBSEEK(xBar) )
cBar := Dati->CODICE
cDes := Dati->DESC
nPre := Dati->PRE

@ 2,0 SAY "Codice " + cBar
@ 3,0 SAY "Desc. " + cDes
@ 4,0 SAY "Prezzo " + ALLTRIM( TRANSFORM(nPre,"99999.999") )
ELSE
@ 2,0 SAY SPACE(40)
@ 3,0 SAY SPACE(40)
@ 4,0 SAY SPACE(40)

@ 2,0 SAY "-Non Trovato-"
ENDIF

@ 3,0 SAY "Premi Enter"
INKEY(0)
ELSE
EXIT
ENDIF

ENDDO

Dati->( DBCLOSEAREA() )

RETURN NIL


Come Convertire in fivetouch ?

Grazie
Que error te da en FiveTouch ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

el procedimiento vedi_p trabaja en clipper
No funciona en fivetouch ¿cómo puedo convertir ?

esta es mi función en fivetouch

// ----------------------- VEDI_P
FUNCTION Vedi_P( fDbf, fNtx )
LOCAL oBar, oDlg, cBar := SPACE(1)
LOCAL oBtnEnd, oBtnOk

USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW

DEFINE DIALOG oDlg TITLE "Vedi Prezzi" ;
SIZE 300, 200

@ 160, 25 BUTTON oBtnEnd PROMPT "Abbandona" OF oDlg ;
ACTION oDlg:End()

@ 160, 150 BUTTON oBtnOk PROMPT "Cerca" OF oDlg ;
ACTION Prezzo(oDlg, ALLTRIM(cBar))

DO WHILE .T.

@ 20, 020 SAY oSay PROMPT "Codice" OF oDlg
@ 20, 060 GET oBar VAR cBar OF oDlg
oBar:setFixedSize(130,25)
oBar:SetMaxLength(20)

@ 60, 020 SAY oSay PROMPT "Desc. " OF oDlg ******* 1 *****
@ 90, 020 SAY oSay PROMPT "Prezzo " OF oDlg ******* 2 *****

IF EMPTY( cBar )
EXIT
oDlg:End()
ELSE
MsgInfo( "Ok!" )
ENDIF

END DO

ACTIVATE DIALOG oDlg CENTERED

Dati->( DBCLOSEAREA() )
RETURN NIL

// ----------------------- PREZZO
FUNCTION Prezzo( ODlg, cBar )

IF Dati->( DBSeek(cBar) )

// MsgInfo("Desc. " + Dati->DESC )


********************* Cómo mostrar ESTA LÍNEA EN PUNTO ***** 1 ****
@ 60, 050 SAY oSay PROMPT Dati->DESC OF oDlg

******************* Cómo mostrar ESTA LÍNEA EN PUNTO ***** 2 ****
@ 90, 050 SAY oSay PROMPT Dati->PREZZO OF oDlg

ENDIF

RETURN NIL

Grazie
Estoy utilizando un TRADUCTOR PARA ESPAÑOLES :-)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: fivetouch

Post by Antonio Linares »

Aqui tienes un ejemplo:

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Post by solving »

salve

Sono riuscito ad ottenere quello che volevo, vi posto l'esempio :

*******************************************************************
// ----------------------- VEDI_P
FUNCTION Vedi_P( fDbf, fNtx )
LOCAL oCod, oDlg, cCod := SPACE(1)
LOCAL oBtnEnd, oBtnOk

USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW

DEFINE DIALOG oDlg TITLE "Vedi Prezzi" ;
SIZE 300, 200

@ 160, 25 BUTTON oBtnEnd PROMPT "Abbandona" OF oDlg ;
ACTION oDlg:End()

@ 160, 150 BUTTON oBtnOk PROMPT "Cerca" OF oDlg ;
ACTION Prezzo(oDlg, ALLTRIM(cCod))

DO WHILE .T.

@ 20, 020 SAY oSay PROMPT "Codice" OF oDlg
@ 15, 060 GET oCod VAR cCod OF oDlg
oCod:setFixedSize(130,25)
oCod:SetMaxLength(20)

@ 60, 020 SAY oSay PROMPT "Codice " OF oDlg
@ 90, 020 SAY oSay PROMPT "Desc. " OF oDlg
@ 120,020 SAY oSay PROMPT "Prezzo " OF oDlg

IF EMPTY( cCod )
EXIT
oDlg:End()
ELSE
MsgInfo( "Ok!" )
ENDIF

END DO

ACTIVATE DIALOG oDlg CENTERED

Dati->( DBCLOSEAREA() )
RETURN NIL

// ----------------------- PREZZO
FUNCTION Prezzo( oDlg, cCod )
LOCAL cBar := "",;
cDes := "",;
nPre := 0

LOCAL oLab1 := QLabel( oDlg ),;
oLab2 := QLabel( oDlg ),;
oLab3 := QLabel( oDlg )

IF !EMPTY( cCod )
IF Dati->( DBSeek(cCod) )
cBar := Dati->CODICE
cDes := Dati->DESC
nPre := Dati->PRE
ELSE
cDes := "Codice " + cCod + " Non Trovato"
ENDIF
ELSE
cDes := "Codice Vuoto"
ENDIF

oLab1:setText( cBar )
oLab1:move( 65 , 60 )
oLab1:show()

oLab2:setText( cDes )
oLab2:move( 65 , 90 )
oLab2:show()

oLab3:setText( STR(nPre) )
oLab3:move( 65 , 120 )
oLab3:show()

RETURN NIL
*************************************************************+

adesso qualcuno puo' indicarmi come far funzionare il ciclo do while .t. end do
perche vorrei restare nella funzione Vedi_P fino a quando non premo il pulsante abbandona.

Grazie

scusa Antonio forse non so' spiegare bene i miei problemi .

comunque Fivetouch e' OK ( sono un principiante di Qt )
ancora alcuni test prima dell'eventuale acquisto.

p.s. ma nessun italiano del forum che usa FiveTouch ?.
Post Reply