Differenze tra le versioni di "Inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale"
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 10: | Riga 10: | ||
Private pos As Integer | Private pos As Integer | ||
− | + | Public Sub Form_Open() | |
Dim n As Integer | Dim n As Integer | ||
Riga 38: | Riga 38: | ||
id = Val(s) | id = Val(s) | ||
− | + | End | |
− | + | ||
+ | Public Sub TextArea1_KeyRelease() | ||
If (IsNull(TextArea1.Text)) Or (Key.Code <> Key.Enter) Then Return | If (IsNull(TextArea1.Text)) Or (Key.Code <> Key.Enter) Then Return | ||
Riga 56: | Riga 57: | ||
pos = TextArea1.Text.Len | pos = TextArea1.Text.Len | ||
− | ''' | + | End |
+ | |||
+ | ==Invio dati stringa a un programma esterno contenente un'area di testo mentre si scrive nella TextArea del programma Gambas== | ||
+ | Se si desidera inviare a un programma esterno, avente un'area di testo (ad esempio un Editor di testo), caratteri ASCII contemporaneamente si scrivono gli stessi nella ''TextArea'' del programma Gambas, si potrà adottare il seguente esempio, molto simile al precedente, attivando il Componente ''gb.desktop.x11. | ||
+ | <BR>Bisognerà lanciare prima il programma esterno (editor di testo) e successivamente il seguente codice. | ||
+ | <BR>Mentre si scrive nella ''TextArea'' del programma Gambas, si dovrà avere cura di procedere lentamente. | ||
+ | Private id As Integer | ||
+ | |||
+ | Public Sub Form_Open() | ||
+ | |||
+ | Dim n As Integer | ||
+ | Dim ob As Object | ||
+ | Dim s As String | ||
+ | |||
+ | For Each n In X11.GetWindowProperty(X11.RootWindow, "_NET_CLIENT_LIST") | ||
+ | <FONT Color=gray>' ''Di ciascuna finestra aperta mostra in console:'' | ||
+ | ' '' - l'ID (in esadecimale);'' | ||
+ | ' '' - il desktop (numero d'indice) nel quale è aperta;'' | ||
+ | ' '' - il nome;''</font> | ||
+ | Write "\e[31m&h" & Hex(n, 8) & | ||
+ | "\e[0m " & | ||
+ | Format(X11.GetWindowProperty(n, "_NET_WM_DESKTOP")[0], "-#") & " " | ||
+ | <FONT Color=gray>' ''Verifica se vi sono finestre, come messaggi di errore dal sistema, che non posseggono nome:''</font> | ||
+ | ob = X11.GetWindowProperty(n, "_NET_WM_NAME") | ||
+ | If Object.IsValid(ob) Then Write ob[0] | ||
+ | Print | ||
+ | Next | ||
+ | |||
+ | Repeat | ||
+ | <FONT Color=gray>' ''Attende l'immissione nell'InputBox dell'ID della finestra, ove inviare successivamente i dati stringa.'' | ||
+ | ' ''Se si immette il numero dell'ID in rappresentazione esadecimale, bisognerà farlo precedere dal simbolo "&".''</font> | ||
+ | s = InputBox("Inserire il numero identificativo della finestra prescelta:") | ||
+ | Until IsNumber(s) | ||
+ | |||
+ | id = Val(s) | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub TextArea1_Cursor() | ||
+ | |||
+ | X11.ActiveWindow = id | ||
+ | |||
+ | Wait 0.1 | ||
+ | |||
+ | X11.SendKey(Right(TextArea1.Text, 1), True) | ||
+ | X11.SendKey(Right(TextArea1.Text, 1), False) | ||
+ | |||
+ | X11.ActiveWindow = Me.Handle | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
==Invio dati stringa a un Terminale== | ==Invio dati stringa a un Terminale== | ||
Nel caso in cui il programma esterno, al quale inviare i dati stringa sia un Terminale, vale comunque il codice sopra esposto, ma si vedano anche le seguenti pagine: | Nel caso in cui il programma esterno, al quale inviare i dati stringa sia un Terminale, vale comunque il codice sopra esposto, ma si vedano anche le seguenti pagine: |
Versione attuale delle 13:00, 22 giu 2024
Per inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale, si potrà usare il Componente gb.desktop.x11.
Invio dati stringa a un programma esterno contenente un'area di testo
Nel seguente esempio il programma Gambas dispone di una TextArea nella quale l'utente può scrivere un testo qualsiasi e inviarlo poi ad un programma esterno contenente un'area di testo (ad esempio un semplice editor di testo).
Occorrerà lanciare prima il ptogramma esterno, poi il codice Gambas dell'esempio.
Il programma Gambas richiederà l'immissione in un ImputBox del numero identificativo della finestra del Terminale aperto. Tale ID può essere copiato nella Console dell'IDE di Gambas (se il programma è stato ovviamente lanciato come progetto, oppure dal Terminale come eseguibile .gambas).
Nel copiare il numero identificativo della finestra del.editor di testo - al quale trasferire la stringa di caratteri - si dovrà avere cura di copiare, e incollare nell'InputBox, anche i caratteri "&h" che precedono il valore esadecimale riportato.
Dopo aver scritto il testo nella TextArea del programma Gambas, sotto riportato, per trasferire tale stringa di caratteri all'editor di testo esterno, basterà premere il tasto "Invio" del tastierino numerico presente sulla tastiera.
Private id As Integer Private pos As Integer Public Sub Form_Open() Dim n As Integer Dim ob As Object Dim s As String For Each n In X11.GetWindowProperty(X11.RootWindow, "_NET_CLIENT_LIST") ' Di ciascuna finestra aperta mostra in console: ' - l'ID (in esadecimale); ' - il desktop (numero d'indice) nel quale è aperta; ' - il nome; Write "\e[31m&h" & Hex(n, 8) & "\e[0m " & Format(X11.GetWindowProperty(n, "_NET_WM_DESKTOP")[0], "-#") & " " ' Verifica se vi sono finestre, come messaggi di errore dal sistema, che non posseggono nome: ob = X11.GetWindowProperty(n, "_NET_WM_NAME") If Object.IsValid(ob) Then Write ob[0] Print Next Repeat ' Attende l'immissione nell'InputBox dell'ID della finestra, ove inviare successivamente i dati stringa. ' Se si immette il numero dell'ID in rappresentazione esadecimale, bisognerà farlo precedere dal simbolo "&". s = InputBox("Inserire il numero identificativo della finestra prescelta:") Until IsNumber(s) id = Val(s) End Public Sub TextArea1_KeyRelease() If (IsNull(TextArea1.Text)) Or (Key.Code <> Key.Enter) Then Return X11.ActiveWindow = id ' Il Metodo ".SendKeys()" consente l'invio di uno o più caratteri alla volta: X11.SendKeys(TextArea1.Text[pos, TextArea1.Text.Len - pos]) ' Si potrà anche usare il Metodo ".SendKey()", che consente però l'invio di un carattere alla volta: ' For i As Integer = pos To Len(TextArea1.Text) - 1 ' X11.SendKey(TextArea1.Text[i, 1], True) ' X11.SendKey(TextArea1.Text[i, 1], False) ' Next pos = TextArea1.Text.Len End
Invio dati stringa a un programma esterno contenente un'area di testo mentre si scrive nella TextArea del programma Gambas
Se si desidera inviare a un programma esterno, avente un'area di testo (ad esempio un Editor di testo), caratteri ASCII contemporaneamente si scrivono gli stessi nella TextArea del programma Gambas, si potrà adottare il seguente esempio, molto simile al precedente, attivando il Componente gb.desktop.x11.
Bisognerà lanciare prima il programma esterno (editor di testo) e successivamente il seguente codice.
Mentre si scrive nella TextArea del programma Gambas, si dovrà avere cura di procedere lentamente.
Private id As Integer Public Sub Form_Open() Dim n As Integer Dim ob As Object Dim s As String For Each n In X11.GetWindowProperty(X11.RootWindow, "_NET_CLIENT_LIST") ' Di ciascuna finestra aperta mostra in console: ' - l'ID (in esadecimale); ' - il desktop (numero d'indice) nel quale è aperta; ' - il nome; Write "\e[31m&h" & Hex(n, 8) & "\e[0m " & Format(X11.GetWindowProperty(n, "_NET_WM_DESKTOP")[0], "-#") & " " ' Verifica se vi sono finestre, come messaggi di errore dal sistema, che non posseggono nome: ob = X11.GetWindowProperty(n, "_NET_WM_NAME") If Object.IsValid(ob) Then Write ob[0] Print Next Repeat ' Attende l'immissione nell'InputBox dell'ID della finestra, ove inviare successivamente i dati stringa. ' Se si immette il numero dell'ID in rappresentazione esadecimale, bisognerà farlo precedere dal simbolo "&". s = InputBox("Inserire il numero identificativo della finestra prescelta:") Until IsNumber(s) id = Val(s) End Public Sub TextArea1_Cursor() X11.ActiveWindow = id Wait 0.1 X11.SendKey(Right(TextArea1.Text, 1), True) X11.SendKey(Right(TextArea1.Text, 1), False) X11.ActiveWindow = Me.Handle End
Invio dati stringa a un Terminale
Nel caso in cui il programma esterno, al quale inviare i dati stringa sia un Terminale, vale comunque il codice sopra esposto, ma si vedano anche le seguenti pagine: