Focus su pulsante di scelta in finestra dialogo

Creare una macro - Scrivere uno script - Usare le API
Rispondi
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Focus su pulsante di scelta in finestra dialogo

Messaggio da geovign »

Un saluto al forum.
Quando apro la finestra di dialogo, vorrei portare il focus direttamente sul primo pulsante di scelta (OptionButton1).
Pur inserendo nel codice l'istruzione

Codice: Seleziona tutto

dlgStam.getControl("OptionButton1").setFocus()

quando apro la finestra di dialogo, risulta sempre evidenziato (colorato in blu) il pulsante abilitato; quindi il focus resta sul pulsante.
I pulsanti di scelta devono appartenere allo stesso gruppo, quindi la sequenza di attivazione deve essere consecutiva (la scelta di uno esclude gli altri).
Questo è il codice che ho scritto

Codice: Seleziona tutto

sub ApriDialog1
DialogLibraries.LoadLibrary( "Standard" )
dlgStam = CreateUnoDialog(DialogLibraries.Standard.Dialog_Stampa)
dlgStam.getControl("OptionButton1").setFocus()
dlgStam.Execute()	
End sub
e che trovate nel file allegato.
E' possibile farlo?
Saluti
Geo
Allegati
OptionButton_focus.ods
(10.86 KiB) Scaricato 149 volte
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus su pulsante di scelta in finestra dialogo

Messaggio da Gaetanopr »

Ti basta andare tra le proprietà del pulsante in questione e su stato impostare - selezionato.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Focus su pulsante di scelta in finestra dialogo

Messaggio da geovign »

Ciao Gaetanopr,
Invece, come quella nell'immagine è possibile?
Si tratta della stessa finestra di dialogo, ma completa di tutte le caselle di controllo create sulla base delle tabelle e dei corpi aziendali esistenti.
Rappresenta lo stato della finestra dopo avere eseguito una stampa ed avere "cancellato" le scelte fatte.
Solo che non riesco a replicarla quando la apro.
Grazie.
Geo
Allegati
pippo.jpg
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Focus su pulsante di scelta in finestra dialogo

Messaggio da Gaetanopr »

Non ho capito bene, quando la riapri come si presenta? Allega immagine di come si presenta all'apertura e di come vorresti che fosse.
Sarebbe meglio il file
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Focus su pulsante di scelta in finestra dialogo

Messaggio da geovign »

Nel file allegato troverai le due immagini della finestra di dialogo di come appare adesso e di come vorrei che apparisse.
Sempre nel file, troverai anche il codice che ho scritto per l'apertura della finestra di dialogo e che comunque riporto sotto.

Codice: Seleziona tutto

sub ApriDialog_Stampa
rem apro finestra dialogo
	'carico librerie dialogo
	'DialogLibraries.LoadLibrary( "Sandard" )
	'creo oggetto finestra
	Dim dlgStam As Object
	dlgStam = CreateUnoDialog(DialogLibraries.Standard.Dialog_Stampa)
	'genero le checkbox suddivise in due gruppi: TabellaGenerica
	dim ArrTabellaGenerica() as String
	dim i as integer
	Dim NumeroCheckBoxStampa as integer
	dim CheckBox as Object
	dim CheckBoxModel as object
	dim TabellaGenerica() as Object
	dim tg as integer
	ArrTabellaGenerica = Array("Intestazione","Arch. Fertilizzanti","Arch. Fitofarmaci","Mag. Fertilizzanti", _
	"Mag. Fitosanitari")
	For i = LBound(ArrTabellaGenerica) to Ubound(ArrTabellaGenerica)
		NumeroCheckBoxStampa = NumeroCheckBoxStampa +1
		CheckBox = createUnoService("com.sun.star.awt.UnoControlCheckBox")
		CheckBoxModel = dlgStam.Model.createInstance("com.sun.star.awt.UnoControlCheckBoxModel")
		CheckBox.setModel(CheckBoxModel)
		dlgStam.addControl("CheckBox" & NumeroCheckBoxStampa,CheckBox)		
		Redim Preserve TabellaGenerica(tg) as object
		TabellaGenerica(tg) = dlgStam.getControl("CheckBox" & NumeroCheckBoxStampa)
		tg = tg + 1
		With dlgStam.getControl("CheckBox" & NumeroCheckBoxStampa).getModel
			.Enabled = True
			.Label = ArrTabellaGenerica(i)
			.State = 0
			.Enabled = 0
		end with
		Set CheckBox = nothing
		Set CheckBoxModel = nothing
	next i
	'genero le checkbox suddivise in due gruppi:TabellaCorpi
	dim ArrTabellaCorpo() as string	
	dim TabellaCorpo() as object
	dim tc as integer
	ArrTabellaCorpo = Array("Appezzamenti","Fertilizzazioni","Trattamenti","Maturità/Raccolta", _
	"Precipitazioni","Irrigazioni","Rilievi","Rame metallo","Altre Op. Culturali")
	For i = LBound(ArrTabellaCorpo) to Ubound(ArrTabellaCorpo)
		NumeroCheckBoxStampa = NumeroCheckBoxStampa +1
		CheckBox = createUnoService("com.sun.star.awt.UnoControlCheckBox")
		CheckBoxModel = dlgStam.Model.createInstance("com.sun.star.awt.UnoControlCheckBoxModel")
		CheckBox.setModel(CheckBoxModel)
		dlgStam.addControl("CheckBox" & NumeroCheckBoxStampa,CheckBox)		
		Redim Preserve TabellaCorpo(tc) as object
		TabellaCorpo(tc) = dlgStam.getControl("CheckBox" & NumeroCheckBoxStampa)
		tc = tc + 1
		With dlgStam.getControl("CheckBox" & NumeroCheckBoxStampa).getModel
			.Enabled = True
			.Label = ArrTabellaCorpo(i)
			.State = 0
			.Enabled = 0
		end with
		Set CheckBox = nothing
		Set CheckBoxModel = nothing
	next i
	'dispongo le checkbox in due colonne: prima colonna "Tabelle generiche"
	dim PosizioneX as integer
	dim PosizioneY as integer
	PosizioneX = 10
	PosizioneY = 80
	For i = Lbound(TabellaGenerica) to Ubound(TabellaGenerica)
		CheckBox = TabellaGenerica(i)
		'posizione e dimensione checkbox		
		With CheckBox.getModel
			.PositionX = PosizioneX
			.PositionY = PosizioneY
			.Width = 65
			.Height = 10
		end with
		'ridefinisco la posizione Y per successiva checkbox
		PosizioneY = PosizioneY  +11
		Set CheckBox = nothing
	next i
	Redim Preserve TabellaGenerica() As Object : Set TabellaGenerica() = nothing
	'dispongo le checkbox in due colonne: seconda colonna "Tabelle Corpi"
	' essendo la colonna più lunga contemporaneamente aumento l'altezza della finestra
	' e sposto i pulsanti, label e campi numerici
	dim AltezzaFinestra as integer
	dim CommandButton as object
	dim PosizioneYButton as integer
	dim e as integer
	PosizioneX = 115
	PosizioneY = 80
	For i = Lbound(TabellaCorpo) to Ubound(TabellaCorpo)
		CheckBox = TabellaCorpo(i)
		'posizione e dimensione checkbox		
		With CheckBox.getModel
			.PositionX = PosizioneX
			.PositionY = PosizioneY
			.Width = 65
			.Height = 10
		end with
		'aumento altezza finestra
		AltezzaFinestra = dlgStam.Model.Height		'altezza finestra esistente
		dlgStam.getModel.Height = AltezzaFinestra +11	'nuova altezza finestra
		For e = 1 to 3	'ciclo per spostare su asse y i quattro pulsanti
			CommandButton = dlgStam.getControl("CommandButton" & e)
			PosizioneYButton = CommandButton.Model.PositionY
			CommandButton.getModel.PositionY = PosizioneYButton +11
		next e
		'ridefinisco la posizione Y per successiva checkbox
		PosizioneY = PosizioneY  +11
		Set CheckBox = nothing
		Set CommandButton = nothing
	next i
	Redim Preserve TabellaCorpo() As Object : Set TabellaCorpo() = nothing
	'definisco oggetto listbox1
	Dim ListBox1Stampa as object
	ListBox1Stampa = dlgStam.getControl("ListBox1")	
	'applico proprità finestra
	'dlgStam.getPeer().setProperty ("NativeWidgetLook", False)	'se coloro campi in proprietà finestra
	'dlgStam.enable = false		'disabilito chiusura finestra con x
	dlgStam.getControl("OptionButton1").setFocus()	
	'apro finestra
	dlgStam.Execute()
	dlgStam.Dispose()
End Sub
Non considerare quanto da me scritto nel post precedente, perchè fuorviante.
Saluti
Geo

EDIT: mancava l'allegato
Allegati
Fin_Dialogo_Stampa.ods
(95.11 KiB) Scaricato 132 volte
LibO 7 su LinuxMint 21
Rispondi