Ciao a tutti, buongiorno. Sono un nuovo iscritto e ho un problemino da risolvere.

99 views
Skip to first unread message

Maurizio Maurizio

unread,
Mar 30, 2021, 3:42:06 AM3/30/21
to Harbour supporto utenti in italiano
Sono sempre stato un clipper dipendente dal summer87 al 5.2 poi per cambio mansioni di lavoro ho smesso di programmare. Giorni fa e per caso mi sono imbattuto in Harbour. Non mi sembrava vero! Non ci volevo credere! ho scaricato Harbour e a parte qualche piccola modifica sono riuscito a rendere eseguibili alcuni miei vecchi programmi. il problema e le difficoltà le l'ho riscontrate quando seguendo alcune indicazioni (aiuti) mi è venuta la voglia di migrare un mio vecchio programma ad oggetti. Ho seguito passo passo quanto ben spiegato in rete  HBQT-Tutorial Giovanni Di Maria ma al momento di realizzare .exe ho iniziato ad scontrarmi con problemi su problemi (di sintassi) per risolti uno ad uno. Ora sono fermo in quanto non riesco a risolvere questo problema:

 C:\hb30\bin>hbmk2 ciao1.prg
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'ciao1.prg'...
Lines 2366, Functions/Procedures 1
Generating C source output to 'C:\Users\asus\AppData\Local\Temp\hbmk_546rms.dir\ciao1.c'... Done.
C:/Users/asus/AppData/Local/Temp/hbmk_546rms.dir/ciao1.o:ciao1.c:(.data+0x38): undefined reference to `HB_FUN_QMAINWINDOW'
C:/Users/asus/AppData/Local/Temp/hbmk_546rms.dir/ciao1.o:ciao1.c:(.data+0x88): undefined reference to `HB_FUN_QAPPLICATION'
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
C:\hb30\comp\mingw\bin\gcc.exe C:/Users/asus/AppData/Local/Temp/hbmk_546rms.dir/ciao1.o C:/Users/asus/AppData/Local/Temp/hbmk_546rms.dir/hbmk_myvz33.o    -mconsole -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -ociao1.exe  -LC:/hb30/lib/win/mingw -LC:/hb30/bin

C'è qualcuno che potrebbe darmi una mano?
Grazie, ciao.

Francesco Perillo

unread,
Mar 30, 2021, 4:05:14 AM3/30/21
to harbo...@googlegroups.com
Ciao,
così, a occhio, non hai aggiunto le librerie di hbQt....


--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/harbourITA/cc99c964-5ee5-4047-a8c3-768d381072f6n%40googlegroups.com.

Maurizio Maurizio

unread,
Mar 30, 2021, 4:37:44 AM3/30/21
to harbo...@googlegroups.com
ciao, grazie di aver risposto. Come ti allego la prima riga è proprio includo la libreria
#Include  "hbqtgui.ch"
alludi a questa libreria?
Grazie.

Francesco Perillo

unread,
Mar 30, 2021, 4:46:07 AM3/30/21
to harbo...@googlegroups.com
Quella è l'include file della libreria.

Ora non ricordo i tutorial ma da qualche parte sicuramente dice di usare hbmk2 definendo le librerie da usare. Dovrebbe spiegare anche l'uso dei file .hbp e .hbc (e forse  .hbm)...
prova a dare il comando
hbmk2 prova.prg hbqt.hbc
Ma ripeto nel tutorial deve esserci questa informazione

In pratica ti serve caricare la libreria che definisce le chiamate QApplication e tutte le alti funzioni che si interfacciano a Qt

Maurizio Maurizio

unread,
Mar 30, 2021, 5:12:21 AM3/30/21
to harbo...@googlegroups.com
Grazie 1000. In effetti usando questo comando dalla riga di comando "hbmk2 prova.prg hbqt.hbc" si compila e funaziona. 
Invece usando Hibide da sempre errore. 
Grazie 1000 ancora della tua cortese disponibilità.


Francesco Perillo

unread,
Mar 30, 2021, 6:53:35 AM3/30/21
to harbo...@googlegroups.com
Solo una piccola nota: migrare un programma clipper testuale a interfaccia grafica, che sia hbQt o altre, necessita di alcune conoscenze specifiche sulla libreria ma soprattutto cambia di molto la filosofia del codice, che da procedurale diventa a eventi. Quanto codice tu debba adattare dipende da tante cose poiché Clipper ti permetteva di ottenere lo stesso effetto in diversi modi diversi.

Ti faccio un esempio.

Io ho sempre usato (semplifico) i comandi @ x,y SAY "Campo:" GET mVar con opzionalmente WHEN e VALID. Sin dai tempi del clipper 87 avevo modificato il sistema delle GET affinché alla pressione del tasto PAGE-DOWN, che significava esci dalla READ, venisse simulata la pressione del tasto RETURN fino alla fine del form, quindi eseguendo tutte le WHEN e tutte le VALID presenti sul form. In caso di VALID negativa, il cursore si fermava li. Questo mi permetteva di fare check al volo e soprattutto di avere quelli che ora definirei side-effects: in una VALID ad esempio potevo fare una lookup di un valore dentro una tabella spostando il recno(), popolare delle variabili, etc

In un programma GUI tutto ciò non è facilmente ottenibile perché l'utente si aspetta di potersi muovere liberamente fra i campi - al massimo si aspetta un messaggio di errore informativo... indipendentemente da come si voglia risolvere il problema della validazione, ho dovuto riscrivermi tutti i form e rivedere tutte le validazioni. Nel tempo, u qualche vecchio HD dovrei avere pure un sistema che cattura tutti i movimenti di entrata uscita nei campi e aggiorna lo status dei campi, come se le WHEN venissero controllate ad ogni movimento fra campi, magari accendendo il bottone "OK/Salva" solo quando tutte le VALID sono .T.
Un'altra possibilità è quella di lasciare il bottone OK/Salva sempre attivo e fare in quel momento i controlli.

Insomma, penso che tu abbia capito: portare il codice da clipper text based a GUI comporta alcune decisioni progettuali e adattamenti di codice da valutare attentamente.


Maurizio Maurizio

unread,
Mar 30, 2021, 10:34:45 AM3/30/21
to harbo...@googlegroups.com
Ciao, buon pomeriggio. Grazie per la tua disponibilità.Quello che hai scritto lo immaginavo e diciamo che ne sarei preparato in quanto ho già realizzato alcuni programmini in visual basic e visual studio successivamente. Ripeto che sono più di 20 anni che non programmo più se non per emergenza, perciò diciamo che sono abbastanza arrugginito anche se visual studio l'ho usato qualche anno fa. Vorrei dire che modificare un mio vecchio e onorato prg clipper è quasi una sfida perchè mi ricorda i bei tempi di allora. E l'accetto. il problema è che sto perdendo un casino di tempo con la compilazione in quanto adesso, dopo aver aggiunto tre righe, mi ritrovo i nuovo con il problema di non riuscire a compilare. sicuramente sarà un problema di librerie ma non riesco a venirne fuori. sto leggendo in manuale  Tutorial  scritto da  Giovanni Di Maria  ma non ne esco. Hbmk2 mi restituisce sempre l'errore identico. ti allego il report:

C:\hb30\bin>hbmk2 ciao1.prg hbtc.hbc
hbmk2: Error: Opening: hbtc.hbc

Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'ciao1.prg'...
Lines 2374, Functions/Procedures 1
Generating C source output to 'C:\Users\asus\AppData\Local\Temp\hbmk_jd1jor.dir\ciao1.c'... Done.
C:/Users/asus/AppData/Local/Temp/hbmk_jd1jor.dir/ciao1.o:ciao1.c:(.data+0x38): undefined reference to `HB_FUN_QMAINWINDOW'
C:/Users/asus/AppData/Local/Temp/hbmk_jd1jor.dir/ciao1.o:ciao1.c:(.data+0x68): undefined reference to `HB_FUN_QPALLETTE'
C:/Users/asus/AppData/Local/Temp/hbmk_jd1jor.dir/ciao1.o:ciao1.c:(.data+0x88): undefined reference to `HB_FUN_QCOLOR'
C:/Users/asus/AppData/Local/Temp/hbmk_jd1jor.dir/ciao1.o:ciao1.c:(.data+0xc8): undefined reference to `HB_FUN_QAPPLICATION'

collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
C:\hb30\comp\mingw\bin\gcc.exe C:/Users/asus/AppData/Local/Temp/hbmk_jd1jor.dir/ciao1.o C:/Users/asus/AppData/Local/Temp/hbmk_jd1jor.dir/hbmk_ilfpqf.o    -mconsole -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -ociao1.exe  -LC:/hb30/lib/win/mingw -LC:/hb30/bin

C:\hb30\bin>

Confido nella tua esperienza e gradita disponibilità.
Grazie, buon pomeriggio.

Francesco Perillo

unread,
Mar 30, 2021, 11:10:24 AM3/30/21
to harbo...@googlegroups.com
fotse perché hai sbagliato a digitare?

C:\hb30\bin>hbmk2 ciao1.prg hbtc.hbc
hbmk2: Error: Opening: hbtc.hbc

Maurizio Maurizio

unread,
Mar 30, 2021, 11:45:22 AM3/30/21
to Harbour supporto utenti in italiano
questa volta ho digitato giusto, l'errore rimane quello ti copio risposta Harbour

 C:\hb30\bin>hbmk2 ciao1.prg hbqt.hbc
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'ciao1.prg'...
Lines 2376, Functions/Procedures 1
Generating C source output to 'C:\Users\asus\AppData\Local\Temp\hbmk_wf2bj4.dir\ciao1.c'... Done.
C:/Users/asus/AppData/Local/Temp/hbmk_wf2bj4.dir/ciao1.o:ciao1.c:(.data+0x38): undefined reference to `HB_FUN_QMAINWINDOV'
C:/Users/asus/AppData/Local/Temp/hbmk_wf2bj4.dir/ciao1.o:ciao1.c:(.data+0x68): undefined reference to `HB_FUN_QPALLETTE'
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
C:\hb30\comp\mingw\bin\gcc.exe C:/Users/asus/AppData/Local/Temp/hbmk_wf2bj4.dir/ciao1.o C:/Users/asus/AppData/Local/Temp/hbmk_wf2bj4.dir/hbmk_7lkmae.o C:/Users/asus/AppData/Local/Temp/hbmk_wf2bj4.dir/hbmk_lcjtt9.o    -mwindows -Wl,--start-group -lsupc++ -lhbqtcore -lQtCore4 -lhbqtgui -lQtGui4 -lhbqtnetwork -lQtNetwork4 -lhbqtsql -lQtSql4 -lgtqtc -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -ociao1.exe  -LC:/hb30/lib/win/mingw -LC:/hb30/bin

C:\hb30\bin>

Francesco Perillo

unread,
Mar 30, 2021, 11:47:30 AM3/30/21
to harbo...@googlegroups.com
Maurizio maurizio...

qmainwindoW con la w finale

e dovrebbe essere qpalette...

Maurizio Maurizio

unread,
Mar 30, 2021, 12:05:03 PM3/30/21
to harbo...@googlegroups.com
Francesco porta pazienza, sono più arrugginito di un ferro vecchio e poi l'età..... mi sono smarrito in errori elementari.
Comunque GRAZIE MILLE della tua pregiata assistenza.
ps: funziona....
Ciao, buona serata.

Maurizio Maurizio

unread,
Apr 1, 2021, 4:19:33 AM4/1/21
to Harbour supporto utenti in italiano
Ciao Francesco, buongiorno, scusa se ti disturbo. per quando riguarda i miei vecchi prg clipper con qualche piccola modifica funzionano tutti. ora sto cercando di familiarizzare un po con la migrazione verso ad oggetti, sempre di harbour. Tanto per capirci qualcosa ho copiato di sana pianta un esempio di append blank pubblicato da Giovanni Di Maria. ho cercato di prestare attenzione ai spazi vuoti che copia/incolla di windows mette a caso. Ho aggiunto un mio dbf  e ho compilato. Non segnala errori e l'eseguibile viene creato ma non si lancia, oppure si lancia ed esce. da notare che se inibisco alla compilazione la riga  oButton:Connect( "clicked()", { || store( oName, oBorn, oSons ) } )  il programma si lancia e chiaramente non inserisce in archivio dbf i dati. ti copio il sorgente:

 oButton:Connect( "clicked()", { || store( oName, oBorn, oSons ) } ) 
 
  oWnd:show() 
  QApplication():exec()
 
RETURN
   
PROCEDURE STORE(oName, oBorn, oSons) 
   USE MioArc.dbf 
   APPEND BLANK 
   REPLACE cognome WITH oName:text() 
   REPLACE nascita WITH CToD( oBorn:text() ) 
   REPLACE figli WITH Val( oSons:text() ) 
   USE 
RETURN
 
non riesco a capire dove sta il misterioso errore, conto sulla tua pregiata disponibilità. 
Grazie
Buona giornata

Francesco Perillo

unread,
Apr 1, 2021, 4:33:00 AM4/1/21
to harbo...@googlegroups.com
il sorgente non può essere solo quello... mi mandi il link del tutorial che vorrei controllare una cosa.. 

Maurizio Maurizio

unread,
Apr 1, 2021, 4:39:28 AM4/1/21
to Harbour supporto utenti in italiano
il link è questo: http://www.elektrosoft.it/tutorials/hbqt/hbqt.asp
 ti copio tutto il prg

// SOURCE  Append. prg

#include "hbqtgui.ch"

PROCEDURE Main()
  
  LOCAL oWnd
  LOCAL oName, oLabel1 
  LOCAL oBorn, oLabel2 
  LOCAL oSons, oLabel3 
  LOCAL oButton 
 
  SET DATE ITALIAN
  SET CENTURY ON 
 
  oWnd := QMainWindow()
  oWnd: setWindowTitle ("Finestra di Giovanni") 
  oWnd: resize ( 400, 300 ) 
 
  oLabel1 := QLabel( oWnd ) 
  oLabel1:setText( "Name" ) 
  oLabel1:move( 50, 50 ) 
  oLabel1:resize( 100, 20 ) 
 
  oName := QLineEdit( oWnd ) 
  oName:move( 160, 50 ) 
  oName:resize( 150, 20 )
  
  oLabel2 := QLabel( oWnd ) 
  oLabel2:setText( "Date of birth" ) 
  oLabel2:move( 50, 80 )
  oLabel2:resize( 100, 20 ) 
 
  oBorn := QLineEdit( oWnd ) 
  oBorn:move( 160, 80 ) 
  oBorn:resize( 90, 20 ) 
 
  oLabel3 := QLabel( oWnd ) 
  oLabel3:setText( "Numero di figli" ) 
  oLabel3:move( 50, 110 ) 
  oLabel3:resize( 100, 20 ) 
 
  oSons := QLineEdit( oWnd ) 
  oSons:move( 160, 110 ) 
  oSons:resize( 50, 20 ) 
 
  oButton := QPushButton( oWnd ) 
  oButton:setText( "Save" ) 
  oButton:move( 150, 200 ) 
  oButton:Connect( "clicked()", { || store( oName, oBorn, oSons ) } ) 
 
  oWnd:show() 
  QApplication():exec()
 
RETURN
   
PROCEDURE STORE(oName, oBorn, oSons) 
   USE MioArc.dbf.accdb
   APPEND BLANK 
   REPLACE cognome WITH oName:text() 
   REPLACE nascita WITH CToD( oBorn:text() ) 
   REPLACE figli WITH Val( oSons:text() ) 
   USE 
RETURN
 

Grazie

Maurizio Maurizio

unread,
Apr 7, 2021, 2:41:44 AM4/7/21
to Harbour supporto utenti in italiano
Concludendo questo mio breve ma intenso viaggio posso ritenermi soddisfatto che Harbour abbia ridato vita ai miei vecchi programmi in Clipper. chiaramente ho dovuto apportare delle modifiche ma tutto sommato mi sono divertito ed ho pure rivissuto i ricordi di quei splendidi anni. Altrettanto non posso dire della programmazione ad oggetti di Harbour. Non sono riuscito a trovare un elenco (manuale) delle funzioni, comandi, ecc. ecc... e questo mi ha spinto ad orientarmi di nuovo sul visual studio. Mi chiedo, forse sono un incapace e non lo discuto, ma in rete non esiste un manuale dettagliato sulla programmazione ad oggetti?
colgo l'occasione per ringraziare  salutare.

Maurizio la Cecilia

unread,
Apr 7, 2021, 2:55:55 AM4/7/21
to harbo...@googlegroups.com
Qui trovi il reference più aggiornato, ma ce ne sono altri:

https://github.com/Petewg/harbour-core/wiki


Questa è una lista di tutte le risorse:


--
Maurizio

dfpro...@gmail.com

unread,
Apr 7, 2021, 3:03:54 AM4/7/21
to Harbour supporto utenti in italiano
Ciao Maurizio
posso dirti che la mancanza di documentazione è il reale problema di harbour
abbiamo una ferrari ma dobbiamo andarci a 30 all'ora perché non sappiamo dove è l'acceleratore.

io faccio in questo modo: ho installato astrogrep (http://astrogrep.sourceforge.net/) e gli faccio cercare esempi/doc nella cartella c:\minigui  .. non è elegante ma raggiungo lo scopo.

anche io vengo dal visual studio e dopo tanto studiare lo ho abbandonato senza guardarmi indietro :-)

harbour è una cannonata, se avesse una documentazione adeguata si metterebbe in tasca i concorrenti più blasonati e attirerebbe programmatori più giovani
altro che compatibilità  con clipper, sarebbe il leader dei gestionali e non solo.

io la prima volta che ho visto dbase e clipper me ne sono innamorato, quel codice assolutamente chiaro e leggibile e la velocità di esecuzione ... che dire ?

quando uscì il visual studio lo montai sul portatile più veloce per l'epoca, l'apertura di un database MS sql costò 10 secondi (!) ma scherziamo?

dopo anni lo ho ripreso ma sono restato deluso ancora.

ammetto che riprendere con harbour non è stato semplice ma grazie ai tutorial di Di Maria e dell'amico Walter ho cominciato, e posso dire che la sensazione di 
dire "sono tornato" mi ha migliorato la vita.

ho completato un programma che legge e scrive excel, legge txt e lo modifica in memoria per poi scrivere sul disco ... e a parte l'ole (Microsoft) è una pallottola

e pensavo proprio questo, se l'avessi fatto in vb.net che soddisfazione ne avrei avuto ??

pensaci un po su, se possiamo aiutarti siamo tutti qui !

Daniele

Maurizio Maurizio

unread,
Apr 7, 2021, 3:45:38 AM4/7/21
to harbo...@googlegroups.com
Ringrazio Maurizio e Daniele.
Concordo con quanto scritto da Daniele. Clipper / db3 che sogno, anzi realtà stupenda. Pensa che Clipper lo insegnavano anche all'università. Morire così è stata una grande delusione. Concordo con te che non c'è nessun piacere a programmare in visual studio e a volte ti ritrovi a .... perchè il sistema stesso si blocca. A me piacerebbe, anzi vorrei continuare a sviluppare ad oggetti in harbour. concordo anche che se ci fosse più documentazione ed esempi che potrebbero aiutare i giovani o i vecchi arrugginiti come me Harbour farebbe le scarpe a tanti. Io ora, grazie anche a Maurizio che mi ha suggerito alcuni link proverò a buttarci del tempo, confidando anche nell'aiuto di tutti quelli più esperti di me.
Grazie, Buona giornata.

Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/harbourITA/OfDzgnHgFx8/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a harbourITA+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/harbourITA/7e69be4b-5002-4008-b54d-f8bab7d6a406n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages