Newsgroup: it.comp.lang.vo-clipper
Titolo: Come posso visualizzare un PDF?

Vorrei capire come è possibile visualizzare un PDF dall'interno della mia
applicazione VO.
Qualcuno mi puo' aiutare?
Grazie in anticipo.
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 wrote in message 
news:217Z221Z252Z14Y...@usenet.libero.it...


> Vorrei capire come č possibile visualizzare un PDF dall'interno della mia


 applicazione VO.
se hai installato Acrobat Reader dovresti trovarti un controllo ActiveX che 
puoi usare su qualsiasi finestra VO.
Saluti
Wolfgang


Ciao Danilo,
purtroppo usando il codice che mi suggerisci, il VO 2.6 mi ritorna il
messaggio "bad statement syntax". Dove ho sbagliato?
Grazie in anticipo.


 Grazie in anticipo.
Esiste anche un' altra soluzione oltre all'uso di shellexecute(). Essa è
un pò più macchinosa ma sicuramente più elegante ed efficiente. Come ha
detto l'amico Wolfgang, in VO, hai la possibilità di utilizzare il
controllo ActiveX di Acrobat Reader "inglobandolo" nella tua applicazione.
Da quel momento hai disponibili tutti i metodi e funzioni di Acrobat
Reader come se fossero veri e propri metodi di VO !!! (bello eh ??). 
Per fare questo devi avere installato Acrobat Reader e poi dal repository
di VO fai queste operazioni:
1)  crea un nuovo modulo Vuoto nella tua applicazione (con l'opzione new
module del menu) e selezionalo.
2) dal menu "tools" seleziona l'opzione "Setup OLE control". Ti apparirà
una finestra con l'elenco di tutti gli ActiveX installati sulla tua
macchina (vedi quanti ???), tra i quali devi selezionare "Adobe Acrobat
control for ActiveX... ( il titolo può essere diverso a seconda delle
vrsoni di Acrobat). 
3) Premi il pulsante "generate class" posto nella parte inferiore della
finestra. A questo punto vengono generati nel modulo creato, tutta una
serie di "prototipi" di riferimento a tutti i metodi e funzioni di Acrobat
Reader, compila e prosegui come ti scrivo qui di seguito. 
Adesso per utilizzare Acrobat devi creare una finestra dove inserirai il
controllo "OLE Object" preso dalla palette dei controlli (OLE).
Una volta inserito e dimensionato a piacere, devi andare nelle proprietà
del controllo e, nel tab "General" alla voce "inherit from class" devi
selezionare la classe "AdobeAcrobat". Compila il tutto.
Adesso, nel metodo PostInit() della finestra devi scrivere il seguente
codice:
METHOD PostInit(oWindow,iCtlID,oServer,uExtra) CLASS ZoomWindow
	SELF:oDCOLEObject1:CreateEmbedding("PDF.PdfCtrl.5")
	SELF:oDCOLEObject1:InitAutoObject()
RETURN NIL
 
Ti informo che il nome "PDF.PdfCtrl.5" è il nome con cui viene registrato
Acrobat nel registry di windows (vai a vedere).
A questo punto puoi utilizzare tranquillamente tutti i metodi e funzioni
del controllo. Ad esempio io ho creato il metodo :
METHOD ButtonFile( ) CLASS ZoomWindow
   LOCAL oOD AS OpenDialog
   (oOD := OpenDialog{SELF, "d:\*.pdf"}):Show()
   oDCOLEObject1:LoadFile(oOD:FileName)
   oDCOLEObject1:setCurrentPage(1)   // setto la prima pagina     
   oDCOLEObject1:Show()
RETURN NIL
Tramite il quale seleziono un file .PDF dalla dialogbox standard di Windows
e lo visualizzo nella finestra 
Carino Eh ???
ed è più efficiente e sicuro.
Con il metodo che ti ho descritto nella prima parte del messaggio, potrai
"inglobare" nelle tue applicazioni anche altri controlli ActiveX molti dei
quali sono veramente belli ed utili.
Ciao 
Enio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Acrobat nel registry di windows (vai a vedere).
Interessante. Però nel registry non ho trovato niente del genere. Ho l'Acrobat 
Reader 7 installato. Che cosa devo cercare?
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
The EMG Music page:         
http://www.emagsoftware.it/emgmusic
 

 Reader 7 installato. Che cosa devo cercare?
Prova a lanciare "regedit" e con l'opzione "trova"  cerca la stringa 
"pdfctrl"  quello che troverai è la stringa con cui Windows ha registrato
Acrobat Reader nel Registry


 Acrobat Reader nel Registry
E' proprio ciò che ho fatto ma non mi trova quella stringa. Può darsi che 
l'Acrobat Reader 7 lo chiami in un altro modo oppure che non lo installi 
affatto?


 affatto?
Ok, ci sono riuscito. Ecco un esempio funzionante scritto in xHarbour + FWH:
#include "Fivewin.ch"
FUNCTION MAIN()
    LOCAL oWnd, oPdf
    DEFINE WINDOW oWnd
    oPdf = TActiveX():New( oWnd, "{CA8A9780-280D-11CF-A24D-444553540000}" )
    oPdf:Do( "LoadFile", "nomefile" )
    oWnd:oClient = oPdf
    ACTIVATE WINDOW oWnd
    RETURN NIL


 ha scritto nel
messaggio news:4479507b$0$14787$4faf...@reader4.news.tin.it...


 ma la definizione della classe non cambia da installazione a installazione ?
No, il CLSID è univoco.


 oPdf = TActiveX():New( oWnd, "{CA8A9780-280D-11CF-A24D-444553540000}" )
Ho trovato anche un'alternativa più semplice:
oPdf = TActiveX():New( oWnd, "AcroPDF.PDF" )


 oPdf = TActiveX():New( oWnd, "AcroPDF.PDF" )
Ho notato che il processo AcroRd32.exe resta attivo dopo che il programma è 
terminato. Qualche idea su come rilasciare correttamente l'ActiveX? Non mi 
pare che esista il metodo Close() né altri metodi similari. Forse si deve 
utilizzare un'API tipo DeleteObject()?
