Differenze tra le versioni di "Uso della classe Application"

Da Gambas-it.org - Wikipedia.
Riga 324: Riga 324:
 
Qualora nella routine principale vi sia un ciclo infinito, dal quale si uscirà solo nel caso venga sollevato l'evento "''Application_Read( )''", se tale ciclo contiene anche una istruzione di attesa, questa deve essere "''Wait''" e non ''Sleep'', in quanto con ''Wait'' la coda degli eventi è processata in modo asincrono. Invece l'evento loop non viene chiamato nella durata dell'istruzione ''Sleep''; pertanto i suoi eventi non vengono processati.
 
Qualora nella routine principale vi sia un ciclo infinito, dal quale si uscirà solo nel caso venga sollevato l'evento "''Application_Read( )''", se tale ciclo contiene anche una istruzione di attesa, questa deve essere "''Wait''" e non ''Sleep'', in quanto con ''Wait'' la coda degli eventi è processata in modo asincrono. Invece l'evento loop non viene chiamato nella durata dell'istruzione ''Sleep''; pertanto i suoi eventi non vengono processati.
  
Per far sollevare l'evento "''Application_Read( )''", sarà sufficiente premere il tasto "Invio" della tastiera.
+
Come già detto sopra, per far sollevare l'evento "''Application_Read( )''", sarà sufficiente premere il tasto "Invio" della tastiera, e per chiudere definitivamente il programma bisognerà invocare la funzione "''Quit'' ".
  
 
Esempio:
 
Esempio:

Versione delle 09:41, 1 ago 2020

La Classe statica Application dispone di Proprietà ed Eventi.


Proprietà

La Classe Application offre informazioni generali sull'applicazione .gambas mediante le seguenti sue proprietà:


.ActiveControl

La proprietà ActiveControl ritorna il controllo che posiede in quel momento il focus. Di quell'oggetto è possibile conoscere o anche impostare contemporaneamente ogni relativa proprietà associata all'oggetto medesimo.


Esempio:

Public Sub Form_Open()

  Button1.Setfocus

End


Public Sub Button1_Click()

    With Application.ActiveControl
Print .Name
Print .Id
      .Background = Color.Red
    End With

End


.ActiveWindow

La proprietà ActiveWindow ritorna la finestra attiva corrente, vale a dire la finestra che possiede il controllo con lo stato attivo. Di quella finestra attiva è possibile conoscere o anche impostare contemporaneamente ogni relativa proprietà associata alla finestra medesima.

Esempio:

Public Sub Button1_Click()

 Dim w As Window

    w = Application.ActiveWindow
   
    With w
Print .Id, Hex(.Id)
Print .Name
Print .Title
      .Background = Color.Yellow
      .Move(400, 500, 100, 200)
    End With

End


.Animations

.Args

La proprietà Args ritorna un array che contiene i valori passati all'applicazione da un altro programma mediante il comando Shell.

Quando il codice di un programma principale lancia un'applicazione.gambas passandole dei dati, la proprietà Args consente a tale applicazione, lanciata, di intercettare tali dati.

Il primo elemento dell'array, numero di indice zero [0], è sempre il nome del programma.gambas. Il numero degli elementi è minimo 1 sino al numero degli argomenti passati dal comando Shell .

La sintassi è:

array = Application.Args

Esempio:

Public Sub Form_Open()

 Dim a, b As Byte

  With Application
    a = Val(.Args[1])
    b = Val(.Args[2])
  End With

   TextBox1.Text = CStr(a * b)

End

Se il programma.gambas non riceve parametri dal comando del terminale che l'ha lanciata, il numero degli argomenti passati dalla linea di comando è pari ad 1, con numero di indice zero [0], che - come già detto - rappresenta sempre il nome del programma.gambas lanciato da Shell .


Questo metodo risulta essere molto utile in particolare, qualora il programma .gambas sia stato realizzato con impostazione a linea di comando, quindi senza supporto grafico, ed al quale sia previsto il passaggio di uno o più parametri stringa.
Poniamo ad esempio che il programma .gambas a linea di comando venga lanciato da Terminale. Nel caso in cui il codice Gambas prevede che venga passato un solo parametro stringa:

Public Sub Main()

 Print Application.Args[1]

End

se la stringa è formata da un'unica parola, allora sarà sufficiente lanciare il programma .gambas da Terminale nel modo seguente:

 ~ $ /percorso/del/programma.gambas parametro

nel caso in cui, invece, la stringa da passare è formata da più parole separate fra loro da uno spazio, allora l'intero parametro stringa dovrà essere posto fra virgolette:

~ $ /percorso/del/programma.gambas "parametro stringa"

altrimenti verrà passata solo la prima parola.

Qualora il codice del programma .gambas prevede il passaggio di due o più parametri stringa, valgono le regole viste sopra: se il parametro è formato da una stringa priva di spazi, non è necessario che esso sia posto fra virgolette; se invece il parametro è formato da due o più caratteri separati dallo spazio, allora il parametro va passato all'interno delle virgolette.
Vediamo un esempio nel quale il codice Gambas prevede il passaggio di due parametri:

Public Sub Main()

 With application
   Print .Args[1], .Args[2]
 End With

End

e da Terminale si passino due parametri: uno composto da un'unica parola, ed un altro composto da due parole separate dallo spazio:

~ $ /percorso/del/programma.gambas unicaparola "due parole"


.Busy

Vedere questa pagina della Wiki: Far assumere al cursore del mouse l'aspetto dell'attesa


.Daemon

Impostare questa proprietà su True per rendere il programma un demone.

Quando il programma diventa un demone:

  • invoca la chiamata di sistema fork, e termina il genitore appena creato, in modo che il genitore reale del programma non attende la sua chiusura;
  • La directory di lavoro corrente è impostata su "/" ;
  • Lo standard input, standard output e standard error sono chiusi;
  • Non è più possibile impostare questa proprietà su False.


.DblClickTime

.Dir

La proprietà Dir restituisce la directory di lavoro di Gambas, cioè la directory da cui è stato lanciato il programma Gambas.

Se per esempio l'applicazione programma.gambas è posta in una cartella, che chiameremo mieiprogrammi, della Home:

Print Application.Dir

si avrà in console:
/home/mieiprogrammi


.Embedder

.Env

Restituisce una collezione virtuale di stringhe contenente le variabili d'ambiente del processo.


Esempio:

Public Sub Button1_Click()

  Print Application.Env["PATH"]

End


.Font

La proprietà Font restituisce o modifica il tipo di carattere predefinito globale dell'applicazione.


.Handle

La proprietà Handle ritorna un integer che rappresenta il PID del processo del programma.


.Id

La proprietà Id è un sinonimo della proprietà Handle.


.MainWindow

Ritorna od imposta la finestra principale dell'applicazione.

La sintassi è:

Application.MainWindow As Window

Nella fase iniziale tale proprietà ritorna Null. E' possibile assegnare qualche Window successivamente durante l'esecuzione dell'applicazione.

Esempio:

Public Sub Form_Open()

End


Public Sub Button1_Click()

 Dim w As Window

   
  With w = New Window
    .W = 400
    .H = 300
    .Title = "Nuova finestra"
    .Background = Color.Yellow
    .Move(400, 500, 100, 200)
    .Show()
  End With

' Rendiamo l'oggetto "Window" appena creato la nuova finestra principale dell'applicazione:
   Application.MainWindow = w
  
' Verifichiamo in console, ora, quale è la finestra principale dell'applicazione:
   Print "Application.MainWindow.Title = "; Application.MainWindow.Title

End


Public Sub Form_Close()

' Questo Evento sarà sollevato da quella che è attualmente la finestra "principale" dell'applicazione:
  If Message.Question("Chiudo?", "Si", "No") = 2 Then Stop Event

End


.Name

La proprietà Name ritorna il nome dell'applicazione come definita come definita nella finestra di dialogo delle proprietà dell'IDE di Gambas.


.ParentHandle

.Path

La proprietà Path restiruisce il percorso ove è locata l'applicazione, compreso il nome dell'applicazione stessa.

Se per esempio l'applicazione programma.gambas è posta in una cartella, che chiameremo mieiprogrammi, della Home:

Print Application.Path

si avrà in console:
/home/mieiprogrammi/programma.gambas

Va sottolineato che la proprietà .Path della Classe Application che contiene la directory di installazione dell'applicazione in esecuzione. Da questa path è possibile raggiungere i suoi file interni.


.PreviousControl

.Priority

http://gambaswiki.org/wiki/comp/gb/application/priority?l=it

.Restart

.ShowTooltips

La proprietà ShowTooltips ritorna o imposta un valore booleano che rappresenta se i tooltip sono visibili o meno.

La sintassi è:

Application.ShowTooltips As Boolean


.Startup

.Theme

.Title

La proprietà Title restituisce il titolo dell'applicazione in esecuzione.


.Version

La proprietà Version ritorna una stringa che rapresenta il numero della versione dell'applicazione, come definita nella finestra di dialogo delle proprietà dell'IDE di Gambas.

Eventi

La Classe Application può sollevare i seguenti eventi:


.Error()

L'evento Application.Error() viene solevato ogni qual volta viene generato un errore che non è normalmente gestito da Catch, Try o Finally.


.Read()

L'evento Application.Read() viene sollevato ogni volta che c'è qualcosa da leggere dallo standard input. Esso consente di intercettare e leggere dati inviati allo standard input.

Per far sollevare l'evento "Application_Read( )", sarà sufficiente premere il tasto "Invio" della tastiera.

Dunque il programma giunge alla fine della routine principale, ma resta in attesa, in "osservazione" di un dato da leggere dallo standard input.
Ciò determina che, per chiudere il programma, sarà necessario utilizzare la funzione "Quit ".

Mostriamo un esempio:

Public Sub Main()

  Print "\n'i' + [Invio] per ottenere informazioni"

End


Public Sub Application_Read()
   
 Dim s As String
 Dim ss As String[]

  Line Input #File.In, s
  
  If s = "i" Then
    Print "Come si usa:\n- 'i'+[Invio] per queste informazioni;"
    Print "- intero*intero per moltiplicare i due interi;" 
    Print "- intero+intero per l'addizione;" 
    Print "- intero/intero per la divisione;" 
    Print "- intero-intero per la sottrazione;" 
    Print "- 'quit' per chiudere."
  Else

    If InStr(s, "*") Then
      ss = Split(s, "*")
      Print CLong(Val(ss[0]) * Val(ss[1]))
    Endif
    If InStr(s, "+") Then
      ss = Split(s, "+")
      Print CLong(Val(ss[0]) + Val(ss[1]))
    Endif
    If InStr(s, "/") Then
      ss = Split(s, "/")
      Print CLong(Val(ss[0]) \ Val(ss[1]))
    Endif
    If InStr(s, "-") Then
      ss = Split(s, "-")
      Print CLong(Val(ss[0]) - Val(ss[1]))
    Endif
   
    If s = "quit" Then
      Print "\e[1;31mChiusura fra \e[1;33m2\e[1;31m secondi !"
      Sleep 2
      Quit
    Endif
   
  Endif

End


Qualora nella routine principale vi sia un ciclo infinito, dal quale si uscirà solo nel caso venga sollevato l'evento "Application_Read( )", se tale ciclo contiene anche una istruzione di attesa, questa deve essere "Wait" e non Sleep, in quanto con Wait la coda degli eventi è processata in modo asincrono. Invece l'evento loop non viene chiamato nella durata dell'istruzione Sleep; pertanto i suoi eventi non vengono processati.

Come già detto sopra, per far sollevare l'evento "Application_Read( )", sarà sufficiente premere il tasto "Invio" della tastiera, e per chiudere definitivamente il programma bisognerà invocare la funzione "Quit ".

Esempio:

Private bo As Boolean


Public Sub Main()
 
 While Not bo
   Print "Testo qualsiasi"
   Wait 0.3
 Wend
 
 Print "Uscito dal ciclo"
 
 Quit
  
End


Public Sub Application_Read()
 
 bo = True
 
End