Differenze tra le versioni di "Uso della classe Application"

Da Gambas-it.org - Wikipedia.
 
(37 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
La Classe statica '''Application''' offre informazioni generali sull'applicazione .gambas mediante le seguenti sue proprietà:
+
La Classe statica <SUP>&#091;[[#Note|nota 1]]&#093;</sup> '''Application''' dispone di ''Proprietà'' ed ''Eventi''.
  
  
===ActiveControl===
+
=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.
 
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:
 
Esempio:
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
  Button1.Setfocus
+
  Button1.Setfocus
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
    With Application.ActiveControl
+
  With Application.ActiveControl
Print .Name
+
  Print .Name
Print .Id
+
  Print .Id
      .Background = Color.Red
+
    .Background = Color.Red
    End With
+
  End With
 
   
 
   
  '''End'''
+
  End
  
  
===ActiveWindow===
+
===.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.
 
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:
 
Esempio:
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
 
   Dim w As Window
 
   Dim w As Window
 
   
 
   
    w = Application.ActiveWindow
+
  w = Application.ActiveWindow
 
      
 
      
    With w
+
  With w
 
  Print .Id, Hex(.Id)
 
  Print .Id, Hex(.Id)
 
  Print .Name
 
  Print .Name
 
  Print .Title
 
  Print .Title
      .Background = Color.Yellow
+
    .Background = Color.Yellow
      .Move(400, 500, 100, 200)
+
    .Move(400, 500, 100, 200)
    End With
+
  End With
 
   
 
   
  '''End'''
+
  End
  
  
===Args===
+
===.Animations===
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.
+
 
 +
===.Args===
 +
La Proprietà ".Args" ritorna un array che contiene i valori passati all'applicazione dalla console/terminale, quando tale applicazione viene lanciata.
 +
<BR>Può essere utilizzata anche per passare valori a un'applicazione, quando questa viene lanciata da un altro programma mediante il comando ''Shell''.
 +
 
 +
Quando viene lanciata un'applicazione ''.gambas'', passandole dei dati, la Proprietà ".Args" consente all'applicazione avviata 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'' .
 
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'' .
Riga 55: Riga 63:
 
La sintassi è:
 
La sintassi è:
 
  array = Application.Args
 
  array = Application.Args
 
+
Esempio con un programma in ambiente grafico:
Esempio:
+
  Public Sub Form_Open()
  '''Public''' Sub Form_Open()
 
 
   
 
   
 
   Dim a, b As Byte
 
   Dim a, b As Byte
 
   
 
   
  With Application
+
  With Application
    a = Val(.Args[1])
+
    a = Val(.Args[1])
    b = Val(.Args[2])
+
    b = Val(.Args[2])
  End With
+
  End With
 
   
 
   
    TextBox1.Text = CStr(a * b)
+
  TextBox1.Text = CStr(a * b)
 
   
 
   
  '''End'''
+
  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'' .
 
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.
 
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.
 
<BR>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:
 
<BR>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()
+
  Public Sub Main()
 
   
 
   
 
   Print Application.Args[1]
 
   Print Application.Args[1]
 
   
 
   
  '''End'''
+
  End
 
se la stringa è formata da un'unica parola, allora sarà sufficiente lanciare il programma .gambas da Terminale nel modo seguente:
 
se la stringa è formata da un'unica parola, allora sarà sufficiente lanciare il programma .gambas da Terminale nel modo seguente:
 
   ~ $ ''/percorso/del/programma.gambas'' <FONT color=#B22222>parametro</font>
 
   ~ $ ''/percorso/del/programma.gambas'' <FONT color=#B22222>parametro</font>
 
 
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'':
 
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'' <FONT color=#B22222>"parametro stringa"</font>
 
  ~ $ ''/percorso/del/programma.gambas'' <FONT color=#B22222>"parametro stringa"</font>
 
altrimenti verrà passata solo la prima parola.
 
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''.
+
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 <U>priva</u> 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''.
 
<BR>Vediamo un esempio nel quale il codice Gambas prevede il passaggio di due parametri:  
 
<BR>Vediamo un esempio nel quale il codice Gambas prevede il passaggio di due parametri:  
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   With application
 
   With application
Riga 94: Riga 99:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
 
e da Terminale si passino due parametri: uno composto da un'unica parola, ed un altro composto da due parole separate dallo spazio:
 
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'' <FONT color=#B22222>unicaparola</font> <FONT color=Blue>"due parole"</font>
 
  ~ $ ''/percorso/del/programma.gambas'' <FONT color=#B22222>unicaparola</font> <FONT color=Blue>"due parole"</font>
  
 +
====Ottenere con la Proprietà ".Args" il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic====
 +
Riguardo a tale argomento si rinvia alla seguente pagina:
 +
[[Ottenere il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic]]
  
===Busy===
 
  
 +
===.Busy===
  
===Daemon===
+
Vedere questa pagina della Wiki: [[Far_assumere_al_cursore_del_mouse_l'aspetto_dell'attesa|Far assumere al cursore del mouse l'aspetto dell'attesa]]
 +
 
 +
 
 +
===.Daemon===
 
Impostare questa proprietà su ''True'' per rendere il programma un ''demone''.
 
Impostare questa proprietà su ''True'' per rendere il programma un ''demone''.
  
Riga 112: Riga 123:
  
  
===Dir===
+
===.DarkTheme===
La proprietà ''Dir'' restituisce la ''directory di lavoro'' di Gambas, cioè la directory da cui è stato lanciato il programma Gambas.
+
 
 +
 
 +
===.DblClickTime===
 +
 
 +
 
 +
===.Dir===
 +
La proprietà ''Dir'' restituisce la ''directory di lavoro'' di Gambas, cioè la directory da cui è stato lanciato il programma Gambas. <SUP>&#091;[[#Note|Nota 2]]&#093;</sup>
  
 
Se per esempio l'applicazione ''programma.gambas'' è posta in una cartella, che chiameremo ''mieiprogrammi'', della ''Home'':
 
Se per esempio l'applicazione ''programma.gambas'' è posta in una cartella, che chiameremo ''mieiprogrammi'', della ''Home'':
Riga 122: Riga 139:
  
  
===Embedder===
+
===.Embedder===
  
  
===Env===
+
===.Env===
 
Restituisce una collezione virtuale di stringhe contenente le variabili d'ambiente del processo.
 
Restituisce una collezione virtuale di stringhe contenente le variabili d'ambiente del processo.
  
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
  Print Application.Env["PATH"]
+
  Print Application.Env["PATH"]
 
   
 
   
  '''End'''
+
  End
  
  
===Font===
+
===.Font===
La proprietà ''Font'' restituisce o modifica il tipo di carattere predefinito globale dell'applicazione.
+
La Proprietà ".Font" restituisce o modifica il tipo di carattere predefinito globale dell'applicazione.
  
  
===Handle===
+
===.Handle===
La proprietà ''Handle'' ritorna un integer che rappresenta il PID del processo del programma.
+
La Proprietà ".Handle" ritorna un integer che rappresenta il PID del processo del programma.
  
  
===Id===
+
===.Icon===
La proprietà ''Id'' è un sinonimo della proprietà ''Handle''.
+
La Proprietà ".Icon" restituisce l'icona dell'applicazione definita nelle proprietà del progetto.
  
  
===MainWindow===
+
===.Id===
 +
La Proprietà ".Id" è un sinonimo della proprietà ''Handle''.
 +
 
 +
 
 +
===.MainWindow===
 
Ritorna od imposta la finestra principale dell'applicazione.
 
Ritorna od imposta la finestra principale dell'applicazione.
  
Riga 158: Riga 179:
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Form_Open()
+
  Public Sub Button1_Click()
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click()
 
 
   
 
   
 
   Dim w As Window
 
   Dim w As Window
 
   
 
   
   
+
  With w = New Window
  With w = New Window
+
    .W = 400
    .W = 400
+
    .H = 300
    .H = 300
+
    .Title = "Nuova finestra"
    .Title = "Nuova finestra"
+
    .Background = Color.Yellow
    .Background = Color.Yellow
+
    .Move(400, 500, 100, 200)
    .Move(400, 500, 100, 200)
+
    .Show()
    .Show()
+
  End With
  End With
 
 
   
 
   
 
  <FONT color=gray>' ''Rendiamo l'oggetto "Window" appena creato la nuova finestra principale dell'applicazione:''</font>
 
  <FONT color=gray>' ''Rendiamo l'oggetto "Window" appena creato la nuova finestra principale dell'applicazione:''</font>
    Application.MainWindow = w
+
  Application.MainWindow = w
 
    
 
    
 
  <FONT color=gray>' ''Verifichiamo in console, ora, quale è la finestra principale dell'applicazione:''</font>
 
  <FONT color=gray>' ''Verifichiamo in console, ora, quale è la finestra principale dell'applicazione:''</font>
    Print "Application.MainWindow.Title = "; Application.MainWindow.Title
+
  Print "Application.MainWindow.Title = "; Application.MainWindow.Title
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Close()
+
  Public Sub Form_Close()
 
   
 
   
 
  <FONT color=gray>' ''Questo Evento sarà sollevato da quella che è attualmente la finestra "principale" dell'applicazione:''</font>
 
  <FONT color=gray>' ''Questo Evento sarà sollevato da quella che è attualmente la finestra "principale" dell'applicazione:''</font>
 
   If Message.Question("Chiudo?", "Si", "No") = 2 Then Stop Event
 
   If Message.Question("Chiudo?", "Si", "No") = 2 Then Stop Event
 
   
 
   
  '''End'''
+
  End
 +
 
  
 +
===.MiddleClickPaste===
  
===Name===
 
La proprietà ''Name'' ritorna il nome dell'applicazione come definita come definita nella finestra di dialogo delle proprietà dell'IDE di Gambas.
 
  
 +
===.Name===
 +
La Proprietà ".Name" ritorna il nome dell'applicazione come definita come definita nella finestra di dialogo delle proprietà dell'IDE di Gambas.
  
===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'':
+
===.ParentHandle===
 +
 
 +
 
 +
===.Path===
 +
La proprietà ''Path'' restiruisce il percorso ove è locata l'applicazione, compreso il nome dell'applicazione stessa. <B><SUP>&#091;[[#Note|Nota 2]]&#093;</sup></b>
  
 +
Se per esempio l'applicazione ''mio_programma.gambas'' è posta in una cartella, che chiameremo ''mieiprogrammi'', della ''Home'':
 
  Print Application.Path
 
  Print Application.Path
 
si avrà in console:
 
si avrà in console:
<BR>/home/mieiprogrammi/programma.gambas
+
<BR>/home/[$USER]/mieiprogrammi/mio_programma.gambas
 +
 
 +
Va sottolineato che la proprietà ''.Path'' della Classe ''Application'' contiene la directory di installazione dell'applicazione in esecuzione. Da questa path è possibile raggiungere i suoi file interni.
 +
 
  
 +
===.PreviousControl===
  
===PreviousControl===
 
  
 +
===.Priority===
 +
http://gambaswiki.org/wiki/comp/gb/application/priority?l=it
  
===Priority===
+
===.Restart===
  
 +
===.Shadows===
  
===ShowTooltips===
+
===.ShowTooltips===
 
La proprietà ''ShowTooltips'' ritorna o imposta un valore booleano che rappresenta se i ''tooltip'' sono visibili o meno.
 
La proprietà ''ShowTooltips'' ritorna o imposta un valore booleano che rappresenta se i ''tooltip'' sono visibili o meno.
  
Riga 221: Riga 247:
  
  
===Startup===
+
===.Startup===
 +
 
 +
 
 +
===.TempDir===
 +
Restituisce la directory in cui sono memorizzati i file temporanei del processo corrente.
 +
 
 +
Normalmente è: ''/tmp/gambas.<id utente>/<id processo>''
 +
 
 +
 
 +
=== .Task ===
  
  
===Theme===
+
===.Theme===
  
  
===Title===
+
===.Title===
 
La proprietà ''Title'' restituisce il titolo dell'applicazione in esecuzione.
 
La proprietà ''Title'' restituisce il titolo dell'applicazione in esecuzione.
  
  
===Version===
+
===.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.
 
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.
 +
 +
<SPAN Style="text-decoration:underline">Per far sollevare l'evento "Application_Read(", sarà sufficiente premere il tasto "Invio" della tastiera.</span>
 +
 +
Dunque il programma giunge alla fine della routine principale, ma resta in attesa, in "osservazione" di un dato da leggere dallo ''standard input''.
 +
<BR>Ciò determina che, <SPAN Style="text-decoration:underline">per chiudere il programma, sarà necessario utilizzare la funzione ''Quit''</span>.
 +
 +
Mostriamo un esempio:
 +
Public Sub Main()
 +
 +
  Print "\n'i' + [Invio] per ottenere informazioni"
 +
 +
End
 +
 +
 +
Public Sub <FONT color=#B22222>Application_Read()</font>  <FONT Color=gray>' ''Cliccando sul tasto "Invio", si solleva questo Evento</font>
 +
   
 +
  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
 +
<FONT Color=gray>' ''Essendo stato sollevato l'Evento "_Read()", per chiudere effettivamente il programma, si invoca la funzione "Quit":</font>
 +
      Quit
 +
    Endif
 +
   
 +
  Endif
 +
 +
End
 +
 +
====Usare Wait e non Sleep in un ciclo====
 +
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()
 +
 
 +
  Dim i As Integer
 +
 +
  Repeat
 +
    Inc i
 +
    Print i
 +
    <FONT color=#B22222>Wait</font> 0.3
 +
  Until bo
 +
 +
  Print "Uscito dal ciclo"
 +
 +
<FONT Color=gray>' ''Essendo stato sollevato l'Evento "_Read()", per chiudere effettivamente il programma, si invoca la funzione "Quit":</font>
 +
  Quit
 +
 
 +
End
 +
 +
 +
Public Sub Application_Read()  <FONT Color=gray>' ''Cliccando sul tasto "Invio", si solleva questo Evento</font>
 +
 +
  bo = True
 +
 +
End
 +
 +
 +
 +
=Note=
 +
[1] Una Classe è ''Statica'', quando <SPAN Style="text-decoration:underline">non può e non ha necessità di essere ''istanziata''</span> per essere usata. Vuol dire che non è necessario creare (mediante la parola-chiave "New") ''Oggetti'' di tale Classe.
 +
 +
[2] Un progetto Gambas ha una "''directory del progetto'' ", che è dove sono memorizzati il suo codice sorgente, la configurazione e i file di dati. Può essere accessibile in fase di esecuzione tramite "Application.Path", ma bisogna considerare che uno script Gambas è incorporato in un progetto temporaneo al volo. Pertanto si ottiene il percorso di quel progetto invece del percorso del file di script; e "Application.Path" di un ''eseguibile'' sarà qualcos'altro (solo /tmp).
 +
<BR>"Application.Path" è - secondo la documentazione - il percorso della directory del progetto. Quando si crea un pacchetto di installazione, viene installato <SPAN Style="text-decoration:underline">solo un archivio eseguibile</span> (file.gambas). L'uso di "Application.Path" non ha senso per un simile archivio. Così, ad esempio, i file che si trovano ora nella cartella del progetto si trovano successivamente in un archivio e non hanno alcun percorso nel file system. La soluzione è utilizzare percorsi "relativi". L'interprete Gambas risolve automaticamente i percorsi "relativi" nelle sue funzioni - come "File.Load()" - rispetto alla directory di base dell'archivio.
 +
<BR>Quando viene creato un pacchetto di installazione, si ottiene un solo archivio eseguibile del progetto (file *.gambas) al suo interno. Questo archivio è un <SPAN Style="text-decoration:underline">singolo</span> file che contiene l'intero progetto, ma ovviamente non è possibile usare percorsi "assoluti" nel filesystem per accedere a questi file. Se si intende accedere a un file che si trova nella directory del progetto, bisogna usare semplici percorsi "relativi".
 +
 +
Un'altra cosa è l'attuale directory di lavoro (''Current working directory'' - cwd), che è un concetto familiare alla shell e ad altri linguaggi di programmazione. La ''cwd'' all'avvio del programma è disponibile tramite "Application.Dir". Tuttavia, il linguaggio Gambas <SPAN Style="text-decoration:underline">non</span> ha un concetto di "''directory corrente di lavoro'' ", in quanto i percorsi "relativi" nel codice sono <SPAN Style="text-decoration:underline">sempre</span> interpretati dai built-in di Gambas come <SPAN Style="text-decoration:underline">"relativi" alla directory del progetto</span>, mai alla ''cwd'' dell'ambiente. Nel caso in cui si lancia da un eseguibile, Gambas accederà in modo trasparente ai file nella struttura dell'archivio mappato in memoria e fornirà i loro contenuti.
 +
<BR>Bisogna comunque ricordare che i percorsi "relativi" nei programmi Gambas <SPAN Style="text-decoration:underline">non</span> fanno quello a cui si è abituati con la shell.
 +
<BR>In breve:
 +
<BR> - Non bisogna fare riferimento ad "Application.Path" per i dati di progetto; bisogna utilizzare invece percorsi "relativi". In sostanza "Application.Path" esiste solo nella IDE, se creassimo un eseguibile ".gambas", il cui codice contiene "Application.Path", otterremmo un errore.
 +
<BR> - Non bisogna utilizzare percorsi "relativi" per i file nel ''cwd'': è opportuno renderli "assoluti" con "Application.Dir &/ ..." .

Versione attuale delle 14:36, 10 giu 2024

La Classe statica [nota 1] 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 dalla console/terminale, quando tale applicazione viene lanciata.
Può essere utilizzata anche per passare valori a un'applicazione, quando questa viene lanciata da un altro programma mediante il comando Shell.

Quando viene lanciata un'applicazione .gambas, passandole dei dati, la Proprietà ".Args" consente all'applicazione avviata 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 con un programma in ambiente grafico:

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"

Ottenere con la Proprietà ".Args" il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic

Riguardo a tale argomento si rinvia alla seguente pagina: Ottenere il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic


.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.


.DarkTheme

.DblClickTime

.Dir

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

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.


.Icon

La Proprietà ".Icon" restituisce l'icona dell'applicazione definita nelle proprietà del progetto.


.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 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


.MiddleClickPaste

.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. [Nota 2]

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

Print Application.Path

si avrà in console:
/home/[$USER]/mieiprogrammi/mio_programma.gambas

Va sottolineato che la proprietà .Path della Classe Application 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

.Shadows

.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

.TempDir

Restituisce la directory in cui sono memorizzati i file temporanei del processo corrente.

Normalmente è: /tmp/gambas.<id utente>/<id processo>


.Task

.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()   ' Cliccando sul tasto "Invio", si solleva questo Evento
   
 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
' Essendo stato sollevato l'Evento "_Read()", per chiudere effettivamente il programma, si invoca la funzione "Quit":
     Quit
   Endif
   
 Endif

End

Usare Wait e non Sleep in un ciclo

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()
 
 Dim i As Integer

 Repeat
   Inc i
   Print i
   Wait 0.3
 Until bo

 Print "Uscito dal ciclo"

' Essendo stato sollevato l'Evento "_Read()", per chiudere effettivamente il programma, si invoca la funzione "Quit":
 Quit
 
End


Public Sub Application_Read()   ' Cliccando sul tasto "Invio", si solleva questo Evento

 bo = True

End


Note

[1] Una Classe è Statica, quando non può e non ha necessità di essere istanziata per essere usata. Vuol dire che non è necessario creare (mediante la parola-chiave "New") Oggetti di tale Classe.

[2] Un progetto Gambas ha una "directory del progetto ", che è dove sono memorizzati il suo codice sorgente, la configurazione e i file di dati. Può essere accessibile in fase di esecuzione tramite "Application.Path", ma bisogna considerare che uno script Gambas è incorporato in un progetto temporaneo al volo. Pertanto si ottiene il percorso di quel progetto invece del percorso del file di script; e "Application.Path" di un eseguibile sarà qualcos'altro (solo /tmp).
"Application.Path" è - secondo la documentazione - il percorso della directory del progetto. Quando si crea un pacchetto di installazione, viene installato solo un archivio eseguibile (file.gambas). L'uso di "Application.Path" non ha senso per un simile archivio. Così, ad esempio, i file che si trovano ora nella cartella del progetto si trovano successivamente in un archivio e non hanno alcun percorso nel file system. La soluzione è utilizzare percorsi "relativi". L'interprete Gambas risolve automaticamente i percorsi "relativi" nelle sue funzioni - come "File.Load()" - rispetto alla directory di base dell'archivio.
Quando viene creato un pacchetto di installazione, si ottiene un solo archivio eseguibile del progetto (file *.gambas) al suo interno. Questo archivio è un singolo file che contiene l'intero progetto, ma ovviamente non è possibile usare percorsi "assoluti" nel filesystem per accedere a questi file. Se si intende accedere a un file che si trova nella directory del progetto, bisogna usare semplici percorsi "relativi".

Un'altra cosa è l'attuale directory di lavoro (Current working directory - cwd), che è un concetto familiare alla shell e ad altri linguaggi di programmazione. La cwd all'avvio del programma è disponibile tramite "Application.Dir". Tuttavia, il linguaggio Gambas non ha un concetto di "directory corrente di lavoro ", in quanto i percorsi "relativi" nel codice sono sempre interpretati dai built-in di Gambas come "relativi" alla directory del progetto, mai alla cwd dell'ambiente. Nel caso in cui si lancia da un eseguibile, Gambas accederà in modo trasparente ai file nella struttura dell'archivio mappato in memoria e fornirà i loro contenuti.
Bisogna comunque ricordare che i percorsi "relativi" nei programmi Gambas non fanno quello a cui si è abituati con la shell.
In breve:
- Non bisogna fare riferimento ad "Application.Path" per i dati di progetto; bisogna utilizzare invece percorsi "relativi". In sostanza "Application.Path" esiste solo nella IDE, se creassimo un eseguibile ".gambas", il cui codice contiene "Application.Path", otterremmo un errore.
- Non bisogna utilizzare percorsi "relativi" per i file nel cwd: è opportuno renderli "assoluti" con "Application.Dir &/ ..." .