Autore Topic: Embedder  (Letto 6396 volte)

  • Visitatore
Embedder
« il: 01 Maggio 2008, 00:13:57 »
Ciao

Siccome vedo il forum langue di nuovi post ci penso io  :-D

Ho un Embedder ( la funzione che mi permette di inglobare una finestra qualsiasi del mio desktop in un progetto gambas ).

Lo faccio funzionare così :

DIM ihandle AS NEW Pointer[]
DIM ahandle AS Integer

SHELL "rxvt"  ' parte l'applicazione
WAIT 0.2      ' se non lo metto le fasi successive crashano, se metto 0.1 certe volte va certe no

ihandle = Desktop.Find("rxvt") 'trovo l'id (si dice così ?)
ahandle = ihandle[0]           'prendo il 1° ris del Find della riga sopra
Embedder1.Embed(ahandle)       'embeddo

Lui funziona , ma a causa probabilmente del WAIT 0.2 ( e comunque per un istante lo vedrei ugualmente suppongo ) vedo apparire la finestra che poi và a spostarsi dove deve.

Obrobrioso !

Esiste la possibilità d'agire in maniera diversa e eliminare questo problema ( lo so son troppo pignolo, ma nn ci posso far niente ) ?? Dagli esempi mi son recuperato quanto sopra ... però ...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Embedder
« Risposta #1 il: 01 Maggio 2008, 20:33:27 »
l' unica cosa che mi viene in mente è questa:


Codice: [Seleziona]

DIM ihandle AS NEW Pointer[]
DIM ahandle AS Integer


  SHELL "rxvt" ' parte l'applicazione
   

  riprova:

  ihandle = Desktop.Find("rxvt") 'trovo l'id (si dice così ?)

  if ihandle.count=0 then goto riprova


 ahandle = ihandle[0] 'prendo il 1° ris del Find della riga sopra    

 Embedder1.Embed(ahandle) 'embeddo

g.paolo

  • Visitatore
Re: Embedder
« Risposta #2 il: 02 Maggio 2008, 13:22:04 »
Visto che hai sollevato il problema e quindi ritengo tu ne sappia molto più di me, desidero chiederti:
L'embedder dici, è la funzione che permette di inglobare una finestra qualsiasi del desktop in un progetto gambas.
Ma cosa intendi con il termine "inglobare"?
Se è un'istantanea del desktop che serve, perchè non memorizzarla in un file immagine e poi richiamarla?
Se non è questo lo scopo, allora proprio non capisco a cosa potrebbe servire.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Embedder
« Risposta #3 il: 02 Maggio 2008, 14:25:48 »
In realtà serve per inglobare, ossia gestire, un'applicazione esterna a Gambas da un'applicazione Gambas. Una specie di come Explorer o Firefox fà vedere un documento pdf, attraverso l'interfaccia adobe, all'interno della stessa finestra del browser, con tutti i menu e i comandi contenuti nella finestra di adobe.
In altre parole, crea un link con un altro processo X11 (applicazione su desktop), e ne gestisce la comunicazione, in modo da poterla controllare all'interno del tuo programma Gambas.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Embedder
« Risposta #4 il: 02 Maggio 2008, 16:47:15 »
Ti consiglio di contattare Pixel, se non sta seguendo questa discussione perché oberato dal lavoro... tempo fa mi parlò di esperimenti condotti proprio con l'esempio Embedder di Gambas: magari può darti una mano.
Visita il mio sito personale: http://www.leonardomiliani.com

g.paolo

  • Visitatore
Re: Embedder
« Risposta #5 il: 02 Maggio 2008, 17:56:51 »
@md9327
 Molto chiaro il concetto, grazie!
@leo72
Al momento non ho l'esigenza di usarlo, ma quando ho una pulce è meglio che la levi subito. In tal modo se dovessi averne bisogno in futuro, mi sarà più facile ricordare che il tema è stato trattato adeguatamente e ne ho capito il significato.

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: Embedder
« Risposta #6 il: 02 Maggio 2008, 18:03:07 »
E' vero alcuni mesi fa' ho fatto degli esperimenti con l'oggetto in questione.
Personalmente li ho poi abbandonati perchè "rischiosi", probabilmente è perchè non ho approfondito a sufficienza ed è probabile che usando Gnome ci sia un qualche conflitto.
In pratica è possibile inglobare TUTTO Gnome in una finestra ma poi non sono mai riuscito a "rilasciarlo" e non vi dico.
Non so'.. non ne vedo un gran utilizzo nelle applicazioni normali.
Ciao
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Embedder
« Risposta #7 il: 02 Maggio 2008, 19:25:40 »
io lo utilizzato per realizzare un programmino per vedere la tv digitale terrestre
in pratica inglobavo nel mio form la finestra video di mplayer lanciato con comando exec.

ps @ giac_fab

se utilizzi exec o shell per avviare un programma (ad esempio rxvt) ti conviene controllare l' applicazione tramite un processo altrimenti chiudendo la tua applicazione il programma lanciato rimarrà in memoria e non verrà terminato, questo in alcuni casi puo essere problematico.

ovvero ti conviene modificare il codice in questo modo:

Codice: [Seleziona]


PRIVATE hpro as process ' questa la devi dichiarare all' inizio del programma

DIM ihandle AS NEW Pointer[]
 DIM ahandle AS Integer    

 hpro=exec ["rxvt"] ' parte l'applicazione

         riprova:
   ihandle = Desktop.Find("rxvt") 'trovo l'id (si dice così ?)

    if ihandle.count=0 then goto riprova  

 ahandle = ihandle[0] 'prendo il 1° ris del Find della riga sopra    

  Embedder1.Embed(ahandle) 'embeddo


in questo modo potrai terminare l' applicazione lanciata con un semplice

hpro.kill

  • Visitatore
Re: Embedder
« Risposta #8 il: 02 Maggio 2008, 21:24:46 »
Ciao

E' migliorato alquanto con il tuo aggiustamento, fsurfing .... adesso la cosa si è limitata ad un flash ..... grazie, così è accettabile .

Io sto usando l'embedder per inglobarmi nel file manager che mi sto facendo ( ne avete avuto a che fare un po tutti  :-) ) la console : utilizzavo quella degli esempi ma aveva un sacco di pecche ( non cera l'autocompletamento, certe informazioni non le visualizzava correttamente ecc ecc ) .....


Sono d'accordo con darth13 , in molti casi è utile approfondire l'argomento, per renderlo disponibile a ricerche future. Mi è tornato utilissimo per esempio un topic riguardante i menu e il menu editor le cui funzioni ignoravo assolutamente ....

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Embedder
« Risposta #9 il: 03 Maggio 2008, 00:09:23 »
anche per la tua console ti conviene utilizzare l' implementazione di un processso  altrimenti ogni volta che il tuo proramma avvia la console  avrai in memoria una copia di rxvt che si aggiunge ai processi gia presenti sul pc.
questo lo puoi verificare tramite il monitor di sistema nella scheda processi

  • Visitatore
Re: Embedder
« Risposta #10 il: 03 Maggio 2008, 11:37:29 »
Si, avevo omesso di riportarlo .... ottimo consiglio grazie .....

  • Visitatore
Re: Embedder
« Risposta #11 il: 03 Maggio 2008, 12:51:28 »
Piccola modifica al tuo codice :

Ho visto che con un programma che ci mette un pò di più a partire (la console precedente ma con i tab, quindi millesimi di secondo) mi si creava un loop che mi impegnava il processore alla grande, l'embeddatura avveniva in media dopo 30 secondi ( nonostante il programma puro sia istantaneo).
Probabilmente gambas non riusciva a completare il find che gli si riproponeva il comando.

ho ovviato aggiungendo un seplice sleep di 0.01 sec è adesso funziona.




Ho notato che serve il process.kill .... nelle prove non lo avevo messo mi son trovato con 30 rxvt in backgranund .....

  • Visitatore
Re: Embedder
« Risposta #12 il: 18 Maggio 2008, 23:01:53 »
2 piccole cose ....

1° come potrei fare per killare in chiusura il processo ? Se non è aperto dà errore ....

2° Embeddando mi perde il "focus" sul form aperto ( passa in 2do piano ) come si fà a riprenderlo ?

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Embedder
« Risposta #13 il: 19 Maggio 2008, 10:11:14 »
1) per non ricevere l'errore usa TRY, cioè
TRY _il_comando_per_killare_

2) dovrebbe essere Form.Show o Form.Raise o Form.SetFocus
a seconda del caso e di quello che stai facendo o del tipo di form che ti sottrare il focus.
Provali e vedi quale funziona. Ciao.

  • Visitatore
Re: Embedder
« Risposta #14 il: 19 Maggio 2008, 19:42:48 »
Il TRY funziona .... non crasha più .... però mi dice che il programma è uscito col il valore 1 ... come la elimino questa segnalazione ???


Show .... raise ecc ecc li avevo già provati ....

Il problema probabilmente è che faccio partire l'applicazione nel "windows manager" ( xfce ) quindi il focus esce da gambas ( che perde il focus proprio a livello "linux" ) e non lo riprende più .....

EDIT :
Mi si è accesa una lampadina :
 fmain.Hide
  fmain.Show
  fmain.Embedder1.SetFocus

Poco elegante ma funziona ..... come al mio solito  :-D