Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente
 
La Clase Desktop Y Aplicaciones Embebidas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Citar:

Supongo que lo mejor será llamar al proceso y utilizar un componente Timer para localizarlo con un Desktop.Find


Bastaría con un simple bucle con una instrucción WAIT.

Citar:

porque si lo haces con un bucle y la llamada al proceso no tiene éxito te puedes quedar clavado.


Supongo que "la llamada al proceso" significa: EXEC["gnome-terminal"] .  Esta instrucción no debe estar dentro del bucle (que es sólo para dar tiempo a que la carga del programa haya concluido y así Desktop.Find pueda encontrar el id XWindow del proceso.

Debería ser algo así:

'escribo sólo el código para el bucle

DIM Counter AS Byte = 0

  'Para evitar errores con el array puntero es mejor inicializarlo explicitamente (DIM puntero AS NEW Pointer[])
  'de lo contrario puntero podría ser nulo al momento de realizar la comparación (lo que generaría un error en tiempo de ejecución)

  WHILE Counter < 50 OR puntero.Count = 0
    WAIT 0.005
    Desktop.Find("","*gnome-terminal*","")
    Counter += 1
  WEND

 

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Muchas gracias por vuestras respuestas.

De todos modos sigo sin poder embedir un terminal en mi form, de hecho, mis conocimientos de gambas no son muchos, y quizás mi error es trivial, por este motivo, os copio a continuación mi SUB del objeto que pretendo embeder.

PUBLIC SUB Embedder1_Embed()

DIM Counter AS Byte = 0

  'Para evitar errores con el array puntero es mejor inicializarlo explicitamente (DIM puntero AS NEW Pointer[])
  'de lo contrario puntero podría ser nulo al momento de realizar la comparación (lo que generaría un error en tiempo de ejecución)
DIM puntero AS NEW Pointer[]
  
  DIM ipuntero AS Integer
DIM Proceso AS Process

  WHILE Counter < 50 OR puntero.Count = 0
    WAIT 0.005
    Desktop.Find("", "*gnome-terminal*", "")
    Counter += 1
  WEND
  

Proceso = EXEC ["gnome-terminal"] 'iniciar el proceso gnome terminal

ipuntero = proceso.handle 'quedarme con su handle

Embedder1.Embed(ipuntero) 'embeberlo


END


Mi otra alternativa, es hacer el embed via Glade+C+GTK, (mediante la libreria VTE) cosa que si he conseguido, pero no puede compararse ni de lejos, la rapidez con que podrian actualizarse viejas aplicaciones de consola, haciendo GUI's de terminales embedidas en gambas. Vaya, un sueño casi. En todo caso, y que yo sepa, no he visto ningun binding de dicha libreria (VTE) para gambas.
 



 
Steve - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Steve, cuando escribes un mensaje al foro utiliza el primer icono C# antes y después del código que expongas para que quede resaltada la sintaxis y se más fácil de leer.

En cuanto a tu código el problema es trivial tal como tu mismo lo dices, intentas encontrar el handle de una ventana con el método Desktop.Find antes de ejecutar la terminal. Cambia el orden, primero la sentencia EXEC, luego el bucle con el método Desktop.Find.

Hay un par de errores más en tu código:

- Esta sentencia perderá el handle de la ventana que encuentre:
Desktop.Find("", "*gnome-terminal*", "")
 


Reemplazala con:
puntero = Desktop.Find("", "*gnome-terminal*", "")
 

Ahora el array "puntero" contiene todos los punteros (handle) a las ventanas de gnome-terminal abiertas.

- Esta sentencia es errónea (obtiene el pid del proceso en vez del handle XWindow)
ipuntero = proceso.handle 'quedarme con su handle
 

Reemplazala por:
ipuntero = puntero[0]
 

Eso es todo.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Nuevamente gracias. Pese a todo, sigo sin poder obtener el resultado. Al correr la aplicación, mi formulario sigue en blanco y el objeto Embedder1 no es visible. Ignoro si en SUB _new() o en SUB Form_Open() deberia especificar algo mas. Tb lo he probado con gnome-terminal corriendo  y sin. Es preciso tener proceso gnome-terminal ejecutándose?

El código del objeto a embedir, con las indicaciones que en el anterior me dabas, quedaria como sigue:


PUBLIC SUB Embedder1_Embed()

DIM Counter AS Byte = 0

  'Para evitar errores con el array puntero es mejor inicializarlo explicitamente (DIM puntero AS NEW Pointer[])
  'de lo contrario puntero podría ser nulo al momento de realizar la comparación (lo que generaría un error en tiempo de ejecución)
DIM puntero AS NEW Pointer[]
  
  DIM ipuntero AS Integer
DIM Proceso AS Process

Proceso = EXEC ["gnome-terminal"] 'iniciar el proceso gnome terminal

  WHILE Counter < 50 OR puntero.Count = 0
    WAIT 0.005
    puntero = Desktop.Find("", "*gnome-terminal*", "")
    Counter += 1
  WEND
  
ipuntero = puntero[0]

Embedder1.Embed(ipuntero) 'embeberlo

END
 

 



 
última edición por Steve el Jueves, 10 Diciembre 2009, 12:33; editado 2 veces 
Steve - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
'Este codigo no debe ir en el evento Embed del control Embedder
'PUBLIC SUB Embedder1_Embed()

PUBLIC SUB Button1_Click()
DIM Counter AS Byte = 0
DIM puntero AS NEW Pointer[]
DIM ipuntero AS Integer
DIM Proceso AS Process

  Proceso = EXEC ["gnome-terminal"]

  'Aquí hay otro error que provocaría un bucle infinito
  'WHILE Counter < 50 OR puntero.Count = 0

  WHILE Counter < 50 AND puntero.Count = 0
    'Si aún la ventana aún no se incrusta puede aumentar este valor: WAIT 0.05
    WAIT 0.005
    puntero = Desktop.Find("", "*gnome-terminal*", "")
    Counter += 1
  WEND
  
  IF puntero.count = 1 THEN
    ipuntero = puntero[0]
  ENDIF

Embedder1.Embed(ipuntero)

END
 

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Sigamos... xD! Ahora me dice Unknown Symbol 'Find' in the Class 'Destkop'
Y me abre el gnome-terminal pero no embedido en el form, sinó lanzado aparte...

Ahora copio toda el listado de mi Fmain.class a ver...

' gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

END

PUBLIC SUB Button1_Click()

  'Este codigo no debe ir en el evento Embed del control Embedder
'PUBLIC SUB Embedder1_Embed()

DIM Counter AS Byte = 0
DIM puntero AS NEW Pointer[]
DIM ipuntero AS Integer
DIM Proceso AS Process

  Proceso = EXEC ["gnome-terminal"]

  'Aquí hay otro error que provocaría un bucle infinito
  'WHILE Counter < 50 OR puntero.Count = 0

  WHILE Counter < 50 AND puntero.Count = 0
    'Si aún la ventana aún no se incrusta puede aumentar este valor: WAIT 0.05
    WAIT 0.05
    puntero = Desktop.Find("", "*gnome-terminal*", "")
    Counter += 1
  WEND
  
  IF puntero.count = 1 THEN
    ipuntero = puntero[0]
  ENDIF

Embedder1.Embed(ipuntero)

END


PUBLIC SUB Embedder1_Embed()

END

 

 



 
última edición por Steve el Jueves, 10 Diciembre 2009, 15:31; editado 1 vez 
Steve - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Citar:

Ahora me dice  Unknown Symbol 'Find' in the Class 'Destkop'


Es porque tienes que habilitar el componente gb.Desktop:

Proyecto > Propiedades > Componentes
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Ok, bien!  El terminal ya se incrustra correctamente. Ahora solo falta activar el 'focus' (el prompt ok, pero no deja escribir en el aun) y saber como lanzar una aplicación; por ejemplo lanzar el editor Vim.

Bajando el wait a 0.05 nos nos ahorramos ciertamente el lanzamiento de otro terminal 'real'.

Sabiendo eso, el resto del proyecto se completaria casi automaticamente; Se trata de aprovechar aplicaciones de consola 'a-medida', lanzandolas via menus del GUI de la aplicacion, o botones es igual. A mi parece algo tremendamente util... Hace unos años el powershell y el multi-gnome-terminal hacian eso, pero las librerias que utilizaban estan ahora 'deprecated' ...

gracias,

Steve,


fabianfv escribió: [Ver mensaje]
Citar:

Ahora me dice  Unknown Symbol 'Find' in the Class 'Destkop'


Es porque tienes que habilitar el componente gb.Desktop:

Proyecto > Propiedades > Componentes

 



 
Steve - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Citar:

Ahora solo falta activar el 'focus' (el prompt ok, pero no deja escribir en el aun)


Seguramente estás usando el componente gb.gui o gb.gtk, lamento decirte que el comportamiento que citas parece ser un bug en la implementación del componente GTK (o bien la biblioteca GTK no cumple el protocolo XEmbed).

Si activas gb.qt verás que ese problema desaparece.

Citar:

 y saber como lanzar una aplicación; por ejemplo lanzar el editor Vim.


Ya lo sabes, usas EXEC o SHELL. En el libro "gambas, programación visual con software libre" disponible en la sección de descargas, hay un capítulo completo dedicado a la gestión de procesos.

Citar:

Bajando el wait a 0.05 nos nos ahorramos ciertamente el lanzamiento de otro terminal 'real'.


No entiendo que quieres decir.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Efectivamente, activando gb.qt y desactivando los otros 2, la cosa funciona mejor.
Tb puedo lanzar ahora, exec y shell, diferentes aplicaciones.

Pese a todo, el funcionamento es algo inestable; el foco se 'pierde'. Si el tiempo del wait es menor a 0.05 (por ejemplo 0.005) suele lanzar otra terminal no-incrustada. Y tambien, a partir del segundo o tercer F5, aun se vuelve mas inestable. En cambio, cuando funciona, la terminal es bastante rapida.

Pese a todo agradezco mucho la ayuda. En todo caso, propongo que en futuras versiones de gambas se implemente binding de la libreria Vte.h en el que se pueda interaccionar de-hacia los objetos graficos hacia-de la terminal. Actualmente no hay ni un solo RAD que lo haga posible. Ni siquiera en Glade existe VTE com widget, y hay que implementarlo.

Os imaginais la cantidad de aplicaciones 'vintage' de los dias de 'solo-consola' que podrian actualizarse via menus hibridos?

gracias,

Steve,
 



 
última edición por Steve el Viernes, 11 Diciembre 2009, 13:08; editado 1 vez 
Steve - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ayuda Con Aplicaciones Embebidas luisrel Controles/Librerías/Componentes 0 Jueves, 25 Noviembre 2010, 05:20 Ver último mensaje
luisrel
No hay nuevos mensajes Menu De Aplicaciones (Desktop Desarrollado... hertux General 2 Jueves, 18 Agosto 2011, 16:36 Ver último mensaje
hertux
No hay nuevos mensajes Clase Up: Actualización De Tus Aplicaciones jsbsan Aplicaciones/Fragmentos de Código 1 Miercoles, 19 Octobre 2011, 21:04 Ver último mensaje
jsbsan
No hay nuevos mensajes Desktop Innova hertux General 2 Miercoles, 20 May 2015, 21:40 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron