Autore Topic: Embedder  (Letto 6397 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Embedder
« Risposta #15 il: 19 Maggio 2008, 19:59:30 »
esattissimo


per " killare" in form_close()

Codice: [Seleziona]



PUBLIC SUB form1_close()


 TRY hprocess.kill

   IF NOT ERROR THEN
      hprocess.kill
   ENDIF

END

 

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Embedder
« Risposta #16 il: 19 Maggio 2008, 20:02:39 »
Nella guida di gambas, sotto "error messages" il #1 è "out of memory".
Non ho capito però se è il tuo programma che va out of memory o qualche altro
lanciato dal tuo programma.

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Embedder
« Risposta #17 il: 19 Maggio 2008, 20:11:38 »
Citazione

fsurfing ha scritto:
esattissimo


per " killare" in form_close()

Codice: [Seleziona]



PUBLIC SUB form1_close()


 TRY hprocess.kill

   IF NOT ERROR THEN
      hprocess.kill
   ENDIF

END

 


mi permetto di correggerti. TRY esegue già l'operazione. la seconda parte è inutile
a meno che non si voglia fare un debug.

  • Visitatore
Re: Embedder
« Risposta #18 il: 19 Maggio 2008, 20:55:55 »
Se trova il processo aperto da killare lo killa e mi dice mi dice "valore d'uscita 1 " se non trova niente da killare non dice niente .....

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Embedder
« Risposta #19 il: 19 Maggio 2008, 23:22:07 »
Ok, detto così sembra che il processo killato scriva sullo standard output
il codice d'errore.

puoi provare ad aggiungere questo alla fine del comando che stai eseguendo:

 2>/dev/null

ad esempio prova in un terminale:

ls cartellafarlocca

e

ls cartellafarlocca 2>/dev/null


in pratica "2>/dev/null" sopprime i messaggi d'errore. tuttavia non sapendo
come è strutturato il tuo programma questa è solo una possibile soluzione.

saluti

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: Embedder
« Risposta #20 il: 06 Settembre 2009, 17:13:40 »
ho provato, leggendo questo topic, per imparare qualcosa sull embedder... ma...

Codice: [Seleziona]

' Gambas class file

PRIVATE hpro AS process


PUBLIC SUB _new()
iniziale.Title = "prova embedder"
END

PUBLIC SUB Form_Open()



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
END
PUBLIC SUB Exit_Click()

  iniziale.Close

END




è uguale a qualche post fa, mi da il seguente errore a me:
UNknown symbol find in class desktop

è risolvibile?

  • Visitatore
Re: Embedder
« Risposta #21 il: 06 Settembre 2009, 17:31:33 »
devi aggiungere il componente desktop sulle proprietà del progetto ( Menu progetto > Proprietà > Componenti

Ovviamente devi utilizzare "rxvt" solamente se vuoi utilizzare rxvt ..... se utilizzerai xterm o qualcos'altro .....

Poi la ricerca viene effettuata a livello del titolo che esce sulla barra del wm dell'applicazione ... quindi occhio ....

per compredere bene ti conviene fare qualche prova con l'esempio embedder .

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Embedder
« Risposta #22 il: 06 Settembre 2009, 17:53:02 »
Un consiglio; evita il goto....è una delle peggiori istruzioni del mondo!!!!

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: Embedder
« Risposta #23 il: 06 Settembre 2009, 22:37:05 »
1) senza goto come faccio? senza il goto ottengo prestazioni migliori?

2) sono riuscito, ma ad esempio se voglio inglobare KOLF, me lo ingloba, ma mi apre anche una finestra KOLF, quindi mi ritrovo con 2 KOLF, uno nel mio form e uno x gli affari suoi come se fosse lanciato normalmente.. consigli per risolverlo?

allego il codice che ho usato:

Codice: [Seleziona]


PUBLIC SUB _new()
iniziale.Title = "prova embedder"
END

PUBLIC SUB Form_Open()

DIM ihandle AS NEW Pointer[]
DIM ahandle AS Integer

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

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

END

PUBLIC SUB Exit_Click()

  iniziale.Close

END


  • Visitatore
Re: Embedder
« Risposta #24 il: 06 Settembre 2009, 23:07:55 »
per evitare il GOTO (che in dialetto veneto vuol dire bicchiere) penso tu possa utilizzare WHILE .... ma non credo tu possa ottenere qualche miglioria su questo pezzettino di codice  :-x

che ti lanci 2 istanze di programma mi sembra strano .... se lo fai partire da console ne apre due o una ? Se provi con altri programmi ?

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: Embedder
« Risposta #25 il: 06 Settembre 2009, 23:10:33 »
Sempre doppi... tutti i programmi.. è quello che non capisco...

per il GOTO molto interessante questo http://vec.wikipedia.org/wiki/Vin  :-)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Embedder
« Risposta #26 il: 06 Settembre 2009, 23:12:46 »
un metodo può essere anche il seguente:

l' anci l' applicazione tramite shell controllato da hprocess (vedi il tuo post in cui ti ho messo l' esempio)

tramite hprocess ricavi l' id del programma (se è un comando da terminale l' id sarà uguale a quello indicato da hprocess, se è un programma sarà aumentato di 1

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: Embedder
« Risposta #27 il: 06 Settembre 2009, 23:19:17 »
Mi piacerebbe continuare sulla falsa riga dell'ultimo codice che ho postato dato che è anche l'unico che ho capito :)

non capisco il perchè mi apra due applicazioni.. apparte quello funziona..


--------


post edit

risolto :)

-------------

post post edit


ma per chiudere cio che è in Embedder1 come faccio?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Embedder
« Risposta #28 il: 07 Settembre 2009, 00:49:21 »
[Nettamente Off Topic]

Citazione

giac_fab ha scritto:
ma non credo tu possa ottenere qualche miglioria su questo pezzettino di codice  :-x


Allora...chiarisco subito così non se ne parla più!!!!
Il problema non è se il GOTO è più prestante o meno in questo codice; la questione fondamentale è che siccome ilnostro amico sta appena iniziando è meglio portarlo ora sulla retta via che non dover cambiare le sua bitudini dopo poichè risulterebbe più difficile.

Con questo spero di aver spiegato una volta per tutte il perchè scrivo cose che possono sembrare da professore pazzo! Io a 20 anni non voglio inseganre niente a nessuno ma solo aiutare!

[chiuso il netto off topic]

Offline ira83

  • Gambero
  • **
  • Post: 85
    • Mostra profilo
Re: Embedder
« Risposta #29 il: 07 Settembre 2009, 21:11:28 »
mmmmmmmmmm non ci saimo... ehhe

form 2:
Codice: [Seleziona]

PUBLIC SUB Form_Open()

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

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

END


form 1:
Codice: [Seleziona]

PUBLIC SUB kolf_Click()

iniziale.Close
from2.Show


END


se faccio partire il programma da form2, l'embedder funziona a dovere, se lo faccio partire da form1 no!!!

inoltre ho messo le variabili in un modulo ho fatto bene?
var:
Codice: [Seleziona]

PUBLIC ihandle AS NEW Pointer[]
PUBLIC ahandle AS Integer








infine, con che comando chiudo un programma in embedder?