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.
fivetouch
Moderator: Enrico Maria Giordano
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 76 times
- Contact:
Re: fivetouch
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...
https://github.com/FiveTechSoft/mod_harbour
mod_harbour web apps run on any device: Android, iOS, smartTV, PCs...
Re: fivetouch
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.
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.
Re: fivetouch
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 :
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
#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
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 76 times
- Contact: