Dialog di "intrattenimento"

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Dialog di "intrattenimento"

Messaggio da giuserpe »

Ciao,
quando metto in esecuzione una macro che fa parecchie operazioni portando via del tempo, avvio un dialog con l'istruzione che segue.

Codice: Seleziona tutto

CreateUnoDialog(DialogLibraries.UltimusFree2.DialogAttesa).Execute()
Mi piacerebbe che il dialog rimanesse attivo fino alla fine dell'esecuzione del macro. Come è possibile farlo.
Ultima modifica di giuserpe il lunedì 30 gennaio 2017, 23:44, modificato 1 volta in totale.
LibreOffice fresh su Windows e Linux
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Dialog di "intrattenimento"

Messaggio da patel »

sarebbe meglio vedere un file di esempio, ma prova con

Codice: Seleziona tutto

Private Sub DlgClose          
	Me.endExecute()    
End sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Dialog di "intrattenimento"

Messaggio da giuserpe »

Ciao,
torno dopo tempo su questo argomento perché ho risolto, ma con Python:

Codice: Seleziona tutto

psm = uno.getComponentContext().ServiceManager
dp = psm.createInstance("com.sun.star.awt.DialogProvider")
oDialogo_attesa = dp.createDialog("vnd.sun.star.script:UltimusFree2.DlgAttesa?language=Basic&location=application")
########################################################################
class attesa (threading.Thread):
    #~ http://bit.ly/2fzfsT7
    '''avvia il dialogo di attesa'''
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        oDialog1Model = oDialogo_attesa.Model # oDialogo_attesa è una variabile generale
        oDialog1Model.Title = 'Operazione in corso...'
        sUrl = LeenO_path()+'/icons/y4RRIFJ.gif'
        oDialogo_attesa.getModel().ImageControl1.ImageURL=sUrl
        oDialogo_attesa.execute()
########################################################################
def firme_in_calce (arg=None):
    attesa().start() # avvia il diaolgo di attesa che viene chiuso alla fine con oDialogo_attesa.endExecute()
    '''
    Inserisce (in COMPUTO o VARIANTE) un riepilogo delle categorie
    ed i dati necessari alle firme
    '''
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.CurrentController.ActiveSheet
    oDoc.CurrentController.ZoomValue = 400
    if oSheet.Name in ('COMPUTO', 'VARIANTE', 'CONTABILITA'):
        lRowF = ultima_voce(oSheet)+2

    oDoc.CurrentController.setFirstVisibleRow(lRowF-2)
    lRowE = getLastUsedCell(oSheet).EndRow
    for i in range(lRowF, getLastUsedCell(oSheet).EndRow+1):
        if oSheet.getCellByPosition(0, i).CellStyle == "Riga_rossa_Chiudi":
            lRowE = i
            break
    if lRowE > lRowF+1:
        oSheet.getRows().removeByIndex(lRowF, lRowE-lRowF)
    #~ else:
    riga_corrente = lRowF+2
    if oDoc.getSheets().hasByName('S2') == True:
        ii = 11
        vv = 18
        ss = 41
        col ='S'
    else:
        ii = 8
        vv = 9
        ss = 9
        col ='J'
    oSheet.getRows().insertByIndex(lRowF, 17)
    oSheet.getCellRangeByPosition(0, lRowF, ss, lRowF+17-1).CellStyle = 'ULTIMUS'
#~ INSERIMENTO TITOLO
    oSheet.getCellByPosition(2 , riga_corrente).String = 'Riepilogo Categorie'
    oSheet.getCellByPosition(ii , riga_corrente).String = 'Incidenze %'
    oSheet.getCellByPosition(vv , riga_corrente).String = 'Importi €'
    oSheet.getCellRangeByPosition (ii,riga_corrente,vv,riga_corrente).CellStyle = "Ultimus_centro"
    inizio_gruppo = riga_corrente
    riga_corrente += 1
    for i in range (0, lRowF):
        if oSheet.getCellByPosition(1 , i).CellStyle == 'Livello-0-scritta':
            #~ chi(riga_corrente)
            oSheet.getRows().insertByIndex(riga_corrente,1)
            oSheet.getCellByPosition(1 , riga_corrente).Formula = '=B' + str(i+1) 
            oSheet.getCellByPosition(1 , riga_corrente).CellStyle = 'Ultimus_destra'
            oSheet.getCellByPosition(2 , riga_corrente).Formula = '=C' + str(i+1)
            #~ chi(formulaSCat)
            oSheet.getCellByPosition(ii , riga_corrente).Formula = '=' + col + str(riga_corrente+1) + '/' + col + str(lRowF) + '*100'
            oSheet.getCellByPosition(ii, riga_corrente).CellStyle = 'Ultimus %'
            oSheet.getCellByPosition(vv , riga_corrente).Formula = '='+ col + str(i+1) 
            oSheet.getCellByPosition(vv , riga_corrente).CellStyle = 'Ultimus_totali'
            riga_corrente += 1
        elif oSheet.getCellByPosition(1 , i).CellStyle == 'Livello-1-scritta':
            #~ chi(riga_corrente)
            oSheet.getRows().insertByIndex(riga_corrente,1)
            oSheet.getCellByPosition(1 , riga_corrente).Formula = '=B' + str(i+1) 
            oSheet.getCellByPosition(1 , riga_corrente).CellStyle = 'Ultimus_destra'
            oSheet.getCellByPosition(2 , riga_corrente).Formula = '=CONCATENATE ("   ";C' + str(i+1) + ')'
            #~ chi(formulaSCat)
            oSheet.getCellByPosition(ii , riga_corrente).Formula = '=' + col + str(riga_corrente+1) + '/' + col + str(lRowF) + '*100'
            oSheet.getCellByPosition(ii, riga_corrente).CellStyle = 'Ultimus %'
            oSheet.getCellByPosition(vv , riga_corrente).Formula = '='+ col + str(i+1) 
            oSheet.getCellByPosition(vv , riga_corrente).CellStyle = 'Ultimus_bordo'
            riga_corrente += 1
        elif oSheet.getCellByPosition(1 , i).CellStyle == 'livello2 valuta':
            #~ chi(riga_corrente)
            oSheet.getRows().insertByIndex(riga_corrente,1)
            oSheet.getCellByPosition(1 , riga_corrente).Formula = '=B' + str(i+1) 
            oSheet.getCellByPosition(1 , riga_corrente).CellStyle = 'Ultimus_destra'
            oSheet.getCellByPosition(2 , riga_corrente).Formula = '=CONCATENATE ("      ";C' + str(i+1) + ')'
            #~ chi(formulaSCat)
            oSheet.getCellByPosition(ii , riga_corrente).Formula = '=' + col + str(riga_corrente+1) + '/' + col + str(lRowF) + '*100'
            oSheet.getCellByPosition(ii, riga_corrente).CellStyle = 'Ultimus %'
            oSheet.getCellByPosition(vv , riga_corrente).Formula = '='+ col + str(i+1) 
            oSheet.getCellByPosition(vv , riga_corrente).CellStyle = 'ULTIMUS'
            riga_corrente += 1
    #~ riga_corrente +=1
    oSheet.getCellByPosition(2 , riga_corrente).String= 'T O T A L E   €'
    oSheet.getCellByPosition(2 , riga_corrente).CellStyle = 'Ultimus_destra'
    oSheet.getCellByPosition(vv , riga_corrente).Formula = '=' + col + str(lRowF) 
    oSheet.getCellByPosition(vv , riga_corrente).CellStyle = 'Ultimus_Bordo_sotto'
    fine_gruppo = riga_corrente
#~ DATA
    oSheet.getCellByPosition(2 , riga_corrente+3).Formula = '=CONCATENATE("Data, ";TEXT(NOW();"DD/MM/YYYY"))'
#~ consolido il risultato
    oRange = oSheet.getCellByPosition(2 , riga_corrente+3)
    flags = (oDoc.createInstance('com.sun.star.sheet.CellFlags.FORMULA'))
    aSaveData = oRange.getDataArray()
    oRange.setDataArray(aSaveData)
    
    oSheet.getCellByPosition(2 , riga_corrente+5).Formula = 'Il Progettista'
    oSheet.getCellByPosition(2 , riga_corrente+6).Formula = '=CONCATENATE ("(";S2.C13;")")'
    oSheet.getCellRangeByPosition(2 , riga_corrente+5, 2 , riga_corrente+6).CellStyle = 'Ultimus_centro'

    oDialogo_attesa.endExecute()
    oDoc.CurrentController.ZoomValue = 100
########################################################################
class myThread2 (threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        firme_in_calce ()
########################################################################
def main (arg=None):
myThread2().start()
in pratica:
1. definisco ed inizializzo il dialogo come variabile generale
2. definisco la classe che lo avvia
3. all'inizio dello script che mi interessa avvio la classe con attesa().start() che viene chiuso alla sua conclusione con oDialogo_attesa.endExecute()
4. metto il firme_in_calce () nella classe myThread2()
5. quindi def main () che è il comando che utilizzo

Naturalmente DlgAttesa è un dialogo già pronto che ho definito con l'IDE di Basic.
A questo punto la domanda è un'altra: è possibile inserire in un dialogo una gif animata?
Le due righe:

Codice: Seleziona tutto

        sUrl = LeenO_path()+'/icons/y4RRIFJ.gif'
        oDialogo_attesa.getModel().ImageControl1.ImageURL=sUrl
servirebbero a questo, ma la gif rimane immobile.
LibreOffice fresh su Windows e Linux
Rispondi