Gambas-it

Gambas3 => Programmazione => Topic aperto da: tornu - 12 Novembre 2011, 11:52:37

Titolo: Tastiera virtuale
Inserito da: tornu - 12 Novembre 2011, 11:52:37
Ho la neccessità di utilizzare in un progetto Gambas3 una tastiera virtuale su un touchscreen,
la prima cosa che mi è venuta in mente è richiamare quella disponibile in Ubuntu, perchè realizzarne
una con Gambas (presumo fattibile) credo sia un pò complicato.
Con la seguente istruzione

Codice: gambas [Seleziona]

Public Sub BtnKeyb_Click()
  Shell "onboard"
End


ho richiamato come detto quella di Ubuntu, che va benissimo come tastiera per le mie esigenze,
ma ho un problema, mi spiego:
Quando richiamata vorrei visulizzarla all'interno di un form con delle dimensioni ben precise posizionandola
in un punto prefissato dello schermo.
Non ho idea di come fare è se la cosa è fattibile.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 12 Novembre 2011, 14:12:05
"all'interno di un form" io direi con l'Embedder ed il metodo Embed.


Se vuoi, invece, semplicemente visualizzarla sullo schermo:

Codice: gambas [Seleziona]

Public Sub BtnKeyb_Click()

Shell "onboard" Wait

' la tastierina virtuale viene posta in basso al centro dello schermo:
  Shell "wmctrl -r onboard -e 0,500,800,600,300"

End


Note:
1) Con il comando bash wmctrl la tastierina virtuale (in realtà: la finestra del programma da gestire) deve essere ovviamente aperta prima che operi il comando wmctrl (perché appunto questo agirà sulla sua finestra);
2) riguardo ai valori dell'esempio precedente:
Quindi, volendo, puoi anche far modificare la grandezza della tastierina virtuale. Se non vuoi, i due ultimi parametri dovrebbero essere posti a -1.

Titolo: Re: Tastiera virtuale
Inserito da: tornu - 12 Novembre 2011, 19:08:04
Ciao vuott,
grazie per la risposta ma sinceramente non ho capito i contenuti dei link che mi hai postato.
A me serve non solo visualizzarla ma deve interagire con il programma che sto realizzando in quanto deve funzionare
su un pc con touchscreen senza tastiera.
Ho detto contenuta all'interno di un form (per farmi capire) perchè non ho idea di come fare, inoltre
l'eventuale "contenitore" della tastiera virtuale mi deve dare la possibilità di inserire altri oggetti.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 12 Novembre 2011, 19:58:15
A me serve non solo visualizzarla ma deve interagire con il programma che sto realizzando...
Scusami, non sono stato preciso. Con "wmctrl la tastierina virtuale non viene solo visualizzata, ma funziona regolarmente: il comando wmctrl ti consente semplicemente di gestire la finestra della tastierina.
Se, infatti, provi a piazzare ad esempio una TextArea nel form ed a posizionare sullo schermo la tastierina virtuale con wmctrl, potrai vedere che cliccando sui suoi tasti  :coder: appaiono i caratteri sulla TextArea del programma.


Ho detto contenuta all'interno di un form...
...non ho capito i contenuti dei link che mi hai postato.
Da quel che so, lo puoi fare con Embed; ci sono varie discussioni al riguardo nel forum: prova a fare una ricerca.
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 12 Novembre 2011, 22:30:29
Grazie per le spiegazioni, ho fatto una ricerca sul forum (l'avevo fatta prima di postare) ma non ho trovato nulla di illuminante.
Rimango in attesa se tu o qualsiasi altro ha delle idee....
Titolo: Re: Tastiera virtuale
Inserito da: sotema - 13 Novembre 2011, 13:49:25
http://gambasdoc.org/help/comp/gb.qt4/embedder?v3&show
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 13 Novembre 2011, 22:29:09
Grazie ragazzi per le dritte.
Al momento sono fermo, ho dato uno sguardo alla documentazione che mi avete linkato, salvo che non mi sia sfuggito non ho trovato
niente che mi abbia ispirato, mi è alquanto ostica.
L'unico passo avanti che ho fatto è aver trovato un'esempio per Gambas2 nella Mailing-list Gambas Users, che ho provato è sono rimasto un pò perplesso. Lo posto è se qualcuno più esperto di me ha la volontà di provarlo è riesce a tirarne fuori un'idea da applicare alla mia neccessità lo ringrazio. L'unica cosa che vi anticipo e che ho dato uno sguardo al codice che purtroppo nei commenti, variabili è qunt'altro non siano comandi     
Gambas sono in tedesco.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 14 Novembre 2011, 16:59:26
Ho la soluzione per te
(necessita ancora  ;D la presenza nel sistema del programmino wmctrl):

Codice: gambas [Seleziona]


Private h As Process

Public Sub Form_Open()

'....va be', metto qui a fini esemplificativi l'avvio di "onboard"
  h = Shell "onboard"

End

Public Sub Button1_Click()

 Dim id As Integer
 Dim listaId, s As String
 Dim ss As String[]
 Dim j As Byte

  Shell "wmctrl -p -l" To listaId

' per estrapolare l'ID di "onboard" raccolgo tutte le righe della variabile "listaId"
' distinguendole sulla base del carattere "nuova riga a capo":
    ss = Split(listaId, "\n")
 
    For j = 0 To ss.Max
' Se nella riga presa in considerazione è presente la parola "onboard"...
       If ss[j] Like "*onboard" Then
'...allora ne raccogliamo i caratteri che indicano l'Id in esadecimale della sua finestra...
         s = Replace(Split(ss[j], " ")[0], "0x", Null)
' ...e lo convertiamo in decimale:
         id = Val("&" & s)
' Per curiosità vediamo l'Id in console:
         Print id
       Endif
     Next

 ' Inserisco l'Id della finestra di "onboard" in "Embed":
     Embedder1.Embed(id)

End


Public Sub Button2_Click()  ' con questo puoi anche eliminare la tastierina

   h.kill

End


 :rolleyes:

Io l'ho provato con la calcolatrice KCalc su Kubuntu-KDE, e funziona perfettamente.

Fammi sapere.  :ciao:
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 14 Novembre 2011, 18:30:33
Ciao vuott,
intanto grazie per l'aiuto che mi stai dando, ho provato il tuo codice ma all'avvio mi da questo errore:
Not enough arguments
Mi manca forse qualcosa?  ???
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 14 Novembre 2011, 20:28:34
....ho provato il tuo codice ma all'avvio mi da questo errore:
Not enough arguments
Mi manca forse qualcosa?  ???

...me lo dava anche a me fino a ieri questo medesimo problema, al di là del codice, che ho scritto solo oggi pomeriggio e che t'ho passato. Poi ieri sera ho fatto un aggiornamento di Gambas, ed oggi funziona. Forse il problema stava in qualche bug...  :-\  ..non saprei !  :-\
L'Embdder oggi mi funziona sia con KDE che con Gnome (poco fa - tra l'altro - ho embeddato con Mint-Gnome proprio la tastierina "onboard" !!!  :coder:  Quindi la cosa la potrai fare tranquillamente... se risolvi quel problema.)

Ho notato però che:





Adde:
Dunque... sto provando ancora con l'Embedder: sto inglobando l'ira di dio !  Proprio di tutto !  :coder:  Mr Calamita ! :P Uno spassoooo !  
:party:
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 15 Novembre 2011, 12:56:01
...ma ho elaborato una strada molto più breve e veloce:  :coder:
(qui non è più necessario wmctrl, né useremo più la Classe Process. Bisogna però attivare il componente: gb.desktop)

Codice: gambas [Seleziona]


Private dw As DesktopWindow  


Public Sub Form_Open()

  Shell "onboard"
      
End


Public Sub Button1_Click()

  Dim a As Integer


' Fra le finestre aperte sul Desktop...
    For Each dw In Desktop.Windows
    
 '...cerca quella avente nome "onboard"...
      If dw.name = "onboard" Then
 ' ...per estrarne l'Id (già in decimale !)...
        a = dw.Id
      Endif

   Next
  
 ' ...che va ad inserire in Embed:
   Embedder1.Embed(a)
  
End


Public Sub Button2_Click()  ' chiude "onboard"

' La finestra di "onboard" viene liberata dall'inglobamento:
   Embedder1.Discard()

' Viene nuovamente individuata...
   For Each dw In Desktop.Windows  
     If dw.name = "onboard" Then  
'  e quindi viene chiusa:
       dw.Close
     Endif  
   Next

End




...... di più "nin zò" !  ;D
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 16 Novembre 2011, 12:05:11
Ehi! vuott non ti fermi più.... ;D
Abbiamo fatto passi avanti, per quanto riguarda l'errore che ti ho postato precedentemente ho risolto aggiornando (da svn) all'ultima versione.
Ho provato l'ultimo codice che hai postato ed avviene una cosa "strana", si avvia il form che contiene l'Embedder, viene visualizzata la tastiera
(onboard) all'interno del form, ma se sposto con il mouse il form in un'altra posizione la tastiera rimane ferma nella sua posizione.
Ne ho dedotto che la tastiera non è "inglobata" nell'Embedder ma che i due oggetti sono separati. ??? ???
Io uso:
Ubuntu 10.04 LTS
Gambas3 Rev.(svn)4249
Ora se il problema è quello che hai descritto tu
Ti segnalo che:

1 - Ho notato però che:
  • effettuando l'inglobamento (...embedding) con Mint-Gnome, questo non avviene con impostazione del componente gb.qt4, ma solo impostando il componente gb.gtk oppure il componente gb.gtk ! (ma questo fatto solo i più esperti, rispetto ad un semianalfabeta come me, potranno spiegarti il perché);
  • effettuando l'inglobamento, invece, con Kubuntu-KDE, esso avviene anche con gb.qt4 !
vediamo se qualcuno degli esperti del forum mi può dare una mano.
Grazie
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 16 Novembre 2011, 13:29:35
Ho provato l'ultimo codice che hai postato ed avviene una cosa "strana", si avvia il form che contiene l'Embedder, viene visualizzata la tastiera
(onboard) all'interno del form, ma se sposto con il mouse il form in un'altra posizione la tastiera rimane ferma nella sua posizione.
Ne ho dedotto che la tastiera non è "inglobata" nell'Embedder ma che i due oggetti sono separati. ??? ???
Io uso:
Ubuntu 10.04 LTS
Gambas3 Rev.(svn)4249

...dunque.... sto provando l'ultimo codice (quello più veloce con le funzioni di Gambas) con Kubuntu-KDE: ho inglobato la calcolatrice, ed ho provato a spostare il form per verificare il problema da te sollevato. Posso confermarti che la calcolatrice resta inglobata regolarmente nel riquadro dell'Embedder, e si sposta coerentemente con il form all'interno (come detto) dell'Embedder. Ti segnalo (ed è una conferma in fondo) che questo mi avviene (ho infatti eseguito per curiosità nuovamente le prove) sia impostando gb.qt4, sia gb.gui, sia gb.gtk.

Il problema da te segnalato, sospetto sia derivato dal fatto che tu - probabilmente (dammi conferma o smentita) - non hai piazzato sul form almeno un Button. Il mio breve codice, infatti, prevede l'azione di inglobamento solo se clicchi su un tasto, che deve chiamarsi "Button1" (come da codice).
La circostanza che la tastierina a te si apra proprio sul form, suppongo sia del tutto casuale. E', però, semplicemente visualizzata lì su.
Se è così, allora fai così:
1) piazza un Button1 nel form;
2) lancia il programmino;
3) clicca sul tasto;
4) verificato l'effettivo inglobamento nel riquadro dell'Embedder, prova a spostare il form.
Puoi piazzare anche un Button2 per chiudere contemporaneamente la tastierina ed il programmino Gambas.

Fammi sapere.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 16 Novembre 2011, 17:32:56
..ad ogni modo... mi ha incuriosito il programmino EMBED.tar.gz, che hai inserito in un tuo messaggio sopra, e gli ho dato uno sguardo. E' vero, le spiegazioni scritte dall'autore sono in tedesco, però ho cercato di capirne il funzionamento e soprattutto di individuare i passaggi più importanti e salienti.
...e ho lì trovato un terzo modo di individuare l'ID della finestra di un programma  ;D . L'algoritmo lo puoi vedere all'interno della subroutine "WindowIDErmitteln()" (che infatti in tedesco insomma significa sostanzialmente "determina l'Id di una finestra).

Allora, il comando essenziale usato per ricavare l'ID è xwininfo:
xwininfo -name "nome_finestra_programma" | grep "nome_finestra_programma"

Ti riporto dunque il mio codice precedente, come sarebbe inserendo però il metodo di identificazione ed estrapolazione dell'ID della finestra utilizzato nel programma dell'autore tedesco:

Codice: gambas [Seleziona]


Private h as Process

Public Sub Form_Open()

  h = Shell "onboard"
      
End


Public Sub Button1_Click()
  Dim iWinId_Dezimal As Integer
  Dim sXWinInfoListe As String
  Dim aMatrix As String[]
  
' inserisce nella variabile stringa tutto il risultato del comando "xwininfo"...
  Shell "xwininfo -name " & "\"onboard\" | grep " & "\"onboard\"" To sXWinInfoListe

' ... e lo "spezzetta" nelle sue parole componenti,
' che inserisce in piu variabili stringhe[]:
  aMatrix = Split(sXWinInfoListe, " ")

' prende il contenuto della variabile stringa[] contenente il numero dell'ID (in esadecimale);
' lo converte in esadecimale compresibile da Gambas; poi in decimale....
     iWinId_Dezimal = Val("&" & Mid$(aMatrix[3], 3))
  
 ' ...che va ad inserire in Embed:
   Embedder1.Embed(iWinId_Dezimal)
  
End


Public Sub Button2_Click()  ' chiude "onboard" e poi il programma

  h.Kill
  Me.Close

End

Titolo: Re: Tastiera virtuale
Inserito da: tornu - 16 Novembre 2011, 17:57:28
Il form che avevo creato conteneva anche i due pulsanti, ma niente da fare.
Visto che stavo provando nel progetto per cui mi serve questa funzione, per sgombrare ogni dubbio che altro codice rompesse le scatole
all' Embedder ho creato un progetto di test pulito dove c'è soltanto un form, l'embedder e i due pulsanti previsti dal tuo codice che ho
utilizzato senza cambiare una virgola.
Il risultato non cambia.Ti allego uno screenshot del risultato.
Se hai altri suggerimenti ho riesci a capire perchè questo comportamnto, sono qui.
Ciao
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 16 Novembre 2011, 20:15:48
Il risultato non cambia.Ti allego uno screenshot del risultato.
Il comportamento è strano davvero   :rolleyes: , poiché io ho inglobato  :coder: la tastierina, con tutti e tre i metodi prima descritti !

Scusami, puoi darmi queste informazioni ?

1) usi KDE o GNOME ?
2) quale componente hai impostato? gb.qt4, gb.gui oppure gb.gtk ?
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 17 Novembre 2011, 00:28:13
Il fatto che a te funzioni....mi rode  :hatecomputer: >:( :evil:
Uso Gnome, gb.qt4, gb.gui, ho provato ad inpostare anche gb.gtk, idem non funziona.
A meno che tu non abbia attivato componenti o qualche configurazione che io ho disabilitati, non so proprio cosa dire.
Come ho detto sopra la cosa mi fa inca....volare perchè mi serve proprio per il progetto che sto eseguendo.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 17 Novembre 2011, 00:34:00
Il fatto che a te funzioni....mi rode  :hatecomputer: >:( :evil:
Uso Gnome, gb.qt4, gb.gui, ho provato ad inpostare anche gb.gtk, idem non funziona.
A meno che tu non abbia attivato componenti o qualche configurazione che io ho disabilitati, non so proprio cosa dire.
Come ho detto sopra la cosa mi fa inca....volare perchè mi serve proprio per il progetto che sto eseguendo.

Guarda, mi spiace davvero  :-\ , io ce l'ho messa tutta !  :'(
Ti ripeto, l'ho fatto funzionare con tutti e tre quei metodi sia su KDE che su GNOME...  :-\
Ad ogni modo devo ringraziarti per aver messo questa domanda, perché mi hai dato la spinta per tornare sull'argomento.

Riguardo al tuo problema.... non so cosa dire   :-\   :hard:
Comunque su questa questione ed sul tuo problema teniamoci in contatto.
Titolo: Re: Tastiera virtuale
Inserito da: Ceskho - 17 Novembre 2011, 09:13:40
Il fatto che a te funzioni....mi rode  :hatecomputer: >:( :evil:
Uso Gnome, gb.qt4, gb.gui, ho provato ad inpostare anche gb.gtk, idem non funziona.
A meno che tu non abbia attivato componenti o qualche configurazione che io ho disabilitati, non so proprio cosa dire.
Come ho detto sopra la cosa mi fa inca....volare perchè mi serve proprio per il progetto che sto eseguendo.

Tra gli esempi di gambas c'è anche quello dell'embed. Quello ti funziona?
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 17 Novembre 2011, 10:22:58
Tra gli esempi di gambas c'è anche quello dell'embed. Quello ti funziona?

Buon suggerimento quello di Ceskho.

Ecco, Tornu, anche l'esempio di Gambas, suggerito da Ceskho, a me funziona regolarmente !  :-\

Ad ogni modo, l'unica cosa che mi pare cambi rispetto agli esempi precedenti, da me segnalati, è semplicemente e sostanzialmente la modalità di individuazione ed estrazione del PID, che comunque è già presente in questo forum:
http://www.gambas-it.org/smf/index.php?topic=163.0
http://www.gambas-it.org/smf/index.php?topic=1791.msg20424#msg20424

e che vorrei qui riportare dall'esempio di Gambas, ricordato sopra da Ceskho, per completare il quadro delle possibilità, con questo quarto modo.
E' necessario avere attivato il componente gb.desktop:

Codice: gambas [Seleziona]

Public Sub btnEmbed_Click()

  Dim sTitle as String
  Dim aHandle As Integer[]
  Dim iHandle As Integer
  
    sTitle = txtTitle.Text

' se nel campo del titolo è stato inserito direttamente
' il numero esadecimale dell'ID della finestra del programma aperto,
' lo muta nella sua versione comprensibile da Gambas,
' poi lo converte in decimale:
  If Left(sTitle, 2) = "0x" Then
    iHandle = Val("&" & Mid$(sTitle, 3))

' se, invece, è stato inserito il numero esadecimale dell'ID
' della finestra del programma aperto, già nella sua versione
' comprensibile da Gambas, lo converte direttamente in decimale:
    Else If Left(sTitle) = "&" Then
      iHandle = Val(sTitle)
  
' se, invece, è stato inserito il "titolo" della finestra del programma aperto,
' ne ricava il suo ID (avendo anche l'accortezza di eliminare ogni eventuale
' spazio presente all'inizio o alla fine del titolo inserito):
    Else
     aHandle = Desktop.FindWindow(Trim(txtTitle.Text))

    If aHandle.Count = 0 Then
      Message.Warning(("Window not found!"))
      Return
    Else If aHandle.Count >= 2 Then
      Message(("Several windows found. I take the first one!"))
    Endif
    
      iHandle = aHandle[0]
  Endif
  
  Try embEmbedder.Embed(iHandle)

  If Error Then Message.Warning(Error.Text)

End
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 17 Novembre 2011, 20:11:12
Tra gli esempi di gambas c'è anche quello dell'embed. Quello ti funziona?

Ciao Ceskho,
di guardare tra gli esempi non ci avevo proprio pensato.Ho provato dopo il tuo suggerimento, ma niente da fare, il programma mi restituisce
questo messaggio
Il programma ha ritornato il valore: 1
mi fai sapere se a te funziona, perchè se a te funziona siete in due, e a questo punto qualcosa non và nelle prove che stò faccendo io,
o il sistema operativo o la versione di Gambas o non so proprio cosa.
Grazie
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 17 Novembre 2011, 23:46:10
il programma mi restituisce questo messaggio
Il programma ha ritornato il valore: 1

Debbo riportare un fatto strano.

Ho ricopiato l'intero codice del programma Embedder, preso dagli esempi di Gambas; ho anche ricreato il form. L'ho lanciato, e anche a me - però in questo caso - ho ottenuto la segnalazione del tuo medesimo errore: Il programma ha ritornato il valore: 1 ! ???

E' strano.  ??? Se lancio l'esempio originale, mi funziona regolarmente; se lo copio, e lo ricreo, mi dà quell'errore.  :rolleyes:

Ho verificato che l'errore non è dato al livello della riga della funzione di inglobamento della finestra (Try Embedder1.Embed(iHandle), bensì alla riga di individuazione del PID: aHandle = Desktop.FindWindow(txtTitle.Text) .

Ho ricontrollato le impostazioni: non ho lasciato niente, e non ho aggiunto niente di diverso rispetto all'originale...


eheheh  ;D ...poi per curiosità ho impostato il componente gb.qt4, con il quale GNOME non mi faceva inglobare niente. In questo caso non mi viene restituito l'errore 1, il programma va avanti, sì, ma mi compare il messaggio - evenienza questa prevista dal programma originale): "Window not found!". Questa finestra compare se accade: If aHandle.Count = 0 .

A 'sto punto, a me viene da ridere !  :rotfl:  :hatecomputer:
Titolo: Re: Tastiera virtuale
Inserito da: milio - 18 Novembre 2011, 06:42:13
Sei sicuro di aver messo il titolo della finestra esattamente come ti compare nella barra dei processi?


Ho fatto dei test anche io e ho constatato che con le qt tutto ok mentre con le gtk mi 'uccide' il processo incorporato.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 18 Novembre 2011, 11:01:55

Debbo riportare un fatto strano.
.......

Ieri sera, dopo aver inserito questo messaggio, ho fatto altre prove. Avrei voluto riportarle, ma non sono riuscito a ricollegarmi ad internet. Le riporto ora.

Dunque, in tutte le prove comunque effettuate in questi giorni anch'io mi sono reso conto, come Milio fa rilevare, che se il programma prevede l'acquisizione del titolo della finestra da inglobare, questo va passato in modo preciso ! Infatti, per esempio, il programma dell'autore tedesco, che Tornu ha qui allegato, prevede - ad ogni buon fine - un Trim$ per eliminare possibili spazi erroneamente posti prima o dopo il titolo riportato nell'apposita area di testo in alto.

Dopo aver effettuato diversi tetativi e prove, nelle quali riscontravo - come ho prima riportato - lo stesso problema di Tornu (errore 1), mi è sorto il sospetto che ci fosse un elemento disturbatore. Ciò perché ad un certo punto - probabilmente il sistema s'era silenziosamente imballato in qualcosa - non riuscivo più ad inglobare niente.
Ho, quindi, riavviato il sistema, rilanciati alcuni di quei programmi che avevo lanciato prima, ed ho provato l'embedder. Ora funzionava.
Ho lanciato anche QSynth (che precedentemente avevo aperto per ascoltare i file Midi), e stranamente l'embedding via introduzione del titolo di una finestra qualsiasi tornava ad essere malfunzionante. Aggiungo che, se invece, ricavavo diversamente il PID e lo inserivo (per esempio con un InputBox), l'inglobamento funzionava regolarmente. Riuscivo con questo stratagemma, presente QSynth, ad inglobare non solo ogni finestra, ma anche (come ho fatto anche  altre volte) QSynth medesimo !
Voglio dire che, non solo mi è stato impossibile inglobare QSynth mediante il titolo della sua finestra, ma anche la sua sola presenza (ancorché minimizzato o posto in un altro desktop) interferiva con Embedder ! Ripeto, l'unico modo di inglobare qualcosa (Qsynth medesimo), stante Qsynth avviato, era porre direttamente il numero del PID della finestra che intendevo inglobare.
Vorrei aggiungere riguardo al titolo della finestra di QSynth, che cercando il suo PID esadecimale con il comando in Terminale: wmctrl -p -l, il titolo veniva riportato con una parentesi quadra di chiusura a capo. Forse la finestra di QSynth prevede alla fine qualche sorta di metacarattere....  :-\

Ho raccontato tutta questa storia per confermare, come ha già ricordato e ben sottolineato da Milio, l'importanza del riportare il nome corretto del titolo della finestra da inglobare, ed anche la circostanza che - fra le tante altre possibili cause - possa esserci qualche programma (anche come demone) che disturbi l'azione di Embedder. Questa cosa, Tornu, devi un po' verificarla.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 18 Novembre 2011, 11:11:54
Ho fatto dei test anche io e ho constatato che con le qt tutto ok mentre con le gtk mi 'uccide' il processo incorporato.

A te succede l'esatto contrario di quanto succede a me con GNOME !
Come ho riportato in più messaggi sopra, con KDE inglobo con qualsiasi componente grafico attivato. Se uso invece GNOME, l'embedding avviene solo con gb.gui o gb.gtk, ma non con gb.qt4 ! Circa quest'ultimo, ho notato però che la finestra che voglio inglobare, quando premo sul tasto per attivare l'inglobamento, ha un sussulto: si chiude e si riapre in un attimo... è come se stesse lì lì per essere inglobata, ma non l'azione non viene portata a termine, non riesce.

Milio, tu hai Gnome o KDE ? E' interessante a questo punto sapere se questo comportamento tende ad essere universale, o è un problema solo mio.

Secondo me, tenuto conto di tutti 'sti problemi riportati in questa discussione, l'Embedder non è ancora del tutto preciso ed efficace.
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 19 Novembre 2011, 23:35:45
..........
Secondo me, tenuto conto di tutti 'sti problemi riportati in questa discussione, l'Embedder non è ancora del tutto preciso ed efficace.

Sarà pure come hai dedotto tu, però quello che non riesco a capire è che comunque ad alcuni di voi funziona, a me no.
Per il momento mi accontento della tastiera virtuale "libera" non inglobata in Gambas, se per caso avete novità in merito
fatevi sentire.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 20 Novembre 2011, 23:44:20
Forse la finestra di QSynth prevede alla fine qualche sorta di metacarattere....  :-\

Ho raccontato tutta questa storia per confermare, come ha già ricordato e ben sottolineato da Milio, l'importanza del riportare il nome corretto del titolo della finestra da inglobare,...

Ho risolto questo problema, relativo a titoli un po' particolari delle finestre, mediante LIKE ed il metacarattere * nel modo seguente.
Prendo come esempio ancora una volta la finestra di QSynth, che ha per titolo: Qsynth - A fluidsynth Qt GUI Interface [Qsynth1] (...insomma, una cosa terribile !  ;D ):

Codice: gambas [Seleziona]

Public Sub Button1_Click()

Dim dWindow As DesktopWindow
Dim a As Integer


    For Each dWindow In Desktop.Windows

 ' cerca la finestra avente il titolo che inizia con "Qsynth"
 ' e continua con i restanti caratteri, dei quali è eventualmente costituito...
      If dWindow.name Like "Qsynth*" Then

 ' ...per estrarne l'Id (già in decimale !)...
        a = dWindow.Id

      Endif

   Next      

 ' ...che va ad inserire in Embed:
   Embedder1.Embed(a)

End
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 21 Novembre 2011, 11:47:49
Io uso:
Ubuntu 10.04 LTS

...ma il tuo problema non potrebbe essere legato al fatto che hai una versione non aggiornata del sistema ?
Chissà ? Potrebbe darsi che il problema del mancato inglobamento stia proprio là !
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 21 Novembre 2011, 19:29:24
Io uso:
Ubuntu 10.04 LTS

...ma il tuo problema non potrebbe essere legato al fatto che hai una versione non aggiornata del sistema ?
Chissà ? Potrebbe darsi che il problema del mancato inglobamento stia proprio là !

La versione non è vecchia, la variante LTS (Long Time Support) di Ubuntu significa che viene supportata per 3 anni a differenza delle altre
versioni che vengono rilasciate ogni 6 mesi e la versione server ogni 5 anni.
A poposito dell'osservazione di Milio (da te ripresa) sulla correttezza del titolo della finestra, io l'ho sempre inserito come onboard, anche
se sulla barra dei processi viene riportato [onboard] con le parentesi quadre, ho provato ad inserirlo aggiungendo queste ultime ma non
cambia niente.
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 22 Novembre 2011, 13:05:51
se sulla barra dei processi viene riportato [onboard] con le parentesi quadre, ho provato ad inserirlo aggiungendo queste ultime ma non cambia niente.
...uhmm...

Scusami, puoi dirmi:
1) dopo aver lanciato onboard, quali risultati dà in terminale il comando: wmctrl -p -l (quest'ultima è una elle). Cioè vorrei sapere come riporta il titolo della finestra di onboard lì nel terminale;

2) cosa succede se provi la soluzione da me inserita nella precedente Risposta #27 inserendo:
- If dWindow.name Like "[on*" Then... (il resto di quel codice)
- ed anche provando: If dWindow.name Like "*on*" Then...
Non dimenticare di attivare il componente: gb.desktop.
Titolo: Re: Tastiera virtuale
Inserito da: tornu - 22 Novembre 2011, 18:24:45
Ciao vuott,
vedo che non ti arrendi... :D, anchio sto continuando a provare e ti aggiorno su alcune piccole novità, non ho
risolto ma qualche cosa rispetto a prima succede, in ordine:
...uhmm...

Scusami, puoi dirmi:
1) dopo aver lanciato onboard, quali risultati dà in terminale il comando: wmctrl -p -l (quest'ultima è una elle). Cioè vorrei sapere come riporta il titolo della finestra di onboard lì nel terminale;

2) cosa succede se provi la soluzione da me inserita nella precedente Risposta #27 inserendo:
- If dWindow.name Like "[on*" Then... (il resto di quel codice)
- ed anche provando: If dWindow.name Like "*on*" Then...
Non dimenticare di attivare il componente: gb.desktop.

1) Ti allego uno screenshot del terminale
2) Non succede niente, nel senso che l'Embedder rimane vuoto ed il programma non da nessun messaggio

Riprovando i vari listati che mi hai postato quello della risposta #20 si comporta in modo "strano":
se inserisco onboard nella TxtTitle il programma si chiude restituendo questo messaggio
Il programma ha restituito il valore: 1
se invece non inserisco niente viene visualizzato un'altro messaggio (presente nel codice)
Several windows found. I take the first one!
che praticamente vuol dire (scusate l'interpretazione "casalinga", ma credo di non sbagliare),
ho trovato varie finestre e prendo la prima, la cosa curiosa e che dopo aver premuto l'ok del messaggio mi
visualizza all'interno dell'Embedder il browser Firefox funzionante (allego schermata), che non è la prima applicazione
sulla barra ma la seconda  ??? Continuo a provare in attesa di nuove
Titolo: Re: Tastiera virtuale
Inserito da: vuott - 22 Novembre 2011, 23:55:00
Ciao vuott,
vedo che non ti arrendi...
Non mi arrendo, perché non accetto che non possa funzionare anche a te 'sto embedder ! Sai.... io sono appenninico, e quindi ho la testa dura...  :hard:
...e poi, comunque, c'è un ritorno utile anche per me  :P , perché mi aiuta a capire meglio, a ricercare, a studiare l'argomento.

:D, anchio sto continuando a provare e ti aggiorno su alcune piccole novità, non ho
risolto ma qualche cosa rispetto a prima succede, in ordine:

2) Non succede niente, nel senso che l'Embedder rimane vuoto ed il programma non da nessun messaggio

...appunto, è già un passo in avanti. Comunque bisogna indagare di più.

Riprovando i vari listati che mi hai postato quello della risposta #20 si comporta in modo "strano":
se inserisco onboard nella TxtTitle il programma si chiude restituendo questo messaggio
Il programma ha restituito il valore: 1
se invece non inserisco niente viene visualizzato un'altro messaggio (presente nel codice)
Several windows found. I take the first one!
che praticamente vuol dire (scusate l'interpretazione "casalinga", ma credo di non sbagliare),
ho trovato varie finestre e prendo la prima, la cosa curiosa e che dopo aver premuto l'ok del messaggio mi
visualizza all'interno dell'Embedder il browser Firefox funzionante (allego schermata), che non è la prima applicazione
sulla barra ma la seconda  ??? Continuo a provare in attesa di nuove

...va be'.... diciamo che comunque "qualcosa" l'hai inglobata. E questo è un secondo passo.

...scusa, puoi provare a far inglobare la finestra di qualche altro programma (la calcolatrice, un editor di testo [attenzione: in questo caso Embed potrebbe volere il titolo "Untitled..." osserva bene il titolo dell'Editor di testo e serviti per questo anche di wmctrl ] , e qualche altro programma semplice) ? Magari provane più di uno, e verifica il comportamento dell'Embedder. Se puoi, cerca di provare tutti e quattro i metodi.

A questo punto il motto per noi è uno solo: O Embedding, o morte !  :skull: