charlie ha scritto: ↑domenica 30 aprile 2023, 9:32
...Puoi dirci qualcosa di più?
Da cosa differisce dalla traduzione del lavoro di Andrew Pitonyak ...
Buongiorno a tutti,
il libro di Andrew Pitonyak avevo iniziato a tradurlo, qui ho modificato totalmente e preso da varie parti ...
non sono un programmatore e ho cercato di creare per uso personale un documento che mi consentisse quando avessi avuto la necessità di risolvermi qualche passaggio, da questo, per renderlo più usufruibile ad altri ho dovuto sistemarlo e ho cercato di approfondire il più possibile molti argomenti. Ho preso spunti ed esempi in varie parti, sia nella rete che nei libri (ovviamente è migliorabile ...). Mi ha tenuto occupato per quasi due anni, ho già trovato alcuni errori:
il listato 105 dovrebbe dare errore perchè nella Sub EnumerazioneParagrafi_Sottoparagrafi(oDoc) bisognerebbe commentare
e al suo posto mettere
Codice: Seleziona tutto
If Not IsNull (oDoc.Source.ImplementationName) Then oDoc = ThisComponent
poi devrebbe funzionare, probabilmente ho messo il parametro oDoc perchè forse la uso in altre parti (difficile ricordare tutto) e spero non dia errore oDoc.Source in altre parti che la richiamano. A seconda che una sub con parametro oDoc sia chiamata da un pulsante o da una altra sub il parametro passato è diverso. Bisognerebbe modificarla per includere i due casi.... - altrimenti bisognerà modificarla di nuovo. Bisognerebbe ricercare quali sub la richiamano (con la funzione cerca).
Nel listato 124 mi sono dimenticato di mettere il pulsante per l'esecuzione della macro.
ESEGUITE LA MACRO DIRETTAMENTE. Andate nella libreira LibWriter nel modulo Mdl_RefHeading_TOC ed eseguite la sub Indice_URL_Segnalibri__RefHeading__Tocnn-nn(), ma non tanto per l'esecuzione ma perchè si usano macro di questo documento e si esportano in un altro documento: da questo documento si apre un nuovo documento, si inserisce un pulsante cui accede a moduli importati ... spero di essermi fatto capire. ... oppure create voi un pulsante.
Se qualcuno vede questi errori e li risolve condividete.
TUTTA la libreria Lib_Esportare è fatta per questo: ogni modulo viene esportato in un nuovo documento:
ad esempio il listato 438
il listato 515 che è sbagliato, modificatelo così:
Codice: Seleziona tutto
'usa modulo "Mdl_Esportare1" della libreria "Lib_Esportare" del documento
Sub IdentificaNomiRiempimentoAreaBitmapDocumento()
rem ----------------------------------------------------------------------
rem definizione delle variabili
Dim oDoc As Object
Dim oCurrentController As Object
Dim oText As Object
Dim structSize As New com.sun.star.awt.Size
Dim oRectangleShape As Object
Dim strString As String
Dim strTitoloDlg As String
Dim strTestoEtichetta As String
Dim oLibs As Object 'contenitore di Librerie Basic
Dim oLib As Object 'una libreria
Dim strLib As String 'Nome della libreria
Dim strMdl As String 'Nome del modulo
Dim strMacro As String 'codice della macro
Dim oBasicLibrary_Document As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue 'Un array (vuoto) di PropertyValues
Dim oDoc_ThisComponent As Object
Dim oBasicLibraries As Object 'contenitore di Librerie - ElementType=com.sun.star.container.XNameAccess
Dim oLibraryContainer As Object 'contenitore di Librerie - com.sun.star.script.XStarBasicLibraryInfo
Dim oModuleContainer As Object
Dim oLib_ThisComponent As Object
Dim i As Integer
Dim strScript As String
Dim sScriptURL As String
Dim oControlShape As Object 'un oggetto ControlShape
Dim structPoint As Object
Dim oButtonModel As Object
Dim oDrawPage As Object
Dim oForm As Object
Dim structEvent As Object
rem ----------------------------------------------------------------------
strTitoloDlg = "apertura documento di esempio"
strTestoEtichetta = "Per non modificare il documento principale" & Chr(13) &_
"apriamo un nuovo documento e" & Chr(13) &_
"inseriamo del testo ad inizio documento"
Call Lbl_Finestre_di_Dialogo.Mdl_FinDlgNonModale_MsgBox.FinestraDialogoNonModale(strTitoloDlg, strTestoEtichetta, True, False )
If Not Boolean_Dlg_Stop Then
Exit Sub
End If
oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, FileProperties())'crea l'oggetto documento
oCurrentController = oDoc.CurrentController
oCurrentController.Frame.ContainerWindow.toFront()
oText = oDoc.getText() 'metodo dell'oggetto oDoc (com.sun.star.lang.XComponent) - oggetto di tipo SwXBodyText '
'inserimento testo
strString = Chr(13) & "Per identificare i nomi di riempimento area bitmap del rettangolo premere sul pulsante." & Chr(13) & _
"Per identificare un nome diverso cliccare con il tasto sinistro nella forma (selezionandola) " & _
"per poi cliccare con il destro e selezionare ""area"" per scegliere il riempimento bitmab da identificarne il nome." & Chr(13) & _
"Cliccare sul pulsante." & Chr(13) & _
"Potete anche cambiare sfumatura, motivo, tratteggio, colore, ecc... "
oText.insertString(oText.getStart(), strString, false) 'metodo insertString dell'interfaccia com.sun.star.text.XSimpleText
'devo caricare la libreria prima di accedervi
oBasicLibrary_Document = ThisComponent.BasicLibraries
oBasicLibrary_Document.LoadLibrary("Lib_Esportare")
'recupera il contenuto di un modulo
oDoc_ThisComponent = ThisComponent
oBasicLibraries = oDoc_ThisComponent.BasicLibraries 'com.sun.star.comp.sfx2.ScriptLibraryContainer
oLib_ThisComponent = oBasicLibraries.getByName("Lib_Esportare")
strScript = oBasicLibraries.getByName("Lib_Esportare").getByName("Mdl_Esportare1")
strLib = "Lib_Nuova"
strMdl = "Mdl_Importato"
strMacro = strScript
'Crea Libreria, modulo e macro -> EnumeraOggettiDrawPage
oLibs = oDoc.BasicLibraries 'com.sun.star.comp.sfx2.ScriptLibraryContainer (ContainerLocationName = "Basic")
oLibs.createLibrary(strLib)
oLib = oLibs.getByname(strLib) 'una libreria di nome strLib
oLib.insertByName(strMdl,strMacro)
'crea un pulsante e gli assegna la macro
'macro da assegnare al pulsante
sScriptURL = "vnd.sun.star.script:Lib_Nuova.Mdl_Importato.EnumeraOggettiRectangleShape?language=Basic&location=document" 'Was location=application
oDrawPage = oDoc.getDrawPage()
oControlShape = oDoc.createInstance("com.sun.star.drawing.ControlShape")
structPoint = CreateUnoStruct("com.sun.star.awt.Point")
structPoint.X = 1000
structPoint.Y = 1000
structSize.Width = 9000
structSize.Height = 1000
oControlShape.setPosition(structPoint)
oControlShape.setSize(structSize)
oButtonModel = CreateUnoService("com.sun.star.form.component.CommandButton")
oButtonModel.Name = "Button_1"
oButtonModel.Label = "Identifica Nomi Riempimento Area Bitmap"
oControlShape.setControl(oButtonModel)
oDrawPage.add(oControlShape)
oForm = oDrawPage.getForms().getByIndex(0)
structEvent = CreateUnoStruct("com.sun.star.script.ScriptEventDescriptor")
With structEvent
.AddListenerParam = ""
.EventMethod = "actionPerformed"
.ListenerType = "XActionListener"
.ScriptCode = sScriptURL
.ScriptType = "Script"
End With
oForm.registerScriptEvent(0, structEvent)
rem disattivare la modalità di progettazione del form
oCurrentController.setFormDesignMode(False)
'RettangleShap
structSize.Width = 10000
structSize.Height = 10000
oRectangleShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
oRectangleShape.Size = structSize
oRectangleShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
oText.insertTextContent(oText.End, oRectangleShape, False)
oRectangleShape.FillBitmapName = "Lawn"
oRectangleShape.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT
'finestra di dialogo non modale
strTitoloDlg ="oDoc.createInstance (""com.sun.star.drawing.RectangleShape"")"
strTestoEtichetta = "Possiamo modificare il riempimento per poi saperne il nome"
Call Lbl_Finestre_di_Dialogo.Mdl_FinDlgNonModale_MsgBox.FinestraDialogoNonModale(strTitoloDlg, strTestoEtichetta, True, False )
End Sub
Se si trovano errori postateli.
Buona giornata a tutti