Autore Topic: [Risolto] Programma che scrive su un editor di testo contemporaneamente aperto  (Letto 2932 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Salve  :ciao: nuovamente a tutti.

Dopo la lunga questione Gambas&Midi s.r.l.  :P di tempo fa torno per porne un'altra, forse più semplice. Probabilmente è molto simile a questa: http://www.gambas-it.org/smf/index.php?topic=893.0 .

Scopo: l'intenzione è di realizzare un programma con dei tasti virtuali, cliccando sui quali far scrivere dei caratteri (o meglio: gruppi di caratteri ASCII) in un editor di testo contemporaneamente lanciato.

Esempio di quello che dovrebbe accadere:
1) lancio un qualsiasi editor di testo;
2) lancio il mio programmino con i tasti;
3) premo il tasto n. 1 sul mio programmino e quindi nell'editor di testo viene scritto il gruppo di caratteri, ad esempio: abc . Poi schiaccio il tasto n. 2 e nell'editor di testo viene scritto il gruppo di caratteri: c'2 .
E così via.

Insomma, come se il programmino fosse una sorta di tastiera per semplicissimamente scrivere con un solo clic dei gruppi caratteri ASCII in un Editor di testo.

Preciso ricordando che la mia intenzione non è quella di creare un editor di testo, bensì un programma che interagisca con un editor contemporaneamente funzionante.

Suppongo che il problema sia: come mi rapporto con l'editor per fargli scrivere dei caratteri ? "Porte" da tenere conto, forse, per comunicare con l'Editor ?
« Ultima modifica: 14 Novembre 2011, 23:23:41 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #1 il: 04 Giugno 2011, 20:42:15 »
Ciao vuott.

Scusa la domanda petulante ma: come mai non metti in conto di reliazzare un particolare editor? Non sapendo cosa hai in mente la domanda può sempbrare stupida ma non è proprio così.  ;)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #2 il: 04 Giugno 2011, 21:10:55 »
...come mai non metti in conto di reliazzare un particolare editor?...

Sì, effettivamente la tua domanda è legittima, non avendo io precisato meglio.

Diciamo che io  :-[ ho un programma, con il quale mostrare dei simboli grafici. Per far mostrare questi particolari simboli grafici, non ho purtroppo  :'( a disposizione un'interfaccia grafica con tools sui quali cliccare con il mouse, ma sono costretto a scrivere un **zzo  :hatecomputer: di particolare codice alfanumerico, simbolo per simbolo  :rolleyes:, nell'editor di testo di quel programma principale. Figurati, poi, dover ricordare tutto il protocollo di quei codici !

Se invece io abbinassi a ciascun tasto del mio programmino un particolare codice (gruppo di più caratteri) di quel protocollo, tale da far scrivere quel codice - appunto - nell'editor del programma principale, allora penso risparmierei tempo.

Insomma mi farei i tools (assenti nel programma principale) da me... o no ?  ???
« Ultima modifica: 21 Dicembre 2011, 11:45:51 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #3 il: 05 Giugno 2011, 15:39:35 »
Io la imposterei così:

- Lancio il programma scritto in gambas (facciamo finta si chiami HoUnCaneAscii) e contemporanemente si avvia anche l'editor grazie alla propeità open del form.
- HoUnCaneAscii presenta una serie di button s ognuno dei quali equivale ad un simbolo ed ha un label che mostra il sombolo premuto
- quando premo un simbolo in HoUnCaneAscii allora me lo carico in memoria
- vado nell'editor e lo incollo con CTRL+V

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #4 il: 05 Giugno 2011, 17:26:23 »
...sì, è una possibile soluzione. Però non mi accelera le cose: clicca sul tasto virtuale per memorizzare il codice ASCII, poi spostati con il topastro nel editor, quindi schiaccia Ctrl+v.... io invece vorrei far comparire il gruppo di caratteri nell'editor con il solo clic sul tasto virtuale del programmino houncaneascii.

A questo punto mi conviene scrivere direttamente nell'editor e... buonanotte.
« Ultima modifica: 05 Giugno 2011, 17:27:54 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #5 il: 06 Giugno 2011, 21:38:16 »
Scrivere un proprio editor non è proprio vagliabile come ipotesi?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #6 il: 08 Giugno 2011, 00:34:54 »
Scrivere un proprio editor non è proprio vagliabile come ipotesi?

Be'... no, perché io dovrei "pilotare" un editor di testo, esterno al mio ipotetico programma con i tasti, che ha due aree: una dove scrivere i codici, l'altra dove - ai codici immessi - vengono mostrati dei simboli speciali, che si sovrappongono anche fra loro.

La necessità di avere un programma che si interfaccia ed invia dati ad un altro programma, l'edito di testo principale, è data dal fatto che inserendo i codici (mediante i tasti del mio programmino  :-* ) dovrei costantemente controllarne il risultato finale con i simboli.

Insomma...... quali sono gli elementi da tenere conto per emulare una normale tastiera periferica per scrivere testo ? Credo che il mio programma si andrebbe ad affiancare - per certi versi - alla normale tastiera periferica per PC, in parte emulandone il comportamento nell'invio di dati (solo che nel mio caso sarebbe a livello software; nel caso di tastiera è un hardware vero e proprio che si interfaccia col calcolatore. No ?
« Ultima modifica: 08 Giugno 2011, 00:40:58 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #7 il: 10 Giugno 2011, 19:54:09 »
Ciao Vuott, mi viene da suggerti di gestire il tuo editor di testo tramite gambas gestendolo con la classe Process.
Quindi da gamas apri il tuo editor associandolo all'oggetto processo dichiarato da te e poi dovresti potergli mandare degli imput.
Ovviamente la mia è solo un'idea, non ho mai testato sul campo questi sistema  ;D .
Ciao.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #8 il: 11 Giugno 2011, 15:02:06 »
Guarda, su Windows hanno dovuto creare un linguaggio di programmazione dedicato a svolgere questo tipo di attività e quinsi non so se gambas di default ti possa permettere di farlo. Io guarerei le potenzialità di Sendkey....

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #9 il: 17 Giugno 2011, 21:31:02 »
....Io guarerei le potenzialità di Sendkey....

Ringrazio gli intervenuti.

Il suggerimento di "Berserker79" è affascinante, ma, anche leggendo i dubbi di "Ceskho" al riguardo, ho cominciato con quello che mi sembrava a prima vista più abbordabile per me. E' stata la mia "prima volta" con la funzione "desktop.sendkeys", pertanto ho dovuto guardarmi le spiegazioni, fare prove, sbagliare, riprovare, bestemmiare, e tutto il resto normalmente annesso....

Ad ogni modo, ho ottenuto quello che volevo: far scrivere una semplice stringa in un altro editor di testo premendo un tasto dal mio programmino Gambas. Vi allego il brevissimo codice sperimentale ed esemplificativo e vi dico i due problemi che ho incontrato e come li ho risolti  ....probabilmente non in modo elegante, ma mi pare di averli risolti:

Codice: gambas [Seleziona]


' Gambas class file


PUBLIC SUB Form_Open()

  SHELL "gedit"        ' All'apertura del programma per comodità lancia l'editor "gedit"
                               ' (uso "gedit" a fini sperimentali del codice)

END


PUBLIC SUB Button1_Click()        ' serve a far andare il focus nell'editor "gedit"
                                                   ' e quindi a tenere sempre il cursore all'interno di "Gedit"

   ME.hide                   ' nasconde il form...

    scrive()              ' chiama la subroutine "scrive()"

END

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 ' mademoiselle la Subroutine......


PUBLIC SUB scrive()                 ' svolge le funzioni di scrivere in "gedit"

  Desktop.SendKeys("Stringa ")      ' scrive in "gedit" la stringa "con uno spazio finale",
                                                    ' ...altrimenti non viene scritta  :-(

   Desktop.SendKeys("[BackSpace]")     ' ...ma io non voglio lo spazio alla fine della stringa,
                                                           ' e con questo comando lo elimino.
 
    ME.show                                ' il form, che avevo precedentemente nascosto, resta tale solo per un attimo,
                                                  ' perché mi deve essere subito mostrato per darmi la possibilità - qualora io lo voglia -
                                                  ' di inserire un'altra volta la stringa premendo il tasto (e così via).

END



1^ questione: se metto normalmente la stringa (che dovrà essere scritta) in Desktop.SendKeys, ...nell'editor non mi viene scritta  ???. Per farla scrivere devo porre uno spazio alla fine della stringa, in questo modo: "Stringa ".
La domanda è: perché ci vuole lo spazio ?

2^ questione: una volta premuto con il mouse il tasto del mio programmino, per far scrivere la stringa nell'editor avviato parallelamente, devo spostare il mouse per cliccare all'interno dell'editor. Insomma, per far comparire la scritta nell'editor devo fare in modo da attivare lì il focus del cursore. Però si capirà che questo è tutto un po' farraginoso con aggiunta di perdita di tempo: clicca qua nel programmino, spostati là nell'editor e cliccaci dentro per poter far comparire il risultato, poi torna al programmino Gambas per cliccare nuovamente sul tasto, poi torna sull'editor per vedere il risultato... insomma troppo un casino !  :nono:
Io, invece, ho bisogno di una cosa semplice e veloce ovviamente: clicco sul tasto del mio programmino Gambas e vedo apparire immediatamente la stringa prevista nel campo dell'editor; poi senza spostare il mouse di qua e di là nello schermo del monitor clicco nuovamente sul tasto e vedo immediatamente apparire la stringa prevista nel campo dell'editor ! Questo vorrei !  :hatecomputer:
Mentre riflettevo e provavo il mio programma, vedevo che, quando cliccavo nell'editor Gedit per far apparire la stringa, il programmimo Gambas ovviamente spariva, ....m'è venuto in mente, dunque, che se avessi fatto sparire il programmino all'atto della scrittura, senza però chiuderlo, forse avrei ottenuto il focus del cursore nell'editor, e quindi la comparsa della stringa (...come se avessi cliccato con il mouse nell'editor. Insomma ho pensato che avrei dovuto riprodurre in modo controllato il fenomeno della sparizione del mio programmino !). Ho utilizzato il comando ME.hide, ed infatti così è stato... e senza dover spostare il mouse là in gedit e cliccarci dentro ! Ovviamente mi serviva far comparire subito il programmino per poter cliccare nuovamente sul tasto. Per fare questo ho inserito il comando ME.show.  ...a me la cosa va, forse è una soluzione rozza, ma pare che va  :-\ !
La domanda è: secondo voi c'è un metodo alternativo più elegante e preciso ?
« Ultima modifica: 31 Agosto 2012, 10:40:34 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #10 il: 19 Giugno 2011, 13:08:15 »
La documentazione è praticamente inesistente circa questa funzione e tutto ciò che si può apprendere lo si può imparare solo a proprie spese (e poi si scrive qualcosa sul nostro wiki ovviamente...:-D ). Purtroppo anche la rete è lacunosa e non aiuta.

La soluzione migliore è quella che funziona e pertanto se tutto questo procedimento ti fa giungere tranquillamente al tuo fine nulla vieta che per te possa essere esatto.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #11 il: 19 Giugno 2011, 20:42:51 »
potresti provare a embleddare il tuo editor all' interno del tuo programma , magari funziona meglio, oppure puoi provare a vedere se esiste un comando in bash per dare il focus ad una data finetra, partendo dal suo id , in questo modo quando hai scritto cio che vuoi sul tuo programma dai il focus alla finestra dell' editor e poi di nuovo al tuo programma.


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #12 il: 21 Giugno 2011, 16:34:58 »
potresti provare a embleddare il tuo editor all' interno del tuo programma , magari funziona meglio, oppure puoi provare a vedere se esiste un comando in bash per dare il focus ad una data finetra, partendo dal suo id , in questo modo quando hai scritto cio che vuoi sul tuo programma dai il focus alla finestra dell' editor e poi di nuovo al tuo programma.

Grazie "fsurfing" per il tuo contributo. La funzione "Embedder.Embed" è abbastanza complessa da quel che ho visto... magari per questo miracolo mi voglio attrezzare meglio.  ;D
Però prezioso è stato il tuo suggerimento del comando in bash. Facendo una ricerca, ho trovato il comando wmctrl, il quale consente di interagire, combinato soprattutto con l'opzione " -a ", appunto con una determinata finestra avente un certo "Nome" e/o "PID".

Per gli amici del forum, assetati di conoscenza, segnalo di seguito l'indirizzo web della pagina relativa al comando wmctrl: http://linux.die.net/man/1/wmctrl

Quindi ora il codice si trasforma mediante l'eliminazione dei precedenti comandi "ME.Hide" e "ME.Show", ed aggiungendo il comando: < SHELL "wmctrl -a Nome_finestra_del_programma" >.
Be', effettivamente un miglioramento c'è stato, giacché non avviene più quel macchinoso - seppur veloce - scompari/ricompari del Form, a causa del quale, se fatto fare più volte con frequenza troppo alta, potrebbe sorgere il rischio di un qualche crash: a me - anche se per una volta sola - s'è imballato  :rolleyes: il sistema.

Segnalo, però, due cose:
  • ora con il nuovo comando "wmctrl" non c'è più bisogno di inserire uno spazio alla fine della stringa e conseguentemente non c'è neppure più bisogno del comando "Desktop.Sendkeys("[BackSpace]"), perché la stringa viene mostrata nell'editor anche senza lo spazio finale che avevo dovuto inserire nel precedente codice.
  • tra il nuovo comando "wmctrl" e "Desktop.Sendkeys" ho dovuto porre un wait (fissato comunque a 1/10 di secondo), altrimenti non viene scritta la stringa nell'editor (...altro mistero :mad: ).

Per riassumere, quel codice, sopra inserito, è diventato ora così:

Codice: gambas [Seleziona]
' Gambas class file

PUBLIC SUB Form_Open()

' All'apertura del programma per comodità lancia l'editor "gedit"
' (uso "gedit" a fini sperimentali del codice)
  SHELL "gedit"

END

PUBLIC SUB Button1_Click()          ' svolge le funzioni di scrivere una stringa in "gedit"

' serve a far andare il focus nell'editor "Gedit", e quindi a tenere sempre il cursore all'interno di "Gedit"
'Il nome della finestra del programma Gedit è: " gedit "; quindi inserirò questo nome così scritto.
   SHELL "wmctrl -a gedit"     ' l'opzione " -a " serve ad assegnare appunto il focus nella finestra " gedit ".

' mi sono visto costretto ad inserire un seppur brevissimo WAIT,
' ...altrimenti la stringa non viene scritta  :-(
  WAIT 0.1

' scrive in "gedit" la stringa (lo spazio finale non è più indispensabile)
   Desktop.SendKeys("Stringa")

END


Vi farò sapere eventualmente quello che succede con l'uso di Embed.
« Ultima modifica: 31 Agosto 2012, 10:41:33 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #13 il: 08 Luglio 2011, 14:37:19 »
Vi farò sapere eventualmente quello che succede con l'uso di Embed.

...allora: la prova con Embedder1.Embed l'ho fatta ; ma mi ha creato alcuni dubbi e perplessità.
Preciso e premetto che la prova è stata fatta con Gambas 3, e che la finestra inglobata è stata quella Gedit.

Riporto - anche ad utilità degli altri - di seguito il codice base, suggeritomi da fsurfing e mio adattamento al caso, per Embed:
Codice: gambas [Seleziona]
Public Sub Button1_Click()  
    
Dim id As New Integer[]  
      
  id = Desktop.FindWindow(FMain.Title)  ' .FindWindow : SOLO per Gambas3; mentre per Gambas2 è .Find !!!
    
  If id.Count > 0 Then  
      label1.text = id[0]            ' se si vuole vedere il PID
  Endif

    Embedder1.Embed(id[0])     ' inserisco la variabile contenente il PID della finestra (opportunamente già minimizzata) di Gedit.
      
End  


La finestra di Gedit è stata appunto inglobata, ma...
  • primo, la finestra di Gedit (o di qualsiasi altro programma prescelto) viene inglobata solo se è stata preventivamente minimizzata  :hard: ! (cfr. al riguardo: http://www.gambas-it.org/smf/index.php?topic=1822.0). Lì ho domandato perché e soprattutto se anche altri riscontrano comportamenti analoghi, ma nessuno mi ha risposto. Ahimé !
  • secondo, nella finestra inglobata di Gedit non è poi possibile scriverci (il cursore del mouse non compare), come se fosse inattivo  ??? . Fatta, però, la prova di inglobamento invece con la calcolatrice, questa funziona regolarmente.



Aggiornamento:

Rendo noto che ho fatto delle verifiche (oggi 14.11.2011) sul funzionamento di Embed con Gambas 3 aggiornato, e rinvio a queste discussioni dove ho descritto i risultati finalmente positivi:

http://www.gambas-it.org/smf/index.php?topic=1923.msg21337#msg21337
http://www.gambas-it.org/smf/index.php?topic=1822.0

Si veda anche la Wiki: http://www.gambas-it.org/wiki/index.php/Embedder
« Ultima modifica: 31 Agosto 2012, 10:41:53 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Programma che scrive su un editor di testo contemporaneamente aperto
« Risposta #14 il: 27 Ottobre 2011, 11:34:49 »
Se non si intende usare Embedder, molto utile è questa discussione:

http://www.gambas-it.org/smf/index.php?topic=1908.msg21178#msg21178

Le due soluzioni proposte risolvono ottimamente la questione posta all'inizio.
« Ultima modifica: 18 Febbraio 2012, 13:40:54 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »