Pagina 1 di 1

RISOLTO Finetra di dialogo non modale

Inviato: sabato 25 dicembre 2021, 10:27
da gino62
Buon Natale a tutti.
Ho un problema con le finestre di dialogo non modali.
Allego un file in cui è spiegato dettagliatamente il problema.
Non riesco a modificare la posizione, se lo faccio step to step la routine modifica la posizione, altrimenti no.
Modificando la sub non riesco più a chiudere la finestra.
Grazie e buone feste

Re: Finetra di dialogo non modale

Inviato: lunedì 27 dicembre 2021, 18:53
da geovign
Ciao @gino62
provo a risponderti io, per quanto possibile ed in base alle mie conoscenze.
- Posizione finestra
Non ho riscontrato il problema da te segnalato. Alla modifica delle coordinate x e y, corrisponde una posizione diversa della finestra. Per quanto ne so, l'istruzione oDialogControl.Execute() non influisce sulla posizione della finestra...
In alternativa poi provare ad usare

Codice: Seleziona tutto

With oDialogModel
.setPropertyValue("PositionX",100) 
.setPropertyValue("PositionY",300)	
.setPropertyValue("Width",120)
.setPropertyValue("Height",120)
.setPropertyValue("Title","Titolo della finestra di dialogo") 
.setPropertyValue("Name","NomeFinestra1")
.setPropertyValue("DesktopAsParent",True)
End With
oppure inserire dopo oDialogControl.setModel( oDialogModel ) questa riga

Codice: Seleziona tutto

oDialogControl.setPosSize(100,300, , ,com.sun.star.awt.PosSize.POS) 'x=100,y=300,w="",h=""  
che modifica le sole coordinate x e y della finestra.
- Chiusura finestra con "x" nella barra del titolo
Il pulsante "x" nella barra del titolo è attivo solamente nelle finestre modali; nelle finestre non modali è disattivato e credo non attivabile.
- Errore nella chiusura della finestra abbinata a Sub FinestraDialogoNonModale2
Nel tuo caso specifico hai dichiarato la variabile oDialogControl come Private e pertanto al termine della Sub FinestraDialogoNonModale2, detta variabile cessa di vivere. Quando chiami la Sub NomeTasto2_actionPerformed( oEvent ) , con la pressione del pulsante presente in finestra, l'oggetto oDialogControl non è più definito quindi ti evidenzia l'errore. Per ovviare a ciò devi dichiarare la variabile oDialogControl come Global.
- Finestre modali
Le finestre modali si eseguono con .Execute() e si chiudono sempre con .endExecute() . Preferibilmente create con Basic IDE.
Le finestre modali non consentono nessun'altra azione del programma fino alla loro chiusura (sospendono l'esecuzione della macro). Alla chiusura della finestra, la macro riprende fino al naturale termine. Le variabili definite nella macro (siano esse locali o private) sono ancora utilizzabili dopo la chiusura della finestra.
- Finestre non modali
Le finestre non modali si visualizzano con .setVisible(True) e si chiudono sempre con .setVisible(False). Si possono creare anche con codice.
Le finestre non modali non sospendono la macro e sono utilizzabili solamente al suo termine. Le variabili definite nella macro sono utilizzabili solamente se dichiarate Global.
Scusate la lungaggine nella spiegazione...
Auguri a tutti
Geo

Re: Finetra di dialogo non modale

Inviato: mercoledì 29 dicembre 2021, 19:25
da gino62
Grazie Geo della risposta.
Uso LibreOffice 7.0.4.2 su Debian 11 (bullseye).
Con le istruzioni alterative (ambedue) non è cambiato nulla.

Per quanto riguarda l’errore SubFinestraDialogoNonModale2 è proprio come hai spiegato: con la dichiarazione Global tutto funziona … credevo che le variabili private fossero disponibili in tutto il modulo (in tutte le sub del modulo).

Grazie per le spiegazioni.
… ricambio gli auguri a tutti voi.

Metto Risolto perchè l'errore non è comune, non dipende da libreoffice ...

Re: RISOLTO Finetra di dialogo non modale

Inviato: giovedì 30 dicembre 2021, 8:35
da charlie
Sistema corretto per aggiungere [Risolto] viewtopic.php?f=2&t=5661