fivetouch

Moderator: Enrico Maria Giordano

fivetouch

Postby solving » Thu Mar 11, 2021 9:36 am

buongiorno
tempo fà ho acquistato il programma in oggetto
poi ho dovuto fermarmi per altre necessità.

Adesso l'ho ripreso, chiedo se qualcuno ci ha lavorato o ci lavora per scambio info
ho necessità di convertire un vecchio porgramma clipper/dos che lavora su un palmare dos ( con lettore cod. barre )
il palmare (che ancora funziona) non e' più in commercio e naturalmente voglio implementare il tutto su android
su un palmare con lettore codci a barre
ho già convertito un po' del sorgente ma sono a corto di alcuni passi per fare determinati passaggi.

premessa : dalla fivetech ho solo fivetouch , conosco la sintassi clipper e xbase
ho fatto qualcosa ( che ho anche postato qui ) con fivetouch.

Il maestro A. Linares mi aveva aiutato a preparare l'ambiente per la generazione dell'apk
che e' andato perduto, quindi se c'e' la possibilità di avere info / passi (dove fare download e quali verssioni)
su come installare harbour, sdk, ndx, qt, etc..

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

Re: fivetouch

Postby Antonio Linares » Thu Mar 11, 2021 10:09 am

We advise to use mod_harbour instead of FiveTouch:

https://github.com/FiveTechSoft/mod_harbour

mod_harbour web apps run on any device: Android, iOS, smartTV, PCs...
regards, saludos

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

Re: fivetouch

Postby solving » Thu Mar 11, 2021 7:37 pm

anche se partecipo poco seguo il forum e conosco mod_harbour ho letto qualcosa.

il problema e' che l'applicativo ( .apk ) e i dati ( .dbf ) devono risiedere in un palmare android
il palmare è usato anche in situazioni ( ordini da clienti ) dove a volte non c'e' connessione internet
quindi solo su palmare con dati locali
( poi al rientro in sede vengono fatti trasferimenti di dati tra pc <-> palmare )

esempio di palmare : https://www.meteorbarcode.it/product/mt-2020

addirittura pensavo di usare un classico cellulare android o tablet da 7 pollici con abbinato un lettore di codice a barre in bluetooth
tipo questo : Eyoyo 3-in-1 Mini CCD Bluetooth Barcode Scanner USB Wired & 2.4 Wireless Bar Code Reader Portable Image Scanner 1D Screen Scanning compatible for iPad/iPhone/Android Phones/Tablets/PC .

comunque grazie

volete posto il .prg cosi come e' adesso.
solving
 
Posts: 65
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Postby solving » Thu Jul 08, 2021 5:15 pm

salve
mi scuso se posto un problema ma ho necessità di capire dove stà l'errore.
Dopo il testo posto l'errore e il sorgente.
il problema si presenta quando da menu' scelgo lopzione "Ordini"
se nella Function Ordini(.....) metto in rem la Use del file Cli non ottengo l'errore, come possibile che una Use generi questo errore ?.
grazie

Errore :
Variabile does not exist
COD_CLI

Called from: => HB_HRBRUN( 0 )
Called from: ..fivetouch.prg = > RUNSCRIPT( 3263 )
Called from: ..fivetouch.prg => (b)PHONEMODE( 156 )
Called from: => QDIALOG:EXEC(0)
Called from: ..fivetouch.prg => PHONEMODE( 184)
Called from: ..fivetouch.prg => MAIN(86)

sorgente :

Code: Select all  Expand view

#include "FiveTouch.ch"

FUNCTION Main()

local oDlgc,;
      oBtnPre,;
      oBtnInv,;
      oBtnEleA,;
      oBtnEleC,;
      oBtnEleO,;
      oBtnOrd,;
      oBtnNtx,;
      oBtnImp,;
      oBtnEnd

LOCAL cDir := "",fADbf,fANtx
LOCAL fCDbf, fCNtx, fODbf, fONtx

PRIVATE xPath := HB_DIRBASE() + "SOLVING\"

cDir := xPath + "
DATI"

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

CLOSE ALL

CLEAR SCREEN

* --- Verifica se Non Esiste la Directory
*     viene creata
IF !lIsDir( cDir )
   MakeDir( cDir )
ENDIF

* --- Imposta Variabili
fADbf := cDir + "
\_ARTICOL.DBF"
fANtx := cDir + "
\_ARTICOL.NTX"

fCDbf := cDir + "
\_CLIENTI.DBF"
fCNtx := cDir + "
\_CLIENTI.NTX"

fODbf := cDir + "
\_ORDINI.DBF"
fONtx := cDir + "
\_ORDINI.NTX"

* --- Crea File se Non Esiste
Crea_File( 1, fADbf, fANtx )
Crea_File( 2, fCDbf, fCNtx )
Crea_File( 3, fODbf, fONtx )

DEFINE DIALOG oDlg

oDlg:setWindowTitle( "
Gestione Prezzi" )

* --- Definizione Pulsanti
@ 10, 90 BUTTON oBtnPre PROMPT "
Prezzi" OF oDlg ;
         ACTION Vedi_P( fADbf, fANtx )

@ 10, 220 BUTTON oBtnInv PROMPT "
Inventario" OF oDlg ;
          ACTION Inventa( fADbf, fANtx )

@ 50, 90 BUTTON oBtnOrd PROMPT "
Ordini" OF oDlg ;
         ACTION Ordini( fADbf,fANtx, fCDbf,fCNtx, fODbf,fONtx )
         
@ 50, 220 BUTTON oBtnEleA PROMPT "
Elenco A." OF oDlg ;
          ACTION Elenco_A( fADbf, fANtx )

@ 190, 90 BUTTON oBtnNtx PROMPT "
Reindex" OF oDlg ;
          ACTION Crea_NTX( fADbf,fANtx, fCDbf,fCNtx, fODbf,fONtx )

@ 90, 220 BUTTON oBtnEleC PROMPT "
Elenco C." OF oDlg ;
          ACTION Elenco_C( fCDbf, fCNtx )

@ 130, 220 BUTTON oBtnEleO PROMPT "
Elenco O." OF oDlg ;
           ACTION Elenco_O( fODbf, fONtx )

@ 190, 220 BUTTON oBtnImp PROMPT "
Import File" OF oDlg ;
           ACTION Import(fADbf, fANtx, cDir )

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

ACTIVATE DIALOG oDlg CENTERED

return nil

// ---------------------------------------- CREA_FILE
FUNCTION Crea_File( nF, fDbf, fNtx )
LOCAL aDbf := {}

DO CASE
   CASE nF == 1   //*** 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

        FERASE(fNtx)

        //*** Crea Indice se non esiste
        IF !FILE( fNtx )
           USE( fDbf ) ALIAS Dati NEW
           INDEX ON Dati->CODICE TO ( fNtx )
           CLOSE DATABASES
        ENDIF  

   CASE nF == 2   //*** Crea Archivio se non esiste
        IF !FILE( fDbf )
           AADD(aDbf,{"
COD_CLI","C",5,0})
           AADD(aDbf,{"
DES_CLI","C",20,0})
           DBCREATE(fDbf,aDbf)
           FERASE(fNtx)
        ENDIF

        FERASE(fNtx)

        //*** Crea Indice se non esiste
        IF !FILE( fNtx )
           USE( fDbf ) ALIAS Dati NEW
           INDEX ON Dati->COD_CLI TO ( fNtx )
           CLOSE DATABASES
        ENDIF

   CASE nF == 3   //*** Crea Archivio se non esiste
        IF !FILE( fDbf )
           AADD(aDbf,{"
COD_ORD","C",5,0} )
           AADD(aDbf,{"
COD_CLI","C",5,0})
           AADD(aDbf,{"
CODICE","C",13,0})
           AADD(aDbf,{"
QTA","N",6,2})
           DBCREATE(fDbf,aDbf)
           FERASE(fNtx)
        ENDIF

        FERASE(fNtx)

        //*** Crea Indice se non esiste
        IF !FILE( fNtx )
           USE( fDbf ) ALIAS Dati NEW
           INDEX ON Dati->COD_ORD TO ( fNtx )
           CLOSE DATABASES
        ENDIF

ENDCASE

RETURN NIL

// ------------------------------------------------------------ CREA_NTX
FUNCTION Crea_NTX(fADbf,fANtx,fCDbf,fCNtx,fODbf,fONtx)

FERASE(fANtx)

//*** Crea Indice se non esiste
IF !FILE( fANtx )
   USE( fADbf ) ALIAS Dati NEW
   INDEX ON Dati->CODICE TO ( fANtx )
   CLOSE DATABASES
ENDIF  

FERASE(fCNtx)

//*** Crea Indice se non esiste
IF !FILE( fCNtx )
   USE( fCDbf ) ALIAS Dati NEW
   INDEX ON Dati->COD_CLI TO ( fCNtx )
   CLOSE DATABASES
ENDIF

FERASE(fONtx)

//*** Crea Indice se non esiste
IF !FILE( fONtx )
   USE( fODbf ) ALIAS Dati NEW
   INDEX ON Dati->COD_ORD TO ( fONtx )
   CLOSE DATABASES
ENDIF

MsgInfo("
Reindex Completato")

RETURN NIL

// ----------------------- IMPORT
FUNCTION Import( fDbf, fNtx, cDir )
LOCAL cPath := "
D:\TX\"
LOCAL cFile := "
_DATIL.DBF"

IF MsgYesNo("
Import Dati  ?","Richiesta Import")
   IF FILE( cPath + cFile )

      FERASE( fDbf )
      FERASE( fNtx )

      COPY FILE(cPath + cFile) TO ( cDir +"
\"+ cFile )

      Crea_File( fDbf, fNtx, 1 )
   ELSE  
      MsgInfo("
Non Trovo " + cPath + cFile )
   ENDIF
ENDIF
RETURN NIL

// ----------------------- VEDI_P
FUNCTION Vedi_P( fDbf, fNtx )
LOCAL oDlg, oCod, cCod := SPACE(13)
LOCAL oSco, nSco := "
0", nPre := 0
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 nPre := Prezzo(oDlg, cCod, oCod, nSco)

@ 20, 020 SAY oSay PROMPT "
Codice" OF oDlg
@ 50, 020 SAY oSay PROMPT "
Codice" OF oDlg
@ 70, 020 SAY oSay PROMPT "
Desc. " OF oDlg
@ 90, 020 SAY oSay PROMPT "
Prezzo" OF oDlg
@ 120,020 SAY oSay PROMPT "
Sconto" OF oDlg

@ 15, 060 GET oCod VAR cCod OF oDlg
oCod:setFixedSize(130,25)
*oCod:cursorPosition(0)
*oCod:setMaxLength(13)
oCod:setFocus()

@ 115, 060 GET oSco VAR nSco OF oDlg
oSco:setFixedSize(50,25)
oSco:setInputMask("
00")
oSco:Connect( "
textChanged(QString)",{| cValue | nSco := cValue, Calcolo(oDlg, nPre, nSco)})

ACTIVATE DIALOG oDlg CENTERED

Dati->( DBCLOSEAREA() )
RETURN NIL

// -------------------------------- PREZZO
FUNCTION Prezzo( oDlg, cCod, oCod, nSco )
LOCAL cBar := "
",;
      cDes := "
",;
      nPre := 0, lOk := .F.

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

cCod := ALLTRIM( cCod )

oLab3:setFont( QFont( "
Courier", 11, 75) )
oLab3:setStyleSheet( "
background-color : white; color : blue;" )

* --- Vuota Righe
oLab1:setText( SPACE(30)  )
oLab1:move( 65 , 50 )
oLab1:show()

oLab2:setText( SPACE(50)  )
oLab2:move( 65 , 70 )
oLab2:show()

oLab3:setText( SPACE(15)  )
oLab3:move( 65 , 90 )
oLab3:show()

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

IF lOk
   * --- Visualizza Dati
   oLab1:setText( cBar  )
   oLab1:move( 65 , 50 )
   oLab1:show()

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

   oLab3:setText( STR(nPre)  )
   oLab3:move( 65 , 90 )
   oLab3:show()
ELSE
   oLab2:setText( cDes  )
   oLab2:move( 65 , 70 )
   oLab2:show()
ENDIF

IF nPre <> 0
   Calcolo(oDlg, nPre, nSco)
ENDIF

oCod:SetText(SPACE(13))
oCod:setFocus()

RETURN( nPre )


// ----------------------- CALCOLO
FUNCTION Calcolo( oDlg, nPre, nSco )
LOCAL nR := "
0"
LOCAL oLab1 := QLabel( oDlg )

nR := nPre - (nPre*(VAL(nSco)/100))
nR := TRANSFORM( nR,"
99.999")

*oLab1:setText(ALLTRIM(STR(nR)))
oLab1:setText(nR)
oLab1:move( 120, 120 )

* 75 = Bold
oLab1:setFont( QFont( "
Courier New", 11, 75) )
oLab1:setStyleSheet( "
background-color : white; color : red;" )
oLab1:show()

RETURN( NIL )

// --------------------------------- INVENTA
FUNCTION Inventa( fDbf, fNtx )
LOCAL oDlg
LOCAL oCod, cCod := SPACE(13)
LOCAL oQta, nQta := "
1"
LOCAL oBtnEnd, oBtnOk

USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW

DEFINE DIALOG oDlg TITLE "
Inventario" ;
       SIZE 300, 200

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

@ 160, 150 BUTTON oBtnOk PROMPT "
Conferma" OF oDlg ;
           ACTION Salva( oDlg, cCod, nQta, oCod, oQta )

@ 20, 020 SAY oSay PROMPT "
Codice" OF oDlg
@ 50, 020 SAY oSay PROMPT "
Q.tà"   OF oDlg
@ 50, 120 SAY oSay PROMPT "
+ o -"  OF oDlg

@ 90, 020 SAY oSay PROMPT "
Desc."  OF oDlg
@ 120,020 SAY oSay PROMPT "
Q.tà Attuale" OF oDlg

@ 15, 060 GET oCod VAR cCod OF oDlg
oCod:setFixedSize(130,25)
oCod:SetMaxLength(13)
oCod:setFocus()

@ 45, 060 GET oQta VAR nQta OF oDlg
oQta:setFixedSize(50,25)
oQta:setInputMask("
xxxx")

ACTIVATE DIALOG oDlg CENTERED

Dati->( DBCLOSEAREA() )
RETURN NIL


// ----------------------- SALVA
FUNCTION Salva( oDlg, cCod, nV, oCod, oQta )
LOCAL lOk := .F., cDes := "
"

LOCAL oLab1 := QLabel( oDlg ),;
      oLab2 := QLabel( oDlg )
     
cCod := ALLTRIM( cCod )

* --- Vuota Righe
oLab1:setText( SPACE(50)  )
oLab1:move( 65 , 60 )
oLab1:show()

oLab2:setText( SPACE(30)  )
oLab2:move( 85 , 90 )
oLab2:show()

IF !EMPTY( cCod )
   IF Dati->( DBSeek(cCod) )
      cDes := Dati->DESC
      nQta := Dati->QTA    
      lOk := .T.
   ELSE  
      cDes := "
Cod. Non Trovato"
   ENDIF
ELSE
    cDes := "
Cod. Vuoto"
ENDIF

IF lOk
   oLab1:setText( cDes  )
   oLab1:move( 65 , 90 )
   oLab1:show()

   oLab2:setText( STR(nQta)  )
   oLab2:move( 85 , 120 )
   oLab2:show()

   IF MsgYesNo("
Memorizzo Dati ?","Conferma")
      Dati->Qta += VAL( nV )
      Dati->( DBCOMMIT() )
   ENDIF

   * --- Vuota le Variabili
   oCod:SetText(SPACE(13))
   oQta:SetText("
1")

   oLab1:setText( SPACE(50))
   oLab1:move( 65 , 90 )
   oLab1:show()

   oLab2:setText( SPACE(10) )
   oLab2:move( 85 , 120 )
   oLab2:show()
ELSE
   oLab1:setText( cDes  )
   oLab1:move( 175 , 90 )
   oLab1:show()
ENDIF

cCod := SPACE(13)
oCod:setFocus()

RETURN NIL

// --------------------------------------------------------- ORDINI
FUNCTION Ordini(fADbf,fANtx,fCDbf,fCNtx,fODbf,fONtx )
LOCAL oDlg
LOCAL oCli, cCli := SPACE(5), oArt, cArt := SPACE(13)
LOCAL oQta, nQta := "
1"
LOCAL oBtnEnd, oBtnOk

USE( fADbf ) INDEX ( fANtx ) ALIAS Dati NEW
USE( fCDbf ) INDEX ( fCNtx ) ALIAS Cli NEW
*USE( fODbf ) INDEX ( fONtx ) ALIAS Ord NEW

DEFINE DIALOG oDlg TITLE "
Ordini" ;
       SIZE 300, 200

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

@ 160, 150 BUTTON oBtnOk PROMPT "
Conferma" OF oDlg ;
           ACTION Conf_Ord( oDlg, cArt, nQta, oArt, oQta )

@ 20, 020 SAY oSay PROMPT "
Cliente" OF oDlg
@ 50, 020 SAY oSay PROMPT "
Articolo" OF oDlg
@ 80, 020 SAY oSay PROMPT "
Q.tà"   OF oDlg

@ 110, 020 SAY oSay PROMPT "
Desc."  OF oDlg

@ 20, 060 GET oCli VAR cCli OF oDlg
oCli:setFixedSize(120,25)
oCli:SetMaxLength(5)
oCli:setFocus()

@ 50, 060 GET oArt VAR cArt OF oDlg
oArt:setFixedSize(130,25)
oArt:SetMaxLength(13)
*oArt:setFocus()

@ 80, 060 GET oQta VAR nQta OF oDlg
oQta:setFixedSize(50,25)
oQta:setInputMask("
xxxx")

ACTIVATE DIALOG oDlg CENTERED

Dati->( DBCLOSEAREA() )
Cli->( DBCLOSEAREA() )

RETURN NIL

// -------------------------------------------- CONF_ORD
FUNCTION Conf_Ord( oDlg, cArt, nV, oArt, oQta )
LOCAL lOk := .F., cDes := "
"

LOCAL oLab1 := QLabel( oDlg )
     
cArt := ALLTRIM( cArt )

* --- Vuota Righe
oLab1:setText( SPACE(50)  )
oLab1:move( 65 , 60 )
oLab1:show()

IF !EMPTY( cArt )
   IF DATI->( DBSeek(cArt) )
      cDes := DATI->DESC
      lOk := .T.
   ELSE  
      cDes := "
Cod. Non Trovato"
   ENDIF
ELSE
   cDes := "
Cod. Vuoto"
ENDIF

IF lOk
   oLab1:setText( cDes  )
   oLab1:move( 110 , 90 )
   oLab1:show()

   *Ord->Qta += VAL( nV )
   *Ord->( DBCOMMIT() )

   * --- Vuota le Variabili
   oArt:SetText(SPACE(13))
   oQta:SetText("
1")

   oLab1:setText( SPACE(50))
   oLab1:move( 130 , 90 )
   oLab1:show()
ELSE
   oLab1:setText( cDes  )
   oLab1:move( 130 , 90 )
   oLab1:show()
ENDIF

cArt := SPACE(13)
oArt:setFocus()

RETURN NIL

// ------------------------ ELENCO_A
FUNCTION Elenco_A( fDbf, fNtx )
local oDlg := QDialog()
local oBrw := QTableView( oDlg )
local oModel := QStandardItemModel( 3, 4, oDlg )
LOCAL nNumRecord := 0, i, oIcon
LOCAL oBtnEnd, oBtnTp, oBtnBt

* --- Dichiaro Button
@ 335, 25 BUTTON oBtnEnd PROMPT "
Abbandona" OF oDlg ;
          ACTION oDlg:End()

@ 335, 150 BUTTON oBtnTp PROMPT "
Inizio" OF oDlg ;
          ACTION Inizio( oBrw )

@ 335, 250 BUTTON oBtnBt PROMPT "
Fine" OF oDlg ;
          ACTION Fine( oBrw )

* --- Imposto Icone nei Pulsanti
*oBtnEnd:SetIcon( QIcon(xPath + "
Exit.png") )
*OBtnEnd:setIconSize(QSize(10,10))

oBtnTp:SetIcon( QIcon(xPath + "
go-top.png") )
*OBtnTp:setIconSize(QSize(65,65))

oBtnBt:SetIcon( QIcon(xPath + "
go-bottom.png") )
*OBtnBt:setIconSize(QSize(65,65))

* --- Apro File
USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW
nNumRecord := Dati->( RecCount() )

* --- Imposto Intestazione
oModel:SetHorizontalHeaderItem( 0, QStandardItem( "
Codice" ) )
oModel:SetHorizontalHeaderItem( 1, QStandardItem( "
Descrizione" ) )
oModel:SetHorizontalHeaderItem( 2, QStandardItem( "
Q.tà" ) )
oModel:SetHorizontalHeaderItem( 3, QStandardItem( "
Prezzo" ) )

* --- Carico Dati
For i = 0 TO nNumRecord
    oModel:SetItem( i, 0, QStandardItem( Dati->CODICE ) )
    oModel:SetItem( i, 1, QStandardItem( Dati->DESC ) )
    oModel:SetItem( i, 2, QStandardItem( STR(Dati->QTA) ) )
    oModel:SetItem( i, 3, QStandardItem( TRANSFORM(Dati->PRE,"
999.99") ) )
    Dati->( DBSKIP() )
NEXT

* --- Chiudo File
Dati->( DBCLOSEAREA() )

* --- Imposto Form Principale
oDlg:SetWindowTitle( "
Elenco Articoli" )
oDlg:Resize( 445, 370 )
oDlg:Center()

* --- Imposto Form Browse
oBrw:SetModel( oModel )
oBrw:Resize( 445, 330 )

* --- Imposto Larghezza Colonne della Browse
oBrw:setColumnWidth(0, 90)
oBrw:setColumnWidth(1, 190)
oBrw:setColumnWidth(2, 40)
oBrw:setColumnWidth(3, 50)

* --- Esecuzione
oBrw:show()
oDlg:Exec()

RETURN NIL

// ------------------------ ELENCO_C
FUNCTION Elenco_C( fDbf, fNtx )
local oDlg := QDialog()
local oBrw := QTableView( oDlg )
local oModel := QStandardItemModel( 1, 2, oDlg )
LOCAL nNumRecord := 0, i, oIcon
LOCAL oBtnEnd, oBtnTp, oBtnBt

* --- Dichiaro Button
@ 305, 20 BUTTON oBtnEnd PROMPT "
Abbandona" OF oDlg ;
          ACTION oDlg:End()

@ 305, 110 BUTTON oBtnTp PROMPT "
Inizio" OF oDlg ;
          ACTION Inizio( oBrw )

@ 305, 200 BUTTON oBtnBt PROMPT "
Fine" OF oDlg ;
          ACTION Fine( oBrw )

* --- Imposto Icone nei Pulsanti
*oBtnEnd:SetIcon( QIcon(xPath + "
Exit.png") )
*OBtnEnd:setIconSize(QSize(10,10))

oBtnTp:SetIcon( QIcon(xPath + "
go-top.png") )
*OBtnTp:setIconSize(QSize(65,65))

oBtnBt:SetIcon( QIcon(xPath + "
go-bottom.png") )
*OBtnBt:setIconSize(QSize(65,65))

* --- Apro File
USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW
nNumRecord := Dati->( RecCount() )

* --- Imposto Intestazione
oModel:SetHorizontalHeaderItem( 0, QStandardItem( "
Codice" ) )
oModel:SetHorizontalHeaderItem( 1, QStandardItem( "
Descrizione" ) )

* --- Carico Dati
For i = 0 TO nNumRecord
    oModel:SetItem( i, 0, QStandardItem( Dati->COD_CLI ) )
    oModel:SetItem( i, 1, QStandardItem( Dati->DES_CLI ) )
    Dati->( DBSKIP() )
NEXT

* --- Chiudo File
Dati->( DBCLOSEAREA() )

* --- Imposto Form Principale
oDlg:SetWindowTitle( "
Elenco Clienti")
oDlg:Resize( 300, 335 )
oDlg:Center()

* --- Imposto Form Browse
oBrw:SetModel( oModel )
oBrw:Resize( 300, 300 )

* --- Imposto Larghezza Colonne della Browse
oBrw:setColumnWidth(0, 50)
oBrw:setColumnWidth(1, 190)

* --- Esecuzione
oBrw:show()
oDlg:Exec()

RETURN NIL


// ------------------------ ELENCO_O
FUNCTION Elenco_O( fDbf, fNtx )
local oDlg := QDialog()
local oBrw := QTableView( oDlg )
local oModel := QStandardItemModel( 3, 4, oDlg )
LOCAL nNumRecord := 0, i, oIcon
LOCAL oBtnEnd, oBtnTp, oBtnBt

* --- Dichiaro Button
@ 335, 25 BUTTON oBtnEnd PROMPT "
Abbandona" OF oDlg ;
          ACTION oDlg:End()

@ 335, 150 BUTTON oBtnTp PROMPT "
Inizio" OF oDlg ;
          ACTION Inizio( oBrw )

@ 335, 250 BUTTON oBtnBt PROMPT "
Fine" OF oDlg ;
          ACTION Fine( oBrw )

* --- Imposto Icone nei Pulsanti
*oBtnEnd:SetIcon( QIcon(xPath + "
Exit.png") )
*OBtnEnd:setIconSize(QSize(10,10))

oBtnTp:SetIcon( QIcon(xPath + "
go-top.png") )
*OBtnTp:setIconSize(QSize(65,65))

oBtnBt:SetIcon( QIcon(xPath + "
go-bottom.png") )
*OBtnBt:setIconSize(QSize(65,65))

* --- Apro File
USE( fDbf ) INDEX ( fNtx ) ALIAS Dati NEW
nNumRecord := Dati->( RecCount() )

* --- Imposto Intestazione
oModel:SetHorizontalHeaderItem( 0, QStandardItem( "
N. Ordine" ) )
oModel:SetHorizontalHeaderItem( 1, QStandardItem( "
Cliente" ) )
oModel:SetHorizontalHeaderItem( 2, QStandardItem( "
Articolo" ) )
oModel:SetHorizontalHeaderItem( 3, QStandardItem( "
Q.ta'" ) )

* --- Carico Dati
For i = 0 TO nNumRecord
    oModel:SetItem( i, 0, QStandardItem( Dati->COD_ORD ) )
    oModel:SetItem( i, 1, QStandardItem( Dati->COD_CLI ) )
    oModel:SetItem( i, 2, QStandardItem( Dati->CODICE ) )
    oModel:SetItem( i, 3, QStandardItem( TRANSFORM(Dati->QTA,"999.99") ) )
    Dati->( DBSKIP() )
NEXT

* --- Chiudo File
Dati->( DBCLOSEAREA() )

* --- Imposto Form Principale
oDlg:SetWindowTitle( "Elenco Ordine" )
oDlg:Resize( 350, 330 )
oDlg:Center()

* --- Imposto Form Browse
oBrw:SetModel( oModel )
oBrw:Resize( 445, 330 )

* --- Imposto Larghezza Colonne della Browse
oBrw:setColumnWidth(0, 60)
oBrw:setColumnWidth(1, 60)
oBrw:setColumnWidth(2, 140)
oBrw:setColumnWidth(3, 50)

* --- Esecuzione
oBrw:show()
oDlg:Exec()

RETURN NIL

* --- Posizione Top del Browse
FUNCTION Inizio( oBrw )
oBrw:scrollToTop()
*oBrw:setCurrentCell(0,0)
oBrw:setFocus()
RETURN NIL

* --- Posizione Bottom del Browse
FUNCTION Fine( oBrw )
oBrw:scrollToBottom()
*oBrw:setCurrentCell(oBrw:rowCount()-1,0)
oBrw:setFocus()
RETURN NIL

* ----- funzioni varie

//----------------------------------------//
function IfNil( u, uDefault )
return If( ValType( u ) == "U", uDefault, u )

//----------------------------------------//
function MsgInfo( cMsg, cTitle )
  local oMsg := QMessageBox():New()
  cTitle = If( cTitle == NIL, "Information", cTitle )
  oMsg:SetText( cValToChar( cMsg ) )
  oMsg:SetWindowTitle( cTitle )
  oMsg:SetStandardButtons( 0x400 )
  oMsg:SetIcon( 1 )
  oMsg:Exec()
return nil

//----------------------------------------//
function MsgYesNo( cMsg, cTitle )
  local oMsg := QMessageBox():New()
  cTitle = If( cTitle == NIL, "Question", cTitle )
 
  oMsg:SetText( cValToChar( cMsg ) )
  oMsg:SetWindowTitle( cTitle )
  oMsg:SetStandardButtons( hb_BitOr( 0x4000, 0x10000 ) )
  oMsg:SetIcon( 4 )
return oMsg:Exec() == 0x4000

//----------------------------------------//
function cValToChar( u )
   local cType := ValType( u )
   do case
      case cType == "A"
           u = "{ ... } Len: " + AllTrim( Str( Len( u ) ) )

      case cType == "B"
           u = "{ || ... }"

      case cType == "N"
           u = AllTrim( Str( u ) )

      case cType == "L"
           u = If( u, ".T.", ".F." )

      case cType == "D"
           u = DToC( u )

      case cType == "O"
           u = u:ClassName() + " object"
           
      case cType == "U"                  
           u = "nil"
   endcase
return u
solving
 
Posts: 65
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: fivetouch

Postby Antonio Linares » Thu Jul 08, 2021 6:52 pm

There is no COD_CLI in your code
regards, saludos

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


Return to All products support

Who is online

Users browsing this forum: No registered users and 3 guests