Eventi

From Apache OpenOffice Wiki
Jump to: navigation, search


Le finestre di dialogo e i formulari di Apache OpenOffice si basano su un modello di programmazione orientato agli eventi in cui è possibile assegnare gestori di eventi agli elementi di controllo. Un gestore di eventi esegue una procedura predefinita quando si verifica un'azione particolare. Con i gestori di eventi si possono inoltre modificare documenti o aprire database, nonché accedere ad altri elementi di controllo.


Gli elementi di controllo di Apache OpenOffice riconoscono i diversi tipi di eventi attivabili nelle diverse situazioni. Questi tipi di eventi possono essere suddivisi in quattro categorie:

  • Controllo con il mouse: eventi che corrispondono alle azioni del mouse, ad esempio semplici movimenti del mouse o clic su una particolare posizione dello schermo.
  • Controllo con la tastiera: eventi che vengono attivati dalla pressione dei diversi tasti della tastiera.
  • Modifica dell'attivazione: eventi eseguiti da Apache OpenOffice quando gli elementi di controllo sono attivati o disattivati.
  • Eventi specifici degli elementi di controllo: eventi che si verificano solo in relazione a determinati elementi di controllo.

Durante l'utilizzo degli eventi, verificare di creare la finestra di dialogo associata nell'ambiente di sviluppo di Apache OpenOffice e che tale finestra contenga gli elementi di controllo o i documenti richiesti (se intendete applicare gli eventi a un formulario).

Ambiente di sviluppo OpenOffice.org Basic

La figura soprastante mostra l'ambiente di sviluppo Apache OpenOffice Basic con una finestra di dialogo contenente due caselle di riepilogo. È possibile spostare i dati da un elenco all'altro utilizzando i pulsanti tra le due caselle di riepilogo.

Per visualizzare il layout a video, è necessario creare le procedure Apache OpenOffice Basic associate, in modo che possano essere richiamate dai gestori di eventi. Anche se potete utilizzare queste procedure in qualsiasi modulo, è consigliabile limitarne l'uso a due soli moduli. Per semplificare la lettura del codice, si consiglia inoltre di assegnare nomi espliciti e rappresentativi alle diverse procedure. Il passaggio a una procedura di programma generale direttamente da una macro può infatti produrre codice non chiaro. Per semplificare la manutenzione e la risoluzione degli errori del codice, si dovrebbe invece creare un'altra procedura che funga da punto di ingresso per la gestione degli eventi, anche se esegue solo una singola chiamata alla procedura di destinazione.

Il codice riportato nell'esempio seguente sposta una voce dalla casella di riepilogo sinistra alla casella di riepilogo destra di una finestra di dialogo.

Sub cmdSelect_Initiated
 
   Dim objList As Object
 
   lstEntries = Dlg.getControl("lstEntries")
   lstSelection = Dlg.getControl("lstSelection")
 
   If lstEntries.SelectedItem > 0 Then
     lstSelection.AddItem(lstEntries.SelectedItem, 0)
     lstEntries.removeItems(lstEntries.SelectItemPos, 1)
   Else
     Beep
   End If
 
End Sub

Se la procedura è stata creata in Apache OpenOffice Basic, è possibile assegnarla a un evento richiesto utilizzando la finestra delle proprietà del Dialog Editor.

Finestra di dialogo Assegna macro

Nella finestra di dialogo vengono elencate tutte le procedure di Apache OpenOffice Basic. Per assegnare una procedura a un evento, selezionarla e fare clic su Assegna.

Parametri

Il verificarsi di un particolare evento non è sempre sufficiente per una risposta adeguata: potrebbero infatti essere richieste informazioni aggiuntive. Ad esempio, per elaborare un clic del mouse, può essere necessaria la posizione dello schermo in cui è stato premuto il mouse.

In Apache OpenOffice Basic potete utilizzare i parametri degli oggetti per fornire a una procedura ulteriori informazioni su un evento, ad esempio:

Sub ProcessEvent(Event As Object)
 
End Sub

La precisione con cui è strutturato l'oggetto Event e le sue proprietà dipendono dal tipo di evento che attiva la chiamata della procedura.

Indipendentemente dal tipo di evento, tutti gli oggetti consentono di accedere all'elemento di controllo pertinente e al relativo modello. L'elemento di controllo può essere raggiunto utilizzando Event.Source e il suo modello utilizzando Event.Source.Model.

Tali proprietà possono essere impiegate per attivare un evento all'interno di un gestore di eventi.

Eventi del mouse

Apache OpenOffice Basic riconosce i seguenti eventi del mouse:

Mouse moved
L'utente sposta il mouse
Mouse moved while key pressed
L'utente trascina il mouse mentre tiene premuto un tasto
Mouse button pressed
L'utente preme un pulsante del mouse
Mouse button released
L'utente rilascia un pulsante del mouse
Mouse outside
L'utente sposta il mouse fuori dalla finestra corrente

La struttura degli oggetti eventi associati è definita nella struttura com.sun.star.awt.MouseEvent, che fornisce le informazioni seguenti:

Buttons (short)
Pulsante premuto (una o più costanti in conformità a com.sun.star.awt.MouseButton)
X (long)
Coordinata X del mouse, misurata in pixel a partire dall'angolo superiore sinistro dell'elemento di controllo
Y (long)
Coordinata Y del mouse, misurata in pixel a partire dall'angolo superiore sinistro dell'elemento di controllo
ClickCount (long)
Numero di clic associati all'evento del mouse (se Apache OpenOffice può rispondere con velocità sufficiente, ClickCount è 1 anche per un doppio clic, poiché viene iniziato solo un evento)

Le costanti definite in com.sun.star.awt.MouseButton per i pulsanti del mouse sono:

LEFT
Pulsante sinistro del mouse
RIGHT
Pulsante destro del mouse
MIDDLE
Pulsante centrale del mouse

L'esempio seguente restituisce la posizione del mouse nonché il pulsante del mouse premuto:

Sub MouseUp(Event As Object)
 
   Dim Msg As String
 
   Msg = "Keys: "
   If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
     Msg = Msg & "LEFT "
   End If
 
   If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
     Msg = Msg & "RIGHT "
   End If
 
   If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
     Msg = Msg & "MIDDLE "
   End If
 
   Msg = Msg & Chr(13) & "Position: "
   Msg = Msg & Event.X & "/" & Event.Y
   MsgBox Msg
 
End Sub
Documentation note.png Gli eventi Click e Doubleclick di VBA non sono disponibili in Apache OpenOffice Basic. Al loro posto, utilizzate l'evento di Apache OpenOffice Basic MouseUp per l'evento click e imitate l'evento Doubleclick modificando la logica dell'applicazione.

Eventi della tastiera

In Apache OpenOffice Basic sono disponibili i seguenti eventi della tastiera:

Key pressed
L'utente preme un tasto.
Key released
L'utente rilascia un tasto

Entrambi gli eventi sono relativi alle azioni di tasti logici e non ad azioni fisiche. Se l'utente preme diversi tasti per produrre un singolo carattere (ad esempio per aggiungere un accento a un carattere), in Apache OpenOffice Basic viene creato solo un evento.

Una singola azione di tasto per un tasto di modifica, come il tasto Maiusc o il tasto Alt, non crea un evento indipendente.

Le informazioni su un tasto premuto vengono determinate dall'oggetto evento fornito da Apache OpenOffice Basic alla procedura per la gestione degli eventi, contenente le proprietà seguenti:

KeyCode (short)
Codice del tasto premuto (valori predefiniti conformi a com.sun.star.awt.Key)
KeyChar (String)
Carattere immesso (tenendo conto dei tasti di modifica)

Nell'esempio seguente viene utilizzata la proprietà KeyCode per stabilire se è stato premuto il tasto Invio, il tasto Tab o un altro tasto di controllo. Se è stato premuto uno di tali tasti, viene restituito il nome del tasto, altrimenti viene restituito il carattere immesso:

Sub KeyPressed(Event As Object)
 
   Dim Msg As String
 
   Select Case Event.KeyCode
   Case com.sun.star.awt.Key.RETURN
     Msg = "Return pressed"
   Case com.sun.star.awt.Key.TAB
     Msg = "Tab pressed"
   Case com.sun.star.awt.Key.DELETE
     Msg = "Delete pressed"
   Case com.sun.star.awt.Key.ESCAPE
     Msg = "Escape pressed"
   Case com.sun.star.awt.Key.DOWN
     Msg = "Down pressed"
   Case com.sun.star.awt.Key.UP
     Msg = "Up pressed"
   Case com.sun.star.awt.Key.LEFT
     Msg = "Left pressed"
   Case com.sun.star.awt.Key.RIGHT
     Msg = "Right pressed"
   Case Else
     Msg = "Character " & Event.KeyChar & " entered"
   End Select
   MsgBox Msg
 
End Sub

Per reperire informazioni su altre costanti per la tastiera, consultare il riferimento per l'API nel gruppo di costanticom.sun.star.awt.Key.

Eventi di attivazione

Gli eventi di attivazione indicano se un elemento di controllo riceve o perde l'attivazione. Potete utilizzare tali eventi per determinare, ad esempio, se un utente ha terminato l'elaborazione di un elemento di controllo, consentendovi così di aggiornare altri elementi di una finestra di dialogo. Sono disponibili i seguenti eventi di attivazione:

When receiving focus
L'elemento riceve l'attivazione
When losing focus
L'elemento perde l'attivazione

Gli oggetti Event per gli eventi di attivazione sono strutturati come segue:

FocusFlags (short)
Causa della variazione di attivazione (valore predefinito conforme a com.sun.star.awt.FocusChangeReason )
NextFocus (Object)
Oggetto che riceve l'attivazione (solo per l'evento When losing focus)
Temporary (Boolean)
L'attivazione viene persa temporaneamente

Eventi specifici degli elementi di controllo

Oltre agli eventi sopracitati, supportati da tutti gli elementi di controllo, esistono anche alcuni eventi specifici definiti unicamente per alcuni elementi di controllo, tra i quali vengono riportati di seguito i più importanti:

When Item Changed
Il valore di un elemento di controllo cambia
Item Status Changed
Lo stato di un elemento di controllo cambia
Text modified
Il testo di un elemento di controllo cambia
When initiating
Un'azione che viene eseguita quando è attivato l'elemento di controllo (se ad esempio è premuto un pulsante)

Durante l'utilizzo degli eventi, notare che alcuni eventi, quali l'evento When initiating possono essere iniziati ogni volta che si fa clic con il mouse su alcuni elementi di controllo, ad esempio sui pulsanti di scelta. Non viene eseguita alcuna azione per controllare se lo stato dell'elemento di controllo è effettivamente variato. Per evitare il verificarsi di questi "eventi ciechi", salvate il valore precedente dell'elemento di controllo in una variabile globale, quindi verificate che tale valore sia variato durante l'esecuzione di un evento.

Le proprietà dell'evento Item Status Changed sono le seguenti:

Selected (long)
Voce attualmente selezionata
Highlighted (long)
Voce attualmente evidenziata
ItemId (long)
ID della voce
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools