Newsgroup: it.comp.lang.vo-clipper
Titolo: MOSTRARE UN FILE PDF DA UNA FINESTRA IN PROCEDURA VISUAL OBJECTS  2.7B

Ho questo problema: devo mostrare dei files pdf in finestra visual objects 2.7b.
ho creato, tramite Setup ole control la classe ricavata dall'active x   su sistema win 10 ( ma mi deve funzionare  anche per win seven). 
ho creato in una finestra il control Ole ed ho inserito un tasto che contiene quanto segue : 
 
METHOD ButtonFile( ) CLASS Mostradoc
   LOCAL oOD AS OpenDialog
   LOCAL dirbase AS STRING
 
	dirbase := GetDefault()
	SetDefault("C:/"+VOLO_DOC)
   (oOD := OpenDialog{SELF,  GetDefault()+"*.pdf"}):Show()
	IF !Empty(oOD:FileName)
	   oDCOLEdocumento:Loadfile_(oOD:FileName)
	   oDCOLEdocumento:setCurrentPage_(1)   // setto la prima pagina
	   oDCOLEdocumento:Show()
	ELSE
 	   WarningBox{SELF,"ATTENZIONE","FILE NON SELEZIONATO !!!"}:Show()
	ENDIF
    SetDefault(dirbase)
RETURN NIL
 
questa riga    (oOD := OpenDialog{SELF,  GetDefault()+"*.pdf"}):Show()
non funziona e da errore perché  IF !Empty(oOD:FileName) risulta vuoto, pur avendo selezionato un file pdf !!
 
questo è il postinit della finestra :
METHOD PostInit(oWindow,iCtlID,oServer,uExtra) CLASS MostraDoc
        SELF:oDCOledocumento:CreateEmbedding("PDF.PdfCtrl.5")
        SELF:oDCOledocumento:InitAutoObject()
RETURN NIL
DOMANDA: DOVE SBAGLIO ?? 
Per cortesia datemi una mano .... sono veramente in un angolo cieco.
 
Grazie a tutti voi per i vostri suggerimenti che darete a soluzione ... 
 
Mario Summa
 

Salve,
 
proverei a scrivere un po meno accorciato:
 
oOD := OpenDialog{SELF,  GetDefault()+"*.pdf"}
oOD := SetFilter( { "*.pdf" }, { "file PDF" }, 1 )
oOD:Show()
IF !Empty(oOD:FileName)
 
Saluti
 
Wolfgang

-- 
 

Ciao Wolfgang, sei sempre il NUmero 1 di questo News Group.
/*
proverei a scrivere un po meno accorciato: 
 
oOD := OpenDialog{SELF,  GetDefault()+"*.pdf"} 
oOD := SetFilter( { "*.pdf" }, { "file PDF" }, 1 ) //questa io l'ho aggiunta, ma mi da ancora errore, proprio su di questa linea, di fatto non riconosce l'istruzione "SetFilter" 
oOD:Show() 
IF !Empty(oOD:FileName) 
*/
 
Il mio problema, detto in breve è che non riesco a popolare la variabile oOD:filename con il nome del file scelto nella finestra che mostra i file da scegliere (1 per volta) e non so come fare per fare questo .....
Grazie se vorrai darmi una delle tue dritte illuminanti.
 
MArio Summa

 questo .....  Grazie se vorrai darmi una delle tue dritte illuminanti.
 
errore mio:
 
la riga deve essere 
 
oOD:SetFilter( { "*.pdf" }, { "file PDF" }, 1 )
 
Scusami tanto!
 
Wolfgang
 
 
-- 
 

 Mario Summa
 

 Mario Summa
 

Salve,
 
questo errore mi fa pensare che il modulo COM non sia inizializzato.
 
"variable not initialized" sicuramente si riferisce a "AdobePDFReader".
 
In un mio applicativo vecchio lo ho fatto in maniera differente:
 
al posto del controllo Acrobat ho posizionato un controllo
MultiLineEdit, e all'apertura ho questo codice:
 
if ! lActivated
  oDokument := AcroRead{ self, 0, Point{ oDCDok:Origin:X,
oDCDok:Origin:Y }, Dimension{ oDCDok:Size:Width, oDCDok:Size:Height } }
  oDokument:Hyperlabel := Hyperlabel{ #Dokument, "", "", "" }
  if ! oDokument:CreateEmbedding( "PDF.PdfCtrl.5" )
    ErrBox( self, 'Errore in Acrobat Reader!' )
    return false
  endif
  oDokument:InitAutoObject()
  lActivated		:= true
  oDokument:setShowToolbar( false )
endif
oDokument:LoadFile( cDokument )
oDokument:setShowToolbar( false )
oDokument:setCurrentPage( 1 )
oDokument:Show()
 
Saluti
 
Wolfgang

-- 
 

Grazie Wolfgang, appena posso provo la tua soluzione che spero essere risolutiva. nel frattempo non mi resta che ringraziarti della tua sempre utile disponibilità a darci una mano.
un saluto  Mario Summa
 

   oDokument:Hyperlabel := Hyperlabel{ #Dokument, "", "", "" }
variabile "AcroRead" non inizializzata ....
io comincio a non capirci tanto perché è per me la prima esperienza nel tentare di mostrare un file PDF !!!
E forse sbaglio impostazione .... potresti girarmi un esempio completo da usare come base alla mail 
donsu...@gmail.com
 ? non ho alternative ulteriori e se credi è l'unica strada da seguire. Grazie per quanto potrai fare ....
Mario Summa

 è l'unica strada da seguire. Grazie per quanto potrai fare ....
 
 
 
 
-- 
 


grazie per il tuo interesse al mio problema Wolfgang e aspetto tuo esempio. 

Ciao Mario,
 
purtroppo il mio codice non funzionava più, probabilmente perchè
scritto una versione Acrobat più vecchia.
 
Allora ho rifatto il tutto per una versione più recente, lo trovi quì:
 
https://www.riedmann.it/download/PDFDisplay.zip
 
 
Acrobat Reader comunque deve essere installato sul sistema.
 
Wolfgang
 
-- 
 

Intanto ti ringrazio per la tua disponibilità nel prenderti carico del mio problema che comunque vada, meriti a prescindere. Appena lo provo, spero tu lo metta a disposizione di tutti ( almeno quanti come me, sono alle prese con questo meraviglioso linguaggio, e ancora perdono le notti a risolvere problemi, anche sapendo che c'è di meglio a soluzione) cosi tutti possano esserti grati del tuo sforzo nell'aiutare, in questo gruppo.
 
A presto Wolfgang, Mario Summa


 linguaggio, 
 
VO è un linguaggio meraviglioso - ti do ragione, e fino due anni fa
non ho trovato niente di equivalente.
 
Devo però confessare che ormai preferisco X# perchè al linguaggio VO
unisce tutte le possibilità del .NET Framework (e un sacco di nuovi
elementi del linguaggio stesso).
 
Quello che gli manca ancora sono gli RDD e la runtime che però saranno
disponibili tra poco.
 
Saluti
 
Wolfgang
 
-- 
 

Ciao Wolfgang, ho fatto il mio test ed ho installato Adobe PDF reader 11( che ho pensato essere quello più diffuso ...)
Ho elaborato il tuo demo che è risultato formalmente corretto, dopo aver modificato il richiamo della classe ed assegnato i riferimenti ad essa nel software. 
l'ho lanciato e ... continua a non rilevare la classe "AcroPDF.PDF" nel modulo che ti espongo qui di seguito:
 
 METHOD DisplayFile( cPDFName AS STRING ) AS VOID PASCAL CLASS PDFDisplay
 
	_oAcroRead := AdobePDFReader{ SELF, 0, Point{ oDCPlaceholder:Origin:X, oDCPlaceholder:Origin:Y }, Dimension{ oDCPlaceholder:Size:Width, oDCPlaceholder:Size:Height } }
	oDCPlaceholder:Hide()
	_oAcroRead:Hyperlabel	:= Hyperlabel{ #Acroread, "", "", "" }
 	IF ! _oAcroRead:CreateEmbedding( "AcroPDF.PDF" )  // questa è la riga che da errore ... 
( An unhandled exception occurred in module VO27ORUN.DLL of your application !  - code: 0x0000005(EIP=0X1000A683) - Application: PDFDisplay - Module: PDFDisplay Code - Entity: PDFDisplay;DisplayFile, Line 6)
 
 	        ErrorBox{ SELF, 'Error initializing Acrobat Reader!' }:Show()
 		RETURN
 	ENDIF
	_oAcroRead:InitAutoObject()
 	_oAcroRead:setShowToolbar( FALSE )
	_oAcroRead:LoadFile_( cPDFName ) //LoadFile è cambiato nella ver. 11
 	_oAcroRead:setShowToolbar( FALSE )
 	_oAcroRead:setCurrentPage_( 1 ) //setCurrentPage è cambiato nella ver.11
	_oAcroRead:Show()
	_oAcroRead:SetFocus()
	SELF:Caption			:= "Display " + cPDFName
 
	RETURN
 
Ho voluto riportarti il tutto per tua conoscenza e nella speranza che tu, vedendo il codice di errore al completo, magari avendolo già sperimentato, puoi capire meglio il perchè di tale errore (exception !!)
Che per me è buio pesto ....
Atteno con ansia tue considerazioni.. Ciao Wolfgang, Mario Summa

Ciao Mario,
 
probabilmente Adobe Reader 11 installa un oggetto con un nome
differente. Io sto usando Adobe Reader DC, e spero che tutti usino
questa versione in quanto Adobe mantiene aggiornato solo quello.
 
Prova a vedere qui:
 
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AcroPDF.PDF
 
se trovi qualcosa del genere. La chiave "AcroPDF.PDF" è quello che ti
serve.
 
Altra possibilità (penso poco probabile) che VO 2.8 si comporta meglio
della 2.7b. Non avendo più da anni la 2.7 no ho nessuna installazione
dove potrei provare.
 
Saluti
 
Wolfgang

-- 
 

Ciao Mario,
 
allora sei riuscito a farlo funzionare?
 
Wolfgang


Ciao Wolfgang, purtroppo l'errore che ti ho mandato è stato l'ultimo atto, infatti, la versione 2.7b che ho, non supporta l'ultima versione di Adobe reader e questo, ha decretato, per forza la fine della mia ricerca. Sto tentando di provare vecchie versioni del reader (magari a 32bit) per trovare quella che meglio digerisce la versione 2.7b. Ti terrò informato, dopo tutto, se stato la spinta, in questo senso. Il solo risultato ottenuto è che le attuali versioni del reader a 64bit, necessitano di una versione (2.8 o superiori. Del nostro Visual objects...).  Questa è per ora la mia conclusione, alla luce dell'errore rilevato.  Grazie della tua pazienza e supporto.  Alla prossima occasione. MARIO SUMMA

Ciao Mario,
 
strano.... con OLE/COM si dovrebbe riuscire a superare anche il muro
dei 32/64 bit. In effetti, COM è l'unica possibilità di spedire mail
da VO tramite Outlook a 64 bit.
 
Devo vedere se trovo le nuove classi COM di VO 2.8 che si dovrebbero
anche compilare con la 2.7.
 
Saluti
 
Wolfgang

--